2012-10-17 6 views
7

この質問は、ワーカーがそれらを使用するためにクラスタ全体にジャーを配布することを意味しません。Hadoop HADOOP_CLASSPATHの問題

これは、クライアントマシン上にいくつかの追加ライブラリを指定することを指します。具体的に:私はSequenceFileの内容を取得するために、次のコマンドを実行しようとしている:

/path/to/hadoop/script fs -text /path/in/HDFS/to/my/file 

それは、このエラーが私をスロー:text: java.io.IOException: WritableName can't load class: util.io.DoubleArrayWritable

私はDoubleArrayWritableと呼ばれる書き込み可能なクラスを持っています。実際、別のコンピュータではすべてうまく動作します。

HADOOP_CLASSPATHに、そのクラスを含むjarを含めるように設定しようとしましたが、結果はありません。実際には、実行時:

/path/to/hadoop/script classpath 

結果には、HADOOP_CLASSPATHに追加したjarが含まれていません。

質問です:Hadoopの実行時にどのように(Hadoopのスクリプトはクラスパスに自動的に含まれるもの以外の余分な意味を他のライブラリで)

を余分なライブラリを指定しない助けるかもしれないいくつかの詳細情報:

私はhadoop-env.shで
  • Hadoopのインストールディレクトリの下に、私は/ libディレクトリに自分のライブラリをコピーすることはできませんhadoop.shスクリプト(やそれに関連するスクリプト)
  • を変更することはできません
    • ルn hadoop.shからこの行があります:export HADOOP_CLASSPATH=$HADOOP_HOME/libおそらく私のHADOOP_CLASSPATHのenv varが無視される理由が説明されています。
  • 答えて

    13

    あなたは

    export HADOOP_CLASSPATH=/path/to/jar/myjar.jar:$HADOOP_CLASSPATH; \ 
        hadoop fs -text /path/in/HDFS/to/my/file 
    

    が仕事をする、その後HADOOP_CLASSPATHを設定することが許可されている場合。お使いの場合には、この変数はhadoop-env.sh上書きあるのでので、代わりに-libjarsオプションを使用することを検討してください:

    hadoop fs -libjars /path/to/jar/myjar.jar -text /path/in/HDFS/to/my/file 
    

    また、手動でFsShellを呼び出す:

    java -cp $HADOOP_HOME/lib/*:/path/to/jar/myjar.jar:$CLASSPATH \ 
    org.apache.hadoop.fs.FsShell -conf $HADOOP_HOME/conf/core-site.xml \ 
    -text /path/in/HDFS/to/my/file 
    
    +0

    はいますがHadoopのスクリプトは、この行います。export HADOOP_CLASSPATH = $ HADOOP_HOME/libが。それは私のHADOOP_CLASSPATHを書き換えます – Razvan

    +0

    @Razvan私が言ったように私の更新された答え –

    +0

    を見て、私は "分散"クラスパスを設定したくありません。クライアントマシン上でクラスパスを設定したいだけです。 – Razvan

    0

    は、デフォルトのCLASSPATH変数にあなたのjarファイルを追加しようHADOOP_CLASSPATHを追加します。 その後、コマンドを実行します。

    export CLASSPATH=/your/jar/file/myjar.jar:$CLASSPATH:$HADOOP_CLASSPATH /path/to/hadoop/script fs -text /path/in/HDFS/to/my/file

    +3

    デフォルトのクラスパスvarは、hadoopによって無視されます。 – Razvan

    関連する問題