我正在尝试编译libhdfs(一个允许外部应用程序与hdfs接口的本地共享库)。这是我使用Fuse挂载Hadoop hdfs的几个步骤之一。
编译似乎进行得很顺利,但以"BUILD FAILED"和以下问题总结结束-
commons-logging#commons-logging;1.0.4:在commons-logging#commons-logging中没有找到配置。需要从org.apache.hadoop#Hadoop;working@btsotbal800 commons-logging
log4j#log4j;1.2.15:配置中没有找到log4j#log4j;1.2.15: 'master'。需要从org.apache.hadoop#Hadoop;working@btsotbal800 log4j
现在,我对此有几个问题,因为我用来做这些的书并没有详细说明这些东西到底是什么。
- 是通用日志和log4j库Hadoop使用? 这些库似乎存在于$HADOOP_HOME/lib中。不过它们是jar文件。我是否应该提取它们,尝试更改一些配置,然后将它们重新打包回jar中?
- 上面错误中的"master"是什么意思?这些库有不同的版本吗?
提前感谢您提供的任何见解。
如果您使用的是cloudera hadoop(cdh3u2),则不需要构建fuse项目。
你可以在$HADOOP_HOME/c++/lib目录下找到二进制文件(libhdfs.so*)
在fuse挂载之前更新"$HADOOP_HOME/contrib/fuse-dfs/src/fuse_dfs_wrapper.sh",如下所示
HADOOP_HOME/contrib/fuse-dfs/src/fuse_dfs_wrapper.sh
#!/bin/bash
for f in ${HADOOP_HOME}/hadoop*.jar ; do
export CLASSPATH=$CLASSPATH:$f
done
for f in ${HADOOP_HOME}/lib/*.jar ; do
export CLASSPATH=$CLASSPATH:$f
done
export PATH=$HADOOP_HOME/contrib/fuse-dfs:$PATH
export LD_LIBRARY_PATH=$HADOOP_HOME/c++/lib:/usr/lib/jvm/java-6-sun-1.6.0.26/jre/lib/amd64/server/
fuse_dfs $@
LD_LIBRARY_PATH包含这里的目录列表
"$HADOOP_HOME/c++/lib"包含libhdfs。所以和
"/usr/lib/jvm/java-6-sun-1.6.0.26/jre/lib/amd64/server/"包含libjvm.so# modify /usr/lib/jvm/java-6-sun-1.6.0.26/jre/lib/amd64/server/
作为java_home
使用以下命令挂载hdfs
fuse_dfs_wrapper.sh dfs://localhost:9000/ /home/510600/mount1
要卸载,请使用以下命令
fusermount -u /home/510600/mount1
我只在hadoop伪模式下测试了fuse,而不是在集群模式下