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}}


后续,请等待…

你可能感兴趣的:(hadoop,cloud,httpfs)