1. 程式人生 > >MapReduce在Map和Reduce過程新增依賴包辦法

MapReduce在Map和Reduce過程新增依賴包辦法

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階段都會載入這幾個依賴包。