将可执行 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.RunJar
。 hadoop 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集群运行