MapReduce程式呼叫第三方Jar包的方式

2021-06-21 16:16:00 字數 1190 閱讀 7983

編寫mapreduce程式時經常會用到第三方的jar包,主要有一下三種方式:

1、將第三方jar包copy至$hadoop_home/lib目錄裡;

2、將第三方jar包和你的mapreduce程式打成乙個jar包;

3、使用 libjars 這個引數。

第一種方式貌似需要重啟hadoop集群,才能生效,豈不是每次新增jar包就得重啟集群,不靠譜。之前一直使用第二種方式,使用eclipse將第三方jar包和自己的**封裝到乙個jar包裡,但是隨著第三方的jar檔案越來越多,jar包也越來越大,現在已經60mb了,上傳集群太麻煩了,放棄。最終,使用的是第三種方式,感覺非常方便,使用方式記錄如下:

1、在集群某個節點上傳所需第三方jar包(我上傳到了namenode上,因為執行mapreduce我是在namenode上),新建了乙個目錄/root/libjars來儲存這些jar包。

2、修改mapreduce中獲取配置的方式,使用getconf這個函式,和toolrunner.run的方式來執行job,**如下:

public int run(string args) throws exception 

public static void main(string args) throws exception

說明:如果不用這種方式會報找不到你引用的第三方jar包中類的錯誤,這個和mapreducejob的提交方式有關。

3、編寫指令碼遍歷/root/libjars這個目錄將jar包賦給 hadoop_classpath 和 libjars,指令碼如下:

for i in `ls /root/libjars/*.jar`

do libjars=$i,$libjars

hadoopclasspath=$i:$hadoopclasspath

done

export libjars=$libjars

export hadoop_classpath=$hadoop_classpath:$hadoopclasspath

執行mapreduce的命令如下:

hadoop jar *.jar packagename.classname -libjars $libjars args

注:libjars這個引數一定要放到類名的後面,引數的前面。

這樣就可以方便使用第三方jar包了。

mapreduce程式呼叫各個類的功能

1 map類 protected void map object key,value value,context context throws ioexception,interruptedexception 2 reducer類 reducer類繼承了類庫中的reducer,原型為reducer,...

第三章 MapReduce計算模型

3.1 為什麼用mapreduce 分布式 海量資料 3.2 mapreduce計算模型 jobtracker,使用者管理和排程工作 tasktracker,用於執行工作 job,每個個mapreduce任務被初始化為乙個job,每個job又分為兩個階段,分別用map函式和reduce函式表示這兩個...

第三方程式呼叫django的models

一下來自pythoncn的maillist 今天折騰了一上午,終於可以在外部的wx裡面呼叫django的models了。但是,突然發現我好好的中文介面一下變成英文了。後來檢查了一下發現原來是 os.environ django settings module website.settings add...