将可执行jar发送到hadoop集群并作为“hadoop jar”运行

时间:2013-08-23 04:21:59

标签: hadoop cloud bigdata

我通常使用main方法创建一个可执行jar包,并通过命令行“hadoop jar Some.jar ClassWithMain输入输出”运行

在这个main方法中,可以配置Job和Configuration,并且Configuration类有一个setter来指定mapper或reducer类,如conf.setMapperClass(Mapper.class)。

但是,在远程提交作业的情况下,我应该设置jar和Mapper或更多类来使用hadoop客户端api。

job.setJarByClass(HasMainMethod.class);
job.setMapperClass(Mapper_Class.class);
job.setReducerClass(Reducer_Class.class);

我想以编程方式将客户端中的jar传输到远程hadoop集群并执行此jar,如“hadoop jar”命令,使main方法指定mapper和reducer。

那我怎么处理这个问题呢?

1 个答案:

答案 0 :(得分:2)

hadoop只是一个shell脚本。最终,hadoop jar将调用org.apache.hadoop.util.RunJarhadoop jar做的是帮助您设置CLASSPATH。所以你可以直接使用它。

例如,

String input = "...";
String output = "...";
org.apache.hadoop.util.RunJar.main(
    new String[]{"Some.jar", "ClassWithMain", input, output});

但是,您需要在使用前正确设置CLASSPATH。获得正确CLASSPATH的便捷方法是hadoop classpath。输入此命令,您将获得完整的CLASSPATH

然后在运行Java应用程序之前设置CLASSPATH。例如,

export CLASSPATH=$(hadoop classpath):$CLASSPATH
java -jar YourJar.jar