1

libhdfs (外部アプリが hdfs とやり取りできるようにするネイティブ共有ライブラリ) をコンパイルしようとしています。これは、Fuse を使用して Hadoop の hdfs をマウントするために必要な数少ない手順の 1 つです。

コンパイルはしばらくうまくいくように見えますが、「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ファイルです。それらを抽出し、いくつかの構成を変更してから、jar に再​​パックする必要がありますか?
  3. 上記のエラーの「マスター」とはどういう意味ですか? ライブラリの異なるバージョンはありますか?

あなたが提供できる洞察を前もって感謝します。

4

1 に答える 1

4

cloudera hadoop(cdh3u2) を使用している場合は、fuse プロジェクトをビルドする必要はありません。

ディレクトリ $HADOOP_HOME/c++/lib 内にバイナリ (libhdfs.so*) があります。

ヒューズ マウントの前に、次のように「$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 疑似モードでのみヒューズをテストしました

于 2012-10-15T04:53:10.090 に答える