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

Posted

技术标签:

【中文标题】将可执行 jar 发送到 hadoop 集群并作为“hadoop jar”运行【英文标题】:Send executable jar to hadoop cluster and run as "hadoop jar" 【发布时间】:2013-08-23 04:21:58 【问题描述】:

我一般用main方法制作一个可执行的jar包,通过命令行“hadoop jar Some.jar ClassWithMain input output”运行

在这个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 集群,并像“hadoop jar”命令一样执行此 jar,以使 main 方法指定映射器和减速器。

那么我该如何处理这个问题呢?

【问题讨论】:

【参考方案1】:

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

【讨论】:

这是有用的信息。

以上是关于将可执行 jar 发送到 hadoop 集群并作为“hadoop jar”运行的主要内容,如果未能解决你的问题,请参考以下文章

编写hadoop程序并打成jar包上传到hadoop集群运行

本地idea开发mapreduce程序提交到远程hadoop集群执行

程序打包到Hadoop集群运行

程序打包到Hadoop集群运行

程序打包到Hadoop集群运行

hadoop集群提交代码