lilingjie2015 发表于 2016-12-6 11:09:27

Hadoop REST API -- WebHDFS(上)

1 介绍
  Hadoop提供了一个Java native API来支持对文件系统进行创建,重命名,删除文件或者目录,打开读取或者写文件,设置文件权限等操作。这对于运行在hadoop集群中的应用程序来说是挺棒的,但是,也有许多外部的应用程序需要操作HDFS的情况,怎么办?如果解决这种问题呢?Hortonworks 开发了一些额外的API来支持这些基于标准REST功能的需求。
  


2 WebHDFS REST API
  WebHDFS观念是基于HTTP操作,比如GET、PUT、POST和DELETE。像OPEN、GETFILESTATUS、LISTSTATUS的操作是使用HTTP GET,其它的像CREAT、MKDIRS、RENAME、SETPERMISSION是依赖于HTTP PUT类型。APPEND操作时基于HTTP POST类型,然而,DELETE是使用HTTP DELETE。
  认证方式可以使用基于user.name参数或者如果安全机制开启了就依赖于Kerberos。标准的URL格式如下所示:
  http://host:port/webhdfs/v1/?op=operation&user.name=username
  默认的启动对口是14000,你可以在httpfs-env.sh 中配置端口的值。所有与httpfs有关的环境参数变量,你可以再httpfs-env.sh中进行个性化的配置。
  


3 Httpfs 配置启动
  编辑core-site.xml文件,添加如下内容:
  …

<property>
<name>hadoop.proxyuser.#HTTPFSUSER#.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.#HTTPFSUSER#.groups</name>
<value>*</value>
</property>
  ….
  值得注意的是,#HTTPFSUSER#指的是用户名,即linux启动httpfs的用户。
  编辑hdfs-site.xml文件,添加下列属性配置。
  <property>
  <name>dfs.webhdfs.enabled</name>
   <value>true</value>
  </property>
  <property>
<name>dfs.permissions</name>
<value>false</value>

</property>

  另外,想知道更多的有关HDFS端口信息,请参考Cloudera blog.
  启动httpfs,执行如下命令:
  

httpfs.sh start


4 验证
  一切配置好了之后,测试一下是否配置成功是非常有必要的。有这样一种情况,我们需要知道hdfs 目录下tmp的文件状态。按照这样的需求,我们可以编写这样的命令:
  命令行下

curl –i http://hadoop-master:14000/webhdfs/v1/tmp?user.name=app&op=GETFILESTATUS
HTTP/1.1 200 OK
Server:Apache-Coyote/1.1
Set-Cookie:hadoop.auth="u=app&p=app&t=simple&e=1393293979907&s=9YBXB7GM3oiIOYgflAjlq3GIpxc=";Version=1; Path=/
Content-Type:application/json
Transfer-Encoding:chunked
Date: Mon, 24Feb 2014 16:06:20 GMT
{"FileStatus":{"pathSuffix":"","type":"DIRECTORY","length":0,"owner":"app","group":"supergroup","permission":"720","accessTime":0,"modificationTime":1391352186043,"blockSize":0,"replication":0}}


  浏览器中:

http://hadoop-master:14000/webhdfs/v1/tmp?user.name=app&op=GETFILESTATUS


  返回信息:

{"FileStatus":{"pathSuffix":"","type":"DIRECTORY","length":0,"owner":"app","group":"supergroup","permission":"720","accessTime":0,"modificationTime":1391352186043,"blockSize":0,"replication":0}}

  后续,请等待…
页: [1]
查看完整版本: Hadoop REST API -- WebHDFS(上)