使用hadoop eclipse plugin提交Job並添加多個第三方jar

來源:互聯網
上載者:User

標籤:style   blog   http   color   java   使用   os   io   

來自: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包就可以了。

 

調用:

addTmpJar("D:/Java/new_java_workspace/scm/lib/guava-r08.jar", conf);

方法定義:

    /**
     * 為Mapreduce添加第三方jar包
     *
     * @param jarPath
     *            舉例:D:/Java/new_java_workspace/scm/lib/guava-r08.jar
     * @param conf
     * @throws IOException
     */
    public static void addTmpJar(String jarPath, Configuration conf) throws IOException {
        System.setProperty("path.separator", ":");
        FileSystem fs = FileSystem.getLocal(conf);
        String newJarPath = new Path(jarPath).makeQualified(fs).toString();
        String tmpjars = conf.get("tmpjars");
        if (tmpjars == null || tmpjars.length() == 0) {
            conf.set("tmpjars", newJarPath);
        } else {
            conf.set("tmpjars", tmpjars + "," + newJarPath);
        }
    }

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.