命令“hadoop jar”不接受-Dfile.encoding=UTF-8?
考虑map reduce作业的以下主要类:命令“hadoop jar”不接受-Dfile.encoding=UTF-8?,hadoop,Hadoop,考虑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 Exceptio
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;
}
}
在交互式shell中使用时,它输出“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)
还有别的办法吗
更新
我发现另一个有用的环境是HADOOP_选项:
0 * * * * (export HADOOP_OPTS="-Dfile.encoding=UTF-8"; hadoop jar xxx.jar)
尝试将环境变量HADOOP_OPTS设置为包含如下参数。它们实际上是java的参数。参见bin/hadoop脚本;它将把这些添加到java命令中。我们发现问题在于映射器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");
有关配置的详细信息,请参阅。您刚刚根据我的更新和评论更改了答案。在你之前的回答中,你建议使用hadoop-D。。。jar,你甚至不需要测试它。我不认为这是一件优雅的事,我不明白。你是对的,我以前的回答是错的。如果您通过java调用Hadoop客户机,它是可以工作的,但这不是您所要求的。所以我发布了一个新的答案。杰瑞,这里有什么问题?回答之前先测试一下,这就是我要问的。杰瑞,这是一种奇怪的态度。我很抱歉犯了一个错误,但如果你想让人们保证他们的答案,你在这里不会得到太多帮助。解决问题的重担仍然在你们身上,你们是对的。毕竟,我从你之前的回答中学到了一些东西,因为它驱使我阅读“hadoop”命令的源代码来验证。我应该更加开明。