1

map-reduce ジョブの次のメイン クラスを検討してください。

public class App extends Configured implements Tool {

    public static void main(String[] args) throws Exception {
        ToolRunner.run(new App(), args);
    }

    @Override
    public int run(String[] args) throws Exception {
        System.out.println(Charset.defaultCharset().toString());
        return 0;
    }

}

対話型シェルで使用する場合は「UTF-8」を出力します。crontabで使う場合は「US-ASCII」です。

ただし、「java -Dfile.encoding=UTF-8 -jar xxx.jar」を使用すると、crontab で正常に動作します。ただし、「hadoop jar」コマンドはこのパラメーターを取りません。

hadoop jar xxx.jar -Dfile.encoding=UTF-8

crontab では、引き続き US-ASCII を出力します。

1 つの解決策は、LC_ALL env をエクスポートすることです。

0 * * * * (export LC_ALL=en_US.UTF-8; hadoop jar xxx.jar)

別の方法はありますか?

アップデート

私が便利だと思う別の環境は HADOOP_OPTS です:

0 * * * * (export HADOOP_OPTS="-Dfile.encoding=UTF-8"; hadoop jar xxx.jar)
4

2 に答える 2

0

このような引数を含むように環境変数を設定してみてくださいHADOOP_OPTS。それらは実際には への引数javaです。bin/hadoopスクリプトを参照してください。javaこれらをコマンドに追加します。

于 2013-11-04T10:29:11.777 に答える
0

マッパー Java プロセスに-Dfile.encoding=UTF-8がないことが問題であることがわかりました。これを「mapreduce.map.java.opts」に追加する必要がありました。「mapreduce.reduce.java.opts」も同様です。

XML 構成ファイルだけでなく、次のような Java でも実行できます。

config.set("mapreduce.map.java.opts","-Xmx1843M -Dfile.encoding=UTF-8");

構成の詳細については、 http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/ClusterSetup.htmlを参照してください。

于 2015-05-08T16:57:39.280 に答える