版权声明:转载请标明出处。 https://blog.csdn.net/u010720408/article/details/89679474
hdfs开启resutful API 有两种方式
一 : web HDFS 是hdfs文件系统自带的
二 :httpFS 非自带需要额外下载包安装
web HDFS 与 httpFS 使用区别
有HA时,因namenode 的地址动态分配,不方便随时修改,推荐使用httpFS;
web HDFS 自带,在高并发、大数据文件下比httpFS性能好,因为httpFS是帮忙代理转发数据流都会集中通过httpFS访问的那一台机器进行传输;
(均是通过restful 的http访问请求,底层封装调用namenode 的rpc访问,下面谈到的RemoteException也是与此有关)
webHDFS 开启
①hdfs-site.xml 文件中 开启webHDFS的功能
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
②hdfs-sit.xml文件 中 关闭 验证功能(很恶心的最好关闭,反正我没开启)
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
webHDFS 验证
OPEN、LISTSTATUS都是get方式的http
curl -v –i "http://hostip:port/webhdfs/v1/filepath?user.name=hdfs&op=OPEN"
#hostip是任一datanode的ip
#port是dfs.datanode.http.address=50070 (小心别看错,我环境别人配的是50075,fucking a dog)
# /webhdfs/v1/ 是webHDFS默认插入的气候就是文件路径 ?号后就是提交的参数了
# filepath是你文件路径
#user.name=hdfs就是那个用户的文件,可以不指定,默认就是当前
#op值操作类型,挺多的自己查去
结果出现异常:
{“RemoteException”:{"exception":"IllegalArgumentException","javaClassName":"java.lang.IllegalArgumentException","message":"Invalid operation OPEN"}}
异常解决答案:
需要在参数中指定namenode及其rpc端口,webHDFS也不知为何自己找不到,很蛋疼,金融公司环境太严格,软件入库操蛋、入生产库更加蛋疼,俺想辞职。
正确操作:
curl -v –i "http://hostip:port/webhdfs/v1/filepath?user.name=hdfs&op=OPEN&namenoderpcaddress=host1:port1"
#host1 是namenode中的一台的ip,但是我而不知为什么是dfs.namenode.rpc-address.hdfsha.nn2这一台而不是nn1那台
#port1 是 hdfs-site.xml文件中的 dfs.namenode.rpc-address.[hdfsha].nn1 与dfs.namenode.rpc-address.[hdfsha].nn2
#[hdfsha] 来自 hdfs-site.xml的 dfs.nameservices中的值 我的是8020
注意 1.
OPEN用于文件打开获取,
前面端口用的dfs.datanode.http.address,
末尾要额外指定namenoderpcaddress
注意 2.
LISTSTATUS用于查看指定路径下的各个文件信息,
前面的ip只能用dfs.namenode.http-address.hdfsha.nn2(我的是nn2不明白为啥不是nn1)
前面端口用的却是另一个dfs.namenode.http-address.hdfsha.nn1 nn2中的port,
因为用的是namenode所以后面也就不是再指定namenoderpcaddress
至于其他的命令我没有精力去细细使用,有空再补上
(大数据真蛋疼)
搞定收工记录之