HttpFS是提供REST HTTP接口的服务器,可以支持全部HDFS文件系统操作(读和写),它通过webhdfs REST HTTP API来进行交互。这个功能由cloudera提供给Apache主分支。 HttpFS可以用于在不同的Hadoop版本间传输数据(避免了RPC版本问题),例如使用Hadoop DistCP
HttpFS是提供REST HTTP接口的服务器,可以支持全部HDFS文件系统操作(读和写),它通过webhdfs REST HTTP API来进行交互。这个功能由cloudera提供给Apache主分支。
HttpFS可以用于在不同的Hadoop版本间传输数据(避免了RPC版本问题),例如使用Hadoop DistCP。
HTTP可以用于访问防火墙内的HDFS集群数据(HttpFS可以作为一个网关角色,是唯一可以穿过防火墙访问内部集群数据的系统)。
HttpFS可以通过HTTP工具(比如curl和wget)和各种编程语言的HTTP包(不局限Java)来访问数据。
webhdfs 客户端文件系统实现可以使用HDFS文件系统命令行命令(如hadoop dfs)以及使用HDFS Java API来访问HttpFS。
HttpFS内置安全特性支持Hadoop伪身份验证和HTTP SPNEGO Kerberos 和其他插件式(pluggable )验证机制。它还提供了Hadoop代理用户的支持。
HttpFS是一个运行于绑定Tomcat中的Java Web应用,独立于Hadoop NameNode。
HttpFS HTTP web-service API调用是 映射HDFS文件操作命令的HTTP REST调用,例如:
$ curl http://httpfs-host:14000/webhdfs/v1/user/foo/README.txt 返回HDFS中/user/foo/README.txt目录的内容。 $ curl http://httpfs-host:14000/webhdfs/v1/user/foo?op=list 以JSON的形式返回HDFS 中/user/foo目录的内容。 $ curl -X POST http://httpfs-host:14000/webhdfs/v1/user/foo/bar?op=mkdirs 创建HDFS/foo.bar目录。
–> HttpFS的灵感来自于Hadoop HDFS代理
–> HttpFS可以被认为是Hadoop HDFS代理的完全重写
–> Hadoop HDFS代理提供了文件系统操作的子集(只能读),而HttpFS提供了全部文件系统的操作
–> HttpFS使用了一套纯净的 HTTP REST API,可以更直接得使用HTTP工具
–> HttpFS提供了Hadoop的伪认证,Kerberos SPNEGOS 认证和Hadoop代理用户,而Hadoop HDFS 代理没有提供
操作实战:
# 首先在Cloudera Manager中启用HttpFS(server:hdp02)。详细API介绍参考下面文档链接。 # 关于HttpFS中的伪认证,可以通过&user.name来提供,下面的命令获得hive用户的homedir curl "http://hdp02:14000/webhdfs/v1?op=gethomedirectory&user.name=hive" {"Path":"\/user\/hive"} # 创建一个/user/hive/tmp目录,目录的权限为777 curl -i -X PUT "http://hdp02:14000/webhdfs/v1/user/hive/tmp?op=MKDIRS&user.name=hive" {"boolean":true} curl -i -X PUT "http://hdp02:14000/webhdfs/v1/user/hive/tmp?op=SETPERMISSION&permission=777&user.name=hive" #列出/user/tmp下的文件列表 curl "http://hdp02:14000/webhdfs/v1/user/hive?op=LISTSTATUS&user.name=hive" {"FileStatuses":{"FileStatus":[{"pathSuffix":"tmp","type":"DIRECTORY","length":0,"owner":"hive","group":"hadoop","permission":"777","accessTime":0,"modificationTime":1419234576458,"blockSize":0,"replication":0}]}} #上传文件 curl -i -X PUT -T /tmp/test.txt "http://hdp02:14000/webhdfs/v1/user/hive/tmp/test.txt?op=CREATE&data=true&user.name=hive" -H "Content-Type:application/octet-stream" HTTP/1.1 100 Continue HTTP/1.1 201 Created ...... #删除tmp目录 curl -i -X DELETE "http://hdp02:14000/webhdfs/v1/user/hive/tmp?op=DELETE&recursive=true&user.name=hive" HTTP/1.1 200 OK ...... {"boolean":true}
相关文档:
Hadoop HDFS over HTTP
WebHDFS REST API
Hadoop HDFS over HTTP 2.6.0 – Server Setup
Hadoop HDFS over HTTP 2.6.0 – Using HTTP Tools
原文地址:HDFS HttpFS操作实战, 感谢原作者分享。