hadoop-3.1.2启动httpfs
最近有一个需求,要求使用httpfs读取数据,一开始看到httpfs这个词,第一感觉是不是多了个f,是不是https,后来百度一下,其实不然。
httpfs其实是使用http协议访问hdfs文件系统:
HttpFS是一台提供REST HTTP网关的服务器,该网关支持所有HDFS文件系统操作(读取和写入)。并且可以与webhdfs REST HTTP API 互操作。
HttpFS可用于在运行不同版本Hadoop的群集之间传输数据(克服RPC版本问题),例如使用Hadoop DistCP。
HttpFS可用于访问防火墙后面的群集上的HDFS中的数据(HttpFS服务器充当网关,并且是唯一允许将防火墙穿过群集进入群集的系统)。
HttpFS可用于使用HTTP实用程序(例如curl和wget)和来自Java以外的其他语言的HTTP库Perl来访问HDFS中的数据。
所述webhdfs客户文件系统实现可以用于使用Hadoop的文件系统命令(访问HttpFS hadoop的FS)行工具使用Hadoop的文件系统的Java API的Java应用程序,以及。
HttpFS具有内置的安全性,支持Hadoop伪身份验证和HTTP SPNEGO Kerberos以及其他可插入身份验证机制。它还提供了Hadoop代理用户支持。
详情可参考:https://hadoop.apache.org/docs/stable/hadoop-hdfs-httpfs/index.html
服务器启动:
在hadoop3.1.2版本中已经将httpfs集成好了,我们只需要配置httpfs相关配置,启动后就能使用httpfs访问hdfs文件服务器
具体步骤:
配置HttpFS
默认情况下,HttpFS假定Hadoop配置文件(core-site.xml和hdfs-site.xml)位于HttpFS配置目录中。
如果不是这种情况,则将httpfs.hadoop.config.dir属性添加到httpfs-site.xml文件,该属性设置为Hadoop配置目录的位置。
1.在core-site.xml中添加如下配置
<property> <name>hadoop.proxyuser.root.hosts</name> <value>s128</value> </property> <property> <name>hadoop.proxyuser.root.groups</name> <value>*</value> </property>
,其中红色标注的地方为代理用户身份运行HttpFS服务器的Unix用户,
hadoop.proxyuser.root.hosts我这里指定了具体的一台NameNode机器,如果指定其他hosts,可能会出现异常:
{"RemoteException":{"message":"Unauthorized connection for super-user: root from IP 192.168.3.128","exception":"RemoteException","javaClassName":"org.apache.hadoop.ipc.RemoteException"}}
重新启动Hadoop
您需要重新启动Hadoop才能使proxyuser配置生效。
启动/停止HttpFS
要启动/停止HttpFS,请使用hdfs --daemon start | stop httpfs。例如:
hdfs --daemon start httpfs
测试HttpFS是否正常
http://s128:14000/webhdfs/v1?op=gethomedirectory&user.name=root
返回结果:
{"Path":"\/user\/root"}
表示HttpFS服务启动正常了
HTTPFS使用
http://${host}:14000/webhdfs/v1/${path}?op=${operator}&user.name=${user}
其中${host}为hadoop中启动的httpfs服务的host
${path}为要操作的路径,可以是目录也可以是文件
${operator}为操作类型,常见的如下:
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)
HTTP DELETE
DELETE (see FileSystem.delete)
${user}为httpfs启动用户名
列举某个文件夹下的文件:列举/wbd_test下的文件
http://s128:14000/webhdfs/v1/wbd_test?op=LISTSTATUS&user.name=root
返回结果:
{
"FileStatuses":{
"FileStatus":[
{
"pathSuffix":"snapshot_lzo_e302a790db684d05b084db87c6379008.txt",
"type":"FILE",
"length":2546994,
"owner":"root",
"group":"supergroup",
"permission":"644",
"accessTime":1571972356950,
"modificationTime":1571972365701,
"blockSize":134217728,
"replication":2
}
]
}
}