httpfs的使用
在项目中使用到hdfs作为存储,为了在不同的节点加载hdfs上的数据,我们使用nfsv3服务,在客户端使用
root来mount hdfs上的数据到本地,然后把本地的数据发到hdfs上,因为这个我们的集群namenode是HA的,
所以在mount前,需要确认active的namenode,而且比较不爽的事,如果客户端的机器/etc/hosts中需要配置所有的datanodes机器信息。
后来找到的解决方案是使用httfs,它本质上是一个代理,是java jetty web程序,直接运行在可以在hadoop集群上,可以感知namenode HA的配置,
本质上是对webhdfs进行了一次封装,但使用它的时候不用担心本机是否配置好所有的datanode ip 主机名映射。
httpfs的安装:如果使用hdp之类的集成工具,有现成的rpm包,直接安装即可,若是使用cdh的tar包,已经包含了,直接可以使用。
配置:主要配置一下httpfs启动用户的代理,
<property> <name>hadoop.proxyuser.#HTTPFSUSER#.hosts</name> <value>httpfs-host.foo.com</value> </property> <property> <name>hadoop.proxyuser.#HTTPFSUSER#.groups</name> <value>*</value> </property>
替换#HTTPFSUSER# 为启动 HttpFS 服务的用户名即可。
需要重启动hadoop.
启动命令:
hdfs --daemon start httpfs
也可以在hadoop的sbin目录下找到starthttpfs.sh start
常用的命令如:
创建文件夹,删除文件夹,上传本地文件,下载文件到本地示例如下
curl -i -X PUT http://#hostname#:14000/webhdfs/v1/user/abc?op=MKDIRS&user.name=hdfs
curl -i -X GET http://#hostname#:14000/webhdfs/v1/user/abc/test.txt?op=OPEN&user.name=hdfs
curl -i -X PUT -T /tmp/test.txt http://#hostname#:14000/webhdfs/v1/user/hive/tmp/test.txt?op=CREATE&data=true&user.name=hive -H "Content-Type:application/octet-stream"
Looking for a job working at Home about MSBI