新聞中心
雖然我們可以在Eclipse下面開(kāi)發(fā)Hadoop應(yīng)用程序,但是當(dāng)我們引用了第三方j(luò)ar文件的時(shí)候,把我們編寫(xiě)的程序打成jar包之后,如何能夠在Hadoop集群下面運(yùn)行,是一個(gè)我們?cè)诔绦蜷_(kāi)發(fā)的過(guò)程中必須要解決的一個(gè)問(wèn)題,通過(guò)搜索資料,在這里把幾種可行的解決方案在這里總結(jié)一下。
成都創(chuàng)新互聯(lián)是一家專(zhuān)注于網(wǎng)站設(shè)計(jì)制作、網(wǎng)站設(shè)計(jì)與策劃設(shè)計(jì),德江網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專(zhuān)注于網(wǎng)站建設(shè)十多年,網(wǎng)設(shè)計(jì)領(lǐng)域的專(zhuān)業(yè)建站公司;建站業(yè)務(wù)涵蓋:德江等地區(qū)。德江做網(wǎng)站價(jià)格咨詢(xún):18980820575本來(lái)打算也一篇的,可是寫(xiě)到后來(lái),發(fā)現(xiàn)我太啰嗦了,寫(xiě)的有點(diǎn)太細(xì)了,決定分開(kāi)來(lái)寫(xiě),寫(xiě)成兩篇好了。。。。
第一篇:主要寫(xiě)Eclipse下面引入第三方j(luò)ar,以及打包在集群上運(yùn)行。
第二篇:主要寫(xiě)Hadoop應(yīng)用程序如何引入第三方j(luò)ar,以及對(duì)生產(chǎn)環(huán)境下應(yīng)該怎么去引入第三方j(luò)ar的個(gè)人見(jiàn)解,文章鏈接《Hadoop應(yīng)用引用第三方j(luò)ar的幾種方式(二)》
===========================================================================================
在這里先說(shuō)一下Eclipse下面引入第三方j(luò)ar的方法,這和下面的打成jar包有關(guān)系,一般來(lái)說(shuō)有兩種方法:一種方法是直接在本地磁盤(pán)的目錄下,然后引入;另一種方法是在Eclipse工程根目錄下面新建lib目錄,然后引入。
第一種引入方法
在這里以Hadoop的提供的WordCount進(jìn)行簡(jiǎn)單的修改來(lái)進(jìn)行測(cè)試。代碼如下:
package com.hadoop.examples; import java.io.IOException; import java.util.StringTokenizer; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Job; import org.apache.hadoop.mapreduce.Mapper; import org.apache.hadoop.mapreduce.Reducer; import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; import org.apache.hadoop.util.GenericOptionsParser; import com.hadoop.hdfs.OperateHDFS; public class WordCount { public static class TokenizerMapper extends Mapper
我把一個(gè)jar包放在的D盤(pán)的mylib目錄下面,這個(gè)jar是上一篇文章《使用Hadoop提供的API操作HDFS》中的類(lèi)打成的jar包
在工程右鍵Build Path==》Configure Build Path==》Add External JARs,找到上面目錄下的jar文件,即可引入。此時(shí)如果在Eclipse下運(yùn)行WordCount類(lèi),程序正確執(zhí)行,沒(méi)有問(wèn)題。
此時(shí)對(duì)整個(gè)工程打包的時(shí)候,你可以看到,打包的時(shí)候是沒(méi)有機(jī)會(huì)選擇引入的第三方j(luò)ar包的,只能選擇要打包的類(lèi),這里只選擇了一個(gè)WordCount,打包過(guò)程如下所示
此時(shí)在Hadoop集群上面運(yùn)行WordCount_dlib.jar,通過(guò)下面的命令運(yùn)行:
hadoop jar WordCount_dlib.jar com.hadoop.examples.WordCount input outputdlib
不出意外,程序報(bào)ClassNotFound異常,結(jié)果如下所示
第二種引入方法
在項(xiàng)目的根目錄(如果不是根目錄,我沒(méi)有進(jìn)行測(cè)試是否可行)下新建lib目錄(在工程上右鍵,新建文件夾),名字只能是lib,你換成其他的名字,它不會(huì)自動(dòng)加載的。把上面的jar放到lib下面,然后在工程右鍵Build Path==》Configure Build Path==》Add JARs,找到工程目錄lib下的jar文件,即可引入。此時(shí)如果在Eclipse下運(yùn)行WordCount類(lèi),程序正確執(zhí)行,沒(méi)有問(wèn)題。
此時(shí)對(duì)整個(gè)工程打包的時(shí)候,你可以看到,打包的時(shí)候是可以選擇lib下的jar包的,也可以選擇要打包的類(lèi),這里只選擇了一個(gè)WordCount,打包過(guò)程如下所示
此時(shí)在Hadoop集群上面運(yùn)行WordCount_plib.jar,通過(guò)下面的命令運(yùn)行:
hadoop jar WordCount_plib.jar com.hadoop.examples.WordCount input outputplib
程序可以正常運(yùn)行,結(jié)果如下所示,
為什么會(huì)這樣?就是因?yàn)閃ordCount_plib.jar內(nèi)部有其使用到的jar,它能夠自動(dòng)的加載它內(nèi)部的lib目錄下面的jar。
名字如果存放jar的名字不是lib的話(huà),雖然你也可以該目錄下的jar文件一起打進(jìn)入,但是它會(huì)報(bào)ClassNotFound的異常,我把lib的名稱(chēng)改成了mylib重新打成WordCount_mylib.jar,進(jìn)行了測(cè)試運(yùn)行,運(yùn)行結(jié)果如下所示:
這就是我上面為什么強(qiáng)調(diào),工程的根目錄下,一定只能叫做lib才可以的原因。
文章中所涉及到的四個(gè)jar文件,我會(huì)以附件的放上來(lái)的。附件中的文件列表說(shuō)明:
引入的第三方j(luò)ar文件:OperateHDFS.jar 第一種方式引入jar包,打成的jar文件:WordCount_dlib.jar 第二種方式引入jar包,打成的jar文件:WordCount_plib.jar 第二種方式引入jar包,但是目錄名稱(chēng)不叫做lib,叫做mylib,打成的jar文件WordCount_mylib.jar
文章太長(zhǎng)了,剩下的部分再下一篇寫(xiě)。。。。。
附件:http://down.51cto.com/data/2365539另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線(xiàn),公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。
網(wǎng)頁(yè)題目:Hadoop應(yīng)用引用第三方j(luò)ar的幾種方式(一)-創(chuàng)新互聯(lián)
標(biāo)題來(lái)源:http://fisionsoft.com.cn/article/dhgejd.html