昨天安装hdfs httpfs,遇到了几个问题,总是访问不成功,但在网上也查不到答案,今天总结一下:
一、httpfs是什么?
参考:http://debugo.com/hdfs-httpfs/
官网:http://hadoop.apache.org/docs/r2.5.2/hadoop-hdfs-httpfs/ServerSetup.html
http://hadoop.apache.org/docs/r2.5.2/hadoop-hdfs-httpfs/index.html
1、httpfs是通过http协议来访问hdfs,自带tomcat容器,在hadoop的 share/hadoop/httpfs/tomcat目录下。
HttpFS是提供REST HTTP接口的服务器,可以支持全部HDFS文件系统操作(读和写),它通过webhdfs REST HTTP API来进行交互。这个功能由cloudera提供给Apache主分支。
HttpFS可以用于在不同的Hadoop版本间传输数据(避免了RPC版本问题),例如使用Hadoop DistCP。
HTTP可以用于访问防火墙内的HDFS集群数据(HttpFS可以作为一个网关角色,是唯一可以穿过防火墙访问内部集群数据的系统)。
HttpFS可以通过HTTP工具(比如curl和wget)和各种编程语言的HTTP包(不局限Java)来访问数据。
webhdfs 客户端文件系统实现可以使用HDFS文件系统命令行命令(如hadoop dfs)以及使用HDFS Java API来访问HttpFS。
HttpFS内置安全特性支持Hadoop伪身份验证和HTTP SPNEGO Kerberos 和其他插件式(pluggable )验证机制。它还提供了Hadoop代理用户的支持。
二、httpfs的配置
准备知识:httpfs相关的配置文件:
etc/hadoop/httpfs-env.sh
etc/hadoop/httpfs-log4j.properties
etc/hadoop/httpfs-site.xml
libexec/httpfs-config.sh
sbin/httpfs.sh
core-site.xml hdfs-site.xml httpfs-log4j.properties httpfs-site.xml
hadoop-env.sh httpfs-env.sh httpfs-signature.secret log4j.properties
httpfs-signature.secret 将文件内容删除,置为空。
httpfs-site.xml 不需修改;
hadoop-env.sh 设置hadoop环境变量;
httpfs-config.sh 可设置httpfs进程的pid文件的地址
if [ "${CATALINA_PID}" = "" ]; then
export CATALINA_PID=/tmp/httpfs.pid
print "Setting CATALINA_PID: ${CATALINA_PID}"
else
print "Using CATALINA_PID: ${CATALINA_PID}"
fi
httpfs-env.sh 设置java_home 变量
export HTTPFS_LOG=/home/yoyo//yoyo_hdfs_httpfs/logs 日志路径;
export HTTPFS_TEMP=/home/yoyo/yoyo_hdfs_httpfs/temp tmp文件路径
export HTTPFS_HTTP_PORT=14000 端口号
配置:
1、在集群中的两个 namenode 服务下的core-site.xml文件中添加2个配置项:
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
2、其他文件不需要改动
2、重启namenode
3、启动httpfs sbin/httpfs.sh start
三、验证
http://172.16.5.1:14000/webhdfs/v1?op=LISTSTATUS&user.name=root 启动httpfs,在web浏览器访问查看页面是否有数据.
上传数据:
curl -i -X PUT -T ./httpfs-localhost.2017-10-26.log "http://172.16.160.60:14000/webhdfs/v1/text.txt?op=CREATE&data=true&user.name=root" -H "Content-Type:application/octet-stream"
查看数据:
curl -i -X GET "http://172.16.160.60:14000/webhdfs/v1/text.txt?op=OPEN&user.name=root"
四、报错汇集:
1、405 页面找不到,但是 http://172.16.160.69:14000 能访问,http://172.16.160.69:14000/webhdfs/v1页面访问不到,报404,日志信息:httpfs.log 和 httpfs-catalina.out 信息如下:
554 INFO Server [][:] Services initialized
2017-10-26 13:31:42,555 INFO Server [][:] Server [httpfs] started!, status [NORMAL]
2017-10-26 13:31:42,564 INFO HttpFSServerWebApp [][:] Connects to Namenode [hdfs://mycluster]
2017-10-26 13:31:42,579 INFO Server [][:] Services destroyed
2017-10-26 13:31:42,579 INFO Server [][:] Server [httpfs] shutdown!
十月 26, 2017 1:31:42 下午 org.apache.catalina.core.StandardContext start
严重: Error filterStart
十月 26, 2017 1:31:42 下午 org.apache.catalina.core.StandardContext start
严重: Context [/webhdfs] startup failed due to previous errors
十月 26, 2017 1:31:42 下午 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
严重: The web application [/webhdfs] appears to have started a thread named [FileWatchdog] but has failed to stop it. This is very likely to create a memory leak.
2、这是权限信息的报错:
{"RemoteException":{"message":"User: root is not allowed to impersonate httpfs","exception":"RemoteException","javaClassName":"org.apache.hadoop.ipc.RemoteException"}}
错误原因: 估计和两个namenode集群中的配置文件不一致有关系。没有在core-site.xml配那两个配置项。