Hadoop提供了两种Web方式访问HDFS,分别是:WebHDFS和HttpFS。

 

WebHDFS

WebHDFS提供了访问HDFS的RESTful接口,是内置组件,并且默认开启,运行于NameNode和DataNode中,对HDFS文件的读写,将会重定向到文件所在的DataNode,并且会完全利用HDFS的带宽。;

WebHDFS访问时,首先访问NameNode获知文件所在的DataNode地址,然后重定向到目标DataNode获取文件内容;

WebHDFS默认端口是50070和50075;

WebHDFS使得集群外的客户端可以不安装Hadoop和Java环境就可以对HDFS进行访问,并且不限制编程语言;

 

默认的URL格式: webhdfs://<HOST>:<HTTP_PORT>/<PATH>

HTTP URL格式: http://<HOST>:<HTTP_PORT>/webhdfs/v1/<PATH>?op=...

 

WebHDFS提供的操作列表功能清单:

HTTP GET

• OPEN (see FileSystem.open)

• GETFILESTATUS (see FileSystem.getFileStatus)

• LISTSTATUS (see FileSystem.listStatus)

• GETCONTENTSUMMARY (see FileSystem.getContentSummary)

• GETFILECHECKSUM (see FileSystem.getFileChecksum)

• GETHOMEDIRECTORY (see FileSystem.getHomeDirectory)

• GETDELEGATIONTOKEN (see FileSystem.getDelegationToken)

HTTP PUT

• CREATE (see FileSystem.create)

• MKDIRS (see FileSystem.mkdirs)

• RENAME (see FileSystem.rename)

• SETREPLICATION (see FileSystem.setReplication)

• SETOWNER (see FileSystem.setOwner)

• SETPERMISSION (see FileSystem.setPermission)

• SETTIMES (see FileSystem.setTimes)

• RENEWDELEGATIONTOKEN (see DistributedFileSystem.renewDelegationToken)

• CANCELDELEGATIONTOKEN (see DistributedFileSystem.cancelDelegationToken)

HTTP POST

• APPEND (see FileSystem.append)

 

实例1

如下:http://127.0.0.1:50070/webhdfs/v1/test?op=LISTSTATUS

类似:hadoop fs -ls /test

 

 

 

实例2

上传文件,需要两次请求,第一次请求会返回第二次请求的URL,通过第二次的URL上传文件。 这两次请求都是PUT请求。

1、http://127.0.0.1:50070/webhdfs/v1/test/test2.txt?op=CREATE&overwrite=true&replication=2&noredirect=true

返回信息:

{

    "Location": "http://LAPTOP-CEJI62RD:9864/webhdfs/v1/test/test2.txt?op=CREATE&namenoderpcaddress=localhost:9000&createflag=&createparent=true&overwrite=true&replication=2"

}

如下图(postman请求)

 

2、http://LAPTOP-CEJI62RD:9864/webhdfs/v1/test/test2.txt?op=CREATE&namenoderpcaddress=localhost:9000&createflag=&createparent=true&overwrite=true&replication=2

第二次请求需要在请求的body中指定上传的文件,返回上传文件的数量,返回状态201表示上传成功, 如下图(postman请求)

 

HttpFS

HttpFS是独立于HDFS的一个服务(Java Web应用程序),通过内置的Jetty服务器对外提供服务。本质上是一个代理服务。客户端对HDFS文件的读写,将会通过HttpFS进行中转,然后由HttpFS去跟HDFS集群交互,它能限制带宽占用。HttpFS的使用需要手动配置安装,它的默认端口14000。

HttpFS 可用于访问防火墙后面的群集上的 HDFS 中的数据(HttpFS 服务器充当网关,并且是唯一允许通过防火墙进入群集的系统)。

HttpFS 具有内置安全功能,支持 Hadoop 伪身份验证和 HTTP SPNEGO Kerberos 和其他可插入身份验证机制。它还提供 Hadoop 代理用户支持。

 

HttpFS的配置

配置文件:hdfs-site.xml(或core-site.xml), 添加下面内容:

<property>  
    <name>hadoop.proxyuser.root.hosts</name>  
    <value>*</value>  
</property>  
<property>  
    <name>hadoop.proxyuser.root.groups</name>  
    <value>*</value>  
</property>

注:两个参数名称中的root代表的是启动hdfs服务的OS用户,应以实际的用户名称代替。 表示root用户可以在任意host主机节点上代表任意group组的用户。

 

HttpFS的启动

hdfs --daemon start httpfs

进程名称为: HttpFSServerWebServer

 

HttpFS的默认服务

Name

Description

/conf

Display configuration properties

/jmx

Java JMX management interface

/logLevel

Get or set log level per class

/logs

Display log files

/stacks

Display JVM stacks

/static/index.html

The static home page

如果要访问/conf, /jmx, /logLevel, /logs, 或 /stacks,需要在httpfs-site.xml中配置如下内容:

  <property>
    <name>hadoop.security.authorization</name>
    <value>true</value>
    <description>Is service-level authorization enabled?</description>
  </property>
  <property>
    <name>hadoop.security.instrumentation.requires.admin</name>
    <value>true</value>
    <description>
      Indicates if administrator ACLs are required to access
      instrumentation servlets (JMX, METRICS, CONF, STACKS).
    </description>
  </property>
  <property>
    <name>httpfs.http.administrators</name>
    <value></value>
    <description>ACL for the admins, this configuration is used to control
      who can access the default servlets for HttpFS server. The value
      should be a comma separated list of users and groups. The user list
      comes first and is separated by a space followed by the group list,
      e.g. "user1,user2 group1,group2". Both users and groups are optional,
      so "user1", " group1", "", "user1 group1", "user1,user2 group1,group2"
      are all valid (note the leading space in " group1"). '*' grants access
      to all users and groups, e.g. '*', '* ' and ' *' are all valid.
    </description>
  </property>

 

实例(使用curl命令):

0、 http://httpfs-host:14000/static/index.html

浏览器打开HttpFS的服务首页

1、 $ curl 'http://httpfs-host:14000/webhdfs/v1/user/foo/README.txt?op=OPEN&user.name=foo'

返回HDFS中/user/foo/README.txt文件的内容。

2、 $ curl 'http://httpfs-host:14000/webhdfs/v1/user/foo?op=LISTSTATUS&user.name=foo' 

returns the contents of the HDFS /user/foo directory in JSON format.

返回JSON格式化数据的HDFS中/user/foo目录下的内容。

3、 $ curl 'http://httpfs-host:14000/webhdfs/v1/user/foo?op=GETTRASHROOT&user.name=foo' 

返回“/user/foo/.Trash”路径,如果/是加密区域,则返回“/.Trash/foo”路径。

4、 $ curl -X POST 'http://httpfs-host:14000/webhdfs/v1/user/foo/bar?op=MKDIRS&user.name=foo' 

创建HDFS目录:/user/foo/bar。

注: HttpFS访问时可以指定用户身份,使用参数:user.name (避免HTTP ERROR 401错误)

 

 

 

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐