首頁  >  文章  >  資料庫  >  HDFS HttpFS操作实战

HDFS HttpFS操作实战

WBOY
WBOY原創
2016-06-07 16:41:272268瀏覽

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如何工作?

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代理
–> 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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn