HDFS HttpFS操作实战

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调用,例如:

HttpFS和Hadoop HDFS代理有何不同?

–> HttpFS的灵感来自于Hadoop HDFS代理
–> HttpFS可以被认为是Hadoop HDFS代理的完全重写
–> Hadoop HDFS代理提供了文件系统操作的子集(只能读),而HttpFS提供了全部文件系统的操作
–> HttpFS使用了一套纯净的 HTTP REST API,可以更直接得使用HTTP工具
–> HttpFS提供了Hadoop的伪认证,Kerberos SPNEGOS 认证和Hadoop代理用户,而Hadoop HDFS 代理没有提供
操作实战:

相关文档:
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

Posted in BigData, Hadoop, Ops.
  1. 请问我在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