热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用hadoopeclipseplugin提交Job并添加多个第三方jar(完美版)

原文地址:http:heipark.iteye.comblog1171923通过conf.set(tmpjars,jars);可以设置第三方jar,之前一直只


原文地址:http://heipark.iteye.com/blog/1171923


通过 "conf.set("tmpjars", jars);" 可以设置第三方jar,之前一直只是添加一个jar,运行OK,今天打算添加多个jar的时候发现mapreduce在运行时找不到class(ClassNotFoundException),跟踪代码发现jar文件的确上传到了HDFS中,所以甚是无解,后来上传jar到hdfs,然后使用DistributedCache.addFileToClassPath()方法也不行。郁闷半天,后来看到job.xml中有一段奇怪的设置,mapred.job.classpath.files的value为"/user/heipark/lib/commons-lang-2.3.jar;/user/heipark/lib/guava-r08.jar",可以看到这个分隔符是分号(我的OS是windows),在linux系统和hadoop系统一般都是逗号和冒号分隔,然后我继续挖,发现DistributedCache.addArchiveToClassPath()方法(tmpjars也会用这个方法)中使用了“System.getProperty("path.separator")”,于是灵感闪现,修改该值为linux系统的冒号,我嚓,居然成功了,搞了我4个小时,eclipse终于可以添加多个第三方jar包了。封装了方法,在main方法直接添加jar包就可以了。


调用:

 

Java代码  收藏代码
  1. addTmpJar("D:/Java/new_java_workspace/scm/lib/guava-r08.jar", conf);  
 

 

方法定义:

 

Java代码  收藏代码
  1. /** 
  2.  * 为Mapreduce添加第三方jar包 
  3.  *  
  4.  * @param jarPath 
  5.  *            举例:D:/Java/new_java_workspace/scm/lib/guava-r08.jar 
  6.  * @param conf 
  7.  * @throws IOException 
  8.  */  
  9. public static void addTmpJar(String jarPath, Configuration conf) throws IOException {  
  10.     System.setProperty("path.separator"":");  
  11.     FileSystem fs = FileSystem.getLocal(conf);  
  12.     String newJarPath = new Path(jarPath).makeQualified(fs).toString();  
  13.     String tmpjars = conf.get("tmpjars");  
  14.     if (tmpjars == null || tmpjars.length() == 0) {  
  15.         conf.set("tmpjars", newJarPath);  
  16.     } else {  
  17.         conf.set("tmpjars", tmpjars + "," + newJarPath);  
  18.     }  
  19. }  



推荐阅读
author-avatar
jajsjsbbsdjauuw
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有