尝试使用Fuse挂载HDFS。无法编译libhdfs

时间:2011-07-14 20:59:47

标签: ant hadoop mount fuse hdfs

我正在尝试编译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;工作@ btsotbal800 commons-logging

log4j#log4j; 1.2.15:在log4j#log4j中找不到配置; 1.2.15:'master'。它来自org.apache.hadoop#Hadoop;工作@ btsotbal800 log4j

现在,我对此有几个问题,因为我用来做这本书的书并没有详细说明这些事情是什么。

  1. Hadoop使用的是commons-logging和log4j库吗?
  2. 这些库似乎存在于$ HADOOP_HOME / lib中。它们虽然是jar文件。我应该提取它们,尝试更改一些配置,然后将它们重新打包回罐子里吗?
  3. 上述错误中的“主人”是什么意思?是否有不同版本的库?
  4. 提前感谢您提供的任何见解。

1 个答案:

答案 0 :(得分:4)

如果您使用的是cloudera hadoop(cdh3u2),则无需构建保险丝项目。

你可以在目录$ HADOOP_HOME / c ++ / lib

中找到二进制文件(libhdfs.so *)

在保险丝安装之前更新“$ HADOOP_HOME / contrib / fuse-dfs / src / fuse_dfs_wrapper.sh”如下

HADOOP_HOME /了contrib /熔断器的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.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伪模式下测试了保险丝,而不是在群集模式下