欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

HDFS HttpFS操作实战

程序员文章站 2024-01-08 10:14:46
...

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