編寫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...