解决Hadoop jar *.jar 主类名 -libjars *.jar *.jar arg1 arg2 ... 中-libjars的方法
来源:互联网 发布:linux启动mysql244 编辑:程序博客网 时间:2024/05/16 19:23
problem:
(1)hadoop 依赖多个jar包,在-libjars后面一个个写太麻烦。
(2)程序无法解析出-libjars.
解决方案
(1)如果程序依赖多个第三方jar包,可以用python 或 shell 写一个脚本文件便利一个文件夹下的jar 包,以下是用python写的例子。
import os
root = "/home/fei/Downloads/code/fullsync/bin/"
for i in os.listdir(root):
if os.path.isfile(os.path.join(root,i)):
print os.path.join(root,i)
(2)让主函数识别 -libjars 的两种方法
public class WordCount { // 略... public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs(); // 略... Job job = new Job(conf, "word count"); // 略... System.exit(job.waitForCompletion(true) ? 0 : 1); }}
WordCount.java中使用到了GenericOptionsParser这个类,它的作用是将命令行中参数自动设置到变量conf中。举个例子,比如我希望通过命令行设置reduce task数量,就这么写:
bin/hadoop jar MyJob.jar com.xxx.MyJobDriver -Dmapred.reduce.tasks=5
上面这样就可以了,不需要将其硬编码到java代码中,很轻松就可以将参数与代码分离开。
其它常用的参数还有”-libjars”和-“files”,使用方法一起送上:
bin/hadoop jar MyJob.jar com.xxx.MyJobDriver -Dmapred.reduce.tasks=5 \
-files ./dict.conf \
-libjars lib/commons-beanutils-1.8.3.jar,lib/commons-digester-2.1.jar
参数”-libjars”的作用是上传本地jar包到HDFS中MapReduce临时目录并将其设置到map和reduce task的classpath中;参数”-files”的作用是上传指定文件到HDFS中mapreduce临时目录,并允许map和reduce task读取到它。这两个配置参数其实都是通过DistributeCache来实现的。
至此,我们还没有说到ToolRunner,上面的代码我们使用了GenericOptionsParser帮我们解析命令行参数,编写ToolRunner的程序员更懒,它将 GenericOptionsParser调用隐藏到自身run方法,被自动执行了,修改后的代码变成了这样:
public class WordCount extends Configured implements Tool { @Override public int run(String[] arg0) throws Exception { Job job = new Job(getConf(), "word count"); // 略... System.exit(job.waitForCompletion(true) ? 0 : 1); return 0; } public static void main(String[] args) throws Exception { int res = ToolRunner.run(new Configuration(), new WordCount(), args); System.exit(res); }}
看看代码上有什么不同:
让WordCount继承Configured并实现Tool接口。
重写Tool接口的run方法,run方法不是static类型,这很好。
在WordCount中我们将通过getConf()获取Configuration对象。
0 0
- 解决Hadoop jar *.jar 主类名 -libjars *.jar *.jar arg1 arg2 ... 中-libjars的方法
- jar
- JAR
- jar
- jar
- .jar
- jar
- jar
- jar
- jar
- jar
- jar
- hadoop jar
- (转)hadoop jar xxxx.jar的流程
- hadoop jar xxxx.jar 执行的流程
- hadoop jar xxxx.jar的流程
- hadoop的jar命令运行任务方法
- 运行*.jar的方法
- springMVC传值方式
- iOS开发笔记25--Associative机制使用场景
- swift 可变参数
- 学习html(3)
- Android DES/3DES/AES加密方式
- 解决Hadoop jar *.jar 主类名 -libjars *.jar *.jar arg1 arg2 ... 中-libjars的方法
- 排序算法——插入排序
- android:ellipsize的使用
- 社説 20150702 新幹線放火殺人 利便性損ねずに再発防ぎたい
- 关于坚持与惰性
- 如何关掉xshell 讨厌的警告声音
- 社説 20150702 日銀短観改善 好循環の歯車は回り出したか
- 恭喜您成为2015年度Microsoft MVP!
- jquery返回顶部