考慮在地圖-減少作業的以下主要類:命令'hadoop jar'不需要-Dfile.encoding = UTF-8?
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。
一種解決方案是導出LC_ALL ENV:
0 * * * * (export LC_ALL=en_US.UTF-8; hadoop jar xxx.jar)
有另一種方式?
更新
另一個ENV我找到有用的是HADOOP_OPTS:
0 * * * * (export HADOOP_OPTS="-Dfile.encoding=UTF-8"; hadoop jar xxx.jar)
您剛剛根據我的更新和評論更改了您的答案。在你之前的回答中,你建議「hadoop -D ... jar」,你甚至不會測試它。我認爲這不是一件優雅的事情。 –
我不明白。你是對的,我以前的回答是錯誤的。 (如果你通過'java'調用Hadoop客戶端,它就會起作用,但這不是你要求的。)所以我發佈了一個可以工作的新答案。這裏有什麼問題@Jerry? –
在你回答之前進行測試,這就是我所要求的。 –