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调用,例如:
1 2 3 |
$ 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 代理没有提供
操作实战:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# 首先在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
请问我在Red Hat 4.8.2-16 搭建了hdfs,在使用httpfs的时候, 日志中出现了
log4j:WARN No appenders could be found for logger (org.apache.hadoop.util.Shell).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
我用的是hadoop自带的httpfs
请问这是为什么, 而且我需要把hadoop-env.sh 中的JAVA_HOME改成/home/java….jdk才能用, 是不是和这个问题有关联啊??
现在不管做什么操作json都会显示NullException
[hadoop@iZ62bcwb25pZ ~]$ curl -i “http://xx.xx.xx.xx:14000/webhdfs/v1?op=LISTSTATUS&user.name=taojiaen”
HTTP/1.1 500 Internal Server Error
Server: Apache-Coyote/1.1
Set-Cookie: hadoop.auth=”u=taojiaen&p=taojiaen&t=simple&e=1447209758905&s=bvZpONUcJU1NKD5sMQOjBBtC1x4=”; Path=/; Expires=Wed, 11-Nov-2015 02:42:38 GMT; HttpOnly
Content-Type: application/json
Transfer-Encoding: chunked
Date: Tue, 10 Nov 2015 16:42:39 GMT
Connection: close
{“RemoteException”:{“message”:null,”exception”:”NullPointerException”,”javaClassName”:”java.lang.NullPointerException”}}
求教求教
log4j是一个日志输出配置,详细信息参见:https://logging.apache.org/log4j/2.x/manual/configuration.html
在HADOOP_CONF_DIR中有一个相应的配置文件。这个仅和日志输出有关,与其他无关。
而hadoop-env.sh中的JAVA_HOME是最基本的配置,需要指向到一个有效的JDK目录。
NullException错误应该是与环境无关。建议使用最新版的cloudera发行版的hadoop
已经搞定了,是因为web.xml中的数据被我乱改了一通
全都到碗里来 !美臀/丝袜/美熟女乱伦精品大合集 !!!HTTp://uVU.cc/inRB
大宋绯闻录 看不了