hadoop 依赖式job_Hadoop Job使用第三方依赖jar文件
當我們實現了一個Hadoop MapReduce Job以后,而這個Job可能又依賴很多外部的jar文件,在Hadoop集群上運行時,有時會出現找不到具體Class的異常。出現這種問題,基本上就是在Hadoop Job執行過程中,沒有從執行的上下文中找到對應的jar文件(實際是unjar的目錄,目錄里面是對應的Class文件)。所以,我們自然而然想到,正確配置好對應的classpath,MapReduce Job運行時就能夠找到。
有兩種方式可以更好地實現,一種是設置HADOOP_CLASSPATH,將Job所依賴的jar文件加載到HADOOP_CLASSPATH,這種配置只針對該Job生效,Job結束之后HADOOP_CLASSPATH會被清理;另一種方式是,直接在構建代碼的時候,將依賴jar文件與Job代碼打成一個jar文件,這種方式可能會使得最終的jar文件比較大,但是結合一些代碼構建工具,如Maven,可以在依賴控制方面保持一個Job一個依賴的構建配置,便于管理。下面,我們分別說明這兩種方式。
設置HADOOP_CLASSPATH
比如,我們有一個使用HBase的應用,操作HBase數據庫中表,肯定需要ZooKeeper,所以對應的jar文件的位置都要設置正確,讓運行時Job能夠檢索并加載。
Hadoop實現里面,有個輔助工具類org.apache.hadoop.util.GenericOptionsParser,能夠幫助我們加載對應的文件到classpath中,操作比較容易一些。
下面我們是我們實現的一個例子,程序執行入口的類,代碼如下所示:
可以看到,我們可以通過-libjars選項來指定該Job運行所依賴的第三方jar文件,具體使用方法,說明如下:
第一步:設置環境變量
我們修改.bashrc文件,增加如下配置內容:
不要忘記要使當前的配置生效:
這樣就可以方便地引用外部的jar文件了。
第二步:確定Job依賴的jar文件列表
上面提到,我們要使用HBase,需要HBase和ZooKeeper的相關jar文件,用到的文件如下所示:
設置當前Job執行的HADOOP_CLASSPATH變量,只對當前Job有效,所以沒有必要在.bashrc中進行配置。
第三步:運行開發的Job
運行我們開發的Job,通過命令行輸入HADOOP_CLASSPATH變量,以及使用-libjars選項指定當前這個Job依賴的第三方jar文件,啟動命令行如下所示:
需要注意的是,環境變量中內容使用冒號分隔,而-libjars選項中的內容使用逗號分隔。
這樣,我們就能夠正確運行開發的Job了。
下面看看我們開發的Job運行的結果:
可以看到,除了加載Hadoop對應的HADOOP_HOME變量指定的路徑下,lib*目錄下的jar文件以外,還加載了我們設置的-libjars選項中指定的第三方jar文件,供Job運行時使用。
將Job代碼和依賴jar文件打包
我比較喜歡這種方式,因為這樣做首先利用餓Maven的很多優點,如管理依賴、自動構建。另外,對于其他想要使用該Job的開發人員或部署人員,無需關系更多的配置,只要按照Maven的構建規則去構建,就可以生成最終的部署文件,從而也就減少了在執行Job的時候,出現各種常見的問題(如CLASSPATH設置有問題等)。
使用如下的Maven構建插件配置,執行mvn package命令,就可以完成這些任務:
最后生成的jar文件在target目錄下面,例如名稱類似solr-platform-2.0-jar-with-dependencies.jar,然后可以直接拷貝這個文件到指定的目錄,提交到Hadoop計算集群運行。
總結
以上是生活随笔為你收集整理的hadoop 依赖式job_Hadoop Job使用第三方依赖jar文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言写贪吃蛇什么水平_学了一些C语言,
- 下一篇: thinkphp日志泄漏漏洞_Think