一、介绍
在通常情况下,我们使用HDFS的command命令去查看hdfs上的文件,或者使用默认的hadoop的web管理器查看,从hadoop0.2.23后,hadoop设计了一套Rest风格的接口,通过http协议访问的方式,去浏览和操作HDFS上的数据。下面将一下hadoop的rest接口。
二、解析
(1)原生rest
HDFS的原生rest接口需要进行开启才能够使用,具体是在hdfs-site.xml文件中进行参数的设置。
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<property>
设置完改参数后,重启整个hadoop集群就可以访问hadoop的rest接口。在hadoop2.x系列中,通过访问50070端口可以获取hdfs上的数据,下面该图是通过50070端口访问原生的rest接口。
(2)httpfs
hadoop集群中,除了访问原生的rest接口外(50070)端口,hadoop还提供了一中httpfs的方式访问rest接口。打开httpfs的rest接口需要在开启rest接口的基础上在配置core-site.xml文件。
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
hadoop.proxyuser.root.hosts:该参数表示可以通过httpfs接口hdfs的ip地址限制
hadoop.proxyuser.root.groups:通过httpfs接口访问的用户获得的群组身份
在两个参数中,第三位(root)的参数表示启动hadoop集群的用户。
在配置完成后我们不需要重启整个hadoop集群,然后直接执行httpfs.sh start命令,就可以启动httpfs接口。该进程会监听14000端口。
httpfs实现一种匿名的方式登陆hdfs文件系统。在hfds command中,用户的登陆需要在linux操作系统中拥有相应的用户账号。httpfs则避免了这种方式,通过一种身份包装的方式来操作系统。在httpfs中的操作用户不需要真正的在linux创建尸体用户,而是以通过第三位的用户名(root)来包装自己的登陆名。通过这样的方式hdfs会认为登陆着是root,这样便不会被hdfs的安全机制所拦截,在hdfs上后,用户在以正常的身份去相应的命令。这样便绕过了不适用linux账号的方式去实现hadoop2.x集群上的多用户问题。
该图为通过14000端口访问hdfs文件系统
我们会发现两种方式访问hdfs返回的json数据会稍微有一些不同。
三、使用
hadoop rest接口的使用,使用http协议进行需求的申请和结果的返回,具体的使用方式参照官方上的rest接口的使用方式:
http://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-hdfs/WebHDFS.html
四、总结
建议使用httpfs接口的方式进行rest接口的访问,httpfs接口向我们提供了方便的工具,并且不会影响50070端口的其他功能。