MapReduce在Map和Reduce過程新增依賴包辦法
阿新 • • 發佈:2018-12-20
MapReduce在map和reduce階段新增依賴包辦法
通常在MapReduce程式設計過程,大部分都是使用Hadoop jar的方式執行MapReduce程式,但是在開發map或reduce階段中會需要引入外部的包,Hadoop叢集環境並沒有這些依賴包。
前言
比如Reduce資料寫入Oracle需要新增Oracle的Driver依賴,還有寫入Orc檔案等需要orc-mapreduce、orc-core等包的依賴,可以在叢集中把這些包拷貝到叢集環境下,但是這樣Yarn的NodeManager全部節點都是新增,這樣是比較費勁的,此文章介紹更好的辦法解決此類問題。
實現原理
在Job提交前,把相關的包新增到JOB的快取中,並把依賴包上傳到HDFS目錄下,這樣就可以有效長久的解決此類問題.
實現步驟
例:MapReduce讀寫ORC檔案,Hadoop叢集環境並沒有MapReduceORC相關的包。
1. 把依賴包拷貝到Linux本節點/opt/bigdata/lib目錄下,如下圖
2. 把相關依賴包上傳到叢集的HDFS目錄下,如/apps/hive/libs目錄下,命令如下
hadoop fs -copyFromLocal /opt/bigdata/lib/* /apps/hive/libs/
3. 在MapReduce的Driver中新增這些依賴到Job快取中
Configuration conf = new Configuration(); Job job = Job.getInstance(conf); ... ... ... String depJarPath = "/app/hive/libs/"; String depJarNames = "orc-mapreduce-1.2.1.jar:orc-core-1.2.1.jar:hive-storage-api-2.1.1-pre-orc.jar:aircompressor-0.3.jar"; for(String depJarName : depJarNames.split(":")){ job.addFileToClassPath(new Path(depJarPath + depJarName)) } ...
這樣在MapReduce執行Map和Reduce階段都會載入這幾個依賴包。