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

dgjrabp2  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(349)

我通常用main方法制作一个可执行的jar包,并通过命令行“hadoop jar some.jar classwithmain input output”运行
在这个main方法中,可以配置作业和配置,并且配置类有一个setter来指定Map器或reducer类,比如conf.setmapperclass(mapper.class)。
但是,在远程提交作业的情况下,我应该设置jar和mapper或更多类来使用hadoop客户机api。

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

我想以编程方式将jar-in-client传输到远程hadoop集群,并像“hadoopjar”一样执行这个jar命令,使main方法指定mapper和reducer。
那么我该如何处理这个问题呢?

voj3qocg

voj3qocg1#

hadoop 只是一个shell脚本。最终, hadoop jar 将调用 org.apache.hadoop.util.RunJar . 什么 hadoop jar 你要做的就是帮你设置 CLASSPATH . 所以你可以直接使用它。
例如,

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

但是,您需要设置 CLASSPATH 正确使用前。获得正确答案的便捷方法 CLASSPATHhadoop classpath . 键入此命令,您将获得完整的 CLASSPATH .
然后设置 CLASSPATH 在运行java应用程序之前。例如,

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

相关问题