1

我正在尝试编译 libhdfs(一个允许外部应用程序与 hdfs 交互的本机共享库)。这是我使用 Fuse 安装 Hadoop 的 hdfs 所必须采取的几个步骤之一。

编译似乎有一段时间进展顺利,但以“BUILD FAILED”和以下问题总结结束 -

commons-logging#commons-logging;1.0.4:在 commons-logging#commons-logging 中找不到配置;1.0.4:'master'。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 需要它

现在,我有几个关于这个的问题,因为我用来做这件事的书没有详细说明这些事情到底是什么。

  1. Hadoop 使用 commons-logging 和 log4j 库吗?
  2. 这些库似乎位于 $HADOOP_HOME/lib 中。它们虽然是 jar 文件。我应该提取它们,尝试更改一些配置,然后将它们重新打包回罐子中吗?
  3. 上述错误中的“大师”是什么意思?有不同版本的库吗?

提前感谢您提供的任何见解。

4

1 回答 1

4

如果您使用的是 cloudera hadoop(cdh3u2),则不需要构建 fuse 项目。

您可以在 $HADOOP_HOME/c++/lib 目录中找到二进制文件(libhdfs.so*)

在 fuse mount 之前更新“$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.so,
“/usr/lib/jvm/java-6-sun-1.6.0.26/jre/lib/amd64/server/”包含 libjvm。所以 \# 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,而不是在集群模式下

于 2012-10-15T04:53:10.090 回答