命令“hadoop jar”不接受-Dfile.encoding=UTF-8?

命令“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

考虑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;
    }

}
在交互式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”命令的源代码来验证。我应该更加开明。