Hadoop GenericOptionsParser

时间:2014-03-24 06:53:28

标签: java hadoop mapreduce

我正在运行经典的hadoop字数统计程序,并且无法确定 GenericOptionsParser 在以下场景中的工作原理。

String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();

运行字数统计程序的命令:

hadoop jar /home/hduser/WordCount/wordcount.jar WordCount input output

从上面的命令, GenericOptionsParser 选择 otherArgs [0] 输出作为值其它参数[1] 。为什么它不接受 WordCount 作为参数?它是如何工作的?

我已经看过hadoop utils的 GenericOptionsParser 源代码,但对它没有多大意义。任何指导都会非常有用......

4 个答案:

答案 0 :(得分:2)

如果您在这里使用的jar(wordcount.jar)是hadoop-examples * .jar,那么它是一个具有主类org.apache.hadoop.examples.ExampleDriver的可运行jar

如果我们指定的示例名称(wordcount,teragen,terasort)是有效选项(teragen,terasort,wordcount等),则会过滤掉第一个参数。

请参阅以下方法

org.apache.hadoop.util.ProgramDriver#driver(String[] args) 

在初始过滤示例后,将使用剩余参数(输入输出)调用类org.apache.hadoop.examples.WordCount。 org.apache.hadoop.examples.WordCount没有被直接调用。

使用GenericOptionsParser可以在命令行中指定Generic选项

例如:使用Genericoption,您可以指定以下内容

hadoop jar /home/hduser/WordCount/wordcount.jar WordCount -Dmapred.reduce.tasks=20 input output

答案 1 :(得分:1)

您正在通过Hadoop Jar命令执行jar文件。如果你看一下语法: hadoop jar [mainClass] args

所以对你的命令 jar_name = hadoop jar [mainClass] args MainClass = WordCount {这是包含主函数的类的名称。请注意这不是争论。这不是程序的实际参数,而是提示哪个类包含主函数。 输入=是你的争论 输出也是你的争论。

答案 2 :(得分:1)

Command usage is already explained.

The functionality of GenericOptionsParser is to segregate the generic options from user command line args like input, output, other options. Hadoop offers the following generic options.

-D key=value
-fs
-jt
-libjars
-files etc....

This class is not only segregates generic options from user command line arguments but also add all these generic options to Hadoop configuration object which is created in the driver method of MR program.

We can use Tool and ToolRunner instead of GenericOptionsParser.

答案 3 :(得分:0)

查看命令hadoop jar

的帮助
RunJar jarFile [mainclass] args...

所以完整的命令看起来像:

hadoop jar jarFile [mainclass] args...

运行时

hadoop jar /home/hduser/WordCount/wordcount.jar WordCount input output

这意味着:

  • jarFile = /home/hduser/WordCount/wordcount.jar
  • [mainclass] = WordCount
  • args ... =输入输出

mainclass是包含您想要运行的jar内的static void run main(Strings[] arg)方法的类