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)