Hadoop通用选项解析器

4

我正在运行经典的Hadoop单词计数程序,但在以下情况下无法真正理解GenericOptionsParser的工作原理。

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

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

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

从上面的命令中,GenericOptionsParserinput作为otherArgs [0]并将output作为otherArgs [1]。为什么它不会将WordCount作为参数?它是如何工作的??
我查看了hadoop utils中的GenericOptionsParser源代码,但无法理解太多。任何指导都将非常有帮助...
4个回答

2

命令的用法已经解释过了。

GenericOptionsParser 的功能是将通用选项与用户命令行参数(如输入、输出、其他选项)分开。Hadoop 提供以下通用选项。

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

这个类不仅将通用选项从用户命令行参数中分离出来,还将所有这些通用选项添加到 MR 程序的驱动方法中创建的 Hadoop 配置对象中。

我们可以使用 Tool 和 ToolRunner 代替 GenericOptionsParser。


2
如果您使用的是这里的jar包(wordcount.jar)是hadoop-examples*.jar,则它是一个可运行的jar包,具有主类org.apache.hadoop.examples.ExampleDriver 如果我们指定的示例名称(wordcount、teragen、terasort)是一个有效选项(如teragen、terasort、wordcount等),则第一个参数将被过滤掉。
请参见以下方法
org.apache.hadoop.util.ProgramDriver#driver(String[] args) 

在进行初始过滤之后,将调用剩余参数(input output)与org.apache.hadoop.examples.WordCount相对应的示例类。 org.apache.hadoop.examples.WordCount不会被直接调用。

GenericOptionsParser的使用允许在命令行本身中指定通用选项。

例如:通过通用选项,您可以指定以下内容:

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

1
你正在通过Hadoop Jar命令执行jar文件。如果你看一下语法: hadoop jar [mainClass] args
所以对于你的命令 jar_name = hadoop jar [mainClass] args MainClass = WordCount(这是包含主函数的类的名称。请注意,这不是参数。这不是传递给程序的实际参数,而是一个提示,说明哪个类包含你的主函数。 input = 你的参数 output也是你的参数。

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... = input output
< p > mainclass 是包含您想要运行的jar文件中的 static void run main(Strings [] arg)方法的类。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接