0基礎(chǔ)搭建Hadoop大數(shù)據(jù)處理-編程

Hadoop的編程可以是在Linux環(huán)境或Winows環(huán)境中,在此以Windows環(huán)境為示例扁瓢,以Eclipse工具為主(也可以用IDEA)。網(wǎng)上也有很多開發(fā)的文章,在此也參考他們的內(nèi)容只作簡(jiǎn)單的介紹和要點(diǎn)總結(jié)鞠值。

Hadoop是一個(gè)強(qiáng)大的并行框架,它允許任務(wù)在其分布式集群上并行處理渗钉。但是編寫彤恶、調(diào)試Hadoop程序都有很大難度。正因?yàn)槿绱琐伲琀adoop的開發(fā)者開發(fā)出了Hadoop Eclipse插件声离,它在Hadoop的開發(fā)環(huán)境中嵌入了Eclipse,從而實(shí)現(xiàn)了開發(fā)環(huán)境的圖形化挥唠,降低了編程難度抵恋。在安裝插件,配置Hadoop的相關(guān)信息之后宝磨,如果用戶創(chuàng)建Hadoop程序弧关,插件會(huì)自動(dòng)導(dǎo)入Hadoop編程接口的JAR文件,這樣用戶就可以在Eclipse的圖形化界面中編寫唤锉、調(diào)試世囊、運(yùn)行Hadoop程序(包括單機(jī)程序和分布式程序),也可以在其中查看自己程序的實(shí)時(shí)狀態(tài)窿祥、錯(cuò)誤信息和運(yùn)行結(jié)果株憾,還可以查看、管理HDFS以及文件晒衩∴拖梗總地來說,Hadoop Eclipse插件安裝簡(jiǎn)單听系,使用方便贝奇,功能強(qiáng)大,尤其是在Hadoop編程方面靠胜,是Hadoop入門和Hadoop編程必不可少的工具

Hadoop工作目錄簡(jiǎn)介

為了以后方便開發(fā)掉瞳,我們按照下面把開發(fā)中用到的軟件安裝在此目錄中,JDK安裝除外浪漠,我這里把JDK安裝在D盤的直屬目錄Java安裝路徑下(安裝在Program Files下有些地方會(huì)報(bào)空隔截?cái)噱e(cuò)誤)陕习,下面是工作目錄:

系統(tǒng)磁盤(D:)

|---HadoopWork

|--- eclipse

|--- hadoop-2.7.3

|--- workplace

|---……

按照上面目錄把Eclipse和Hadoop解壓到"D:\HadoopWork"下面,并創(chuàng)建"workplace"作為Eclipse的工作空間址愿。

Eclipse插件開發(fā)配置

第一步:把我們的"hadoop2x-eclipse-plugin-master"放到Eclipse的目錄的"plugins"中该镣,然后重新Eclipse即可生效。

系統(tǒng)磁盤(D:)

|---HadoopWork

|--- eclipse

|---plugins

|---?hadoop2x-eclipse-plugin-master.jar

上面是我的"hadoop-eclipse-plugin"插件放置的地方响谓。重啟Eclipse如下圖:

從上圖中左側(cè)"Project Explorer"下面發(fā)現(xiàn)"DFS Locations"拌牲,說明Eclipse已經(jīng)識(shí)別剛才放入的Hadoop Eclipse插件了俱饿。

第二步:選擇"Window"菜單下的"Preference",然后彈出一個(gè)窗體塌忽,在窗體的左側(cè)拍埠,有一列選項(xiàng),里面會(huì)多出"Hadoop Map/Reduce"選項(xiàng)土居,點(diǎn)擊此選項(xiàng)枣购,選擇Hadoop的安裝目錄(如我的Hadoop目錄:D:\HadoopWork\hadoop-2.7.3)扯旷。結(jié)果如下圖:

第三步:切換"Map/Reduce"工作目錄邮丰,有兩種方法:

1)選擇"Window"菜單下選擇"Open Perspective",彈出一個(gè)窗體胚膊,從中選擇"Map/Reduce"選項(xiàng)即可進(jìn)行切換眷蜓。

2)在Eclipse軟件的右上角分瘾,點(diǎn)擊圖標(biāo)"

"中的"

",點(diǎn)擊"Other"選項(xiàng)吁系,也可以彈出上圖德召,從中選擇"Map/Reduce",然后點(diǎn)擊"OK"即可確定汽纤。

切換到"Map/Reduce"工作目錄下的界面如下圖所示上岗。

第四步:建立與Hadoop集群的連接,在Eclipse軟件下面的"Map/Reduce Locations"進(jìn)行右擊蕴坪,彈出一個(gè)選項(xiàng)肴掷,選擇"New Hadoop Location",然后彈出一個(gè)窗體背传。

注意上圖中的紅色標(biāo)注的地方呆瞻,是需要我們關(guān)注的地方。

Location Name:可以任意其径玖,標(biāo)識(shí)一個(gè)"Map/Reduce Location"

Map/Reduce Master

Host:192.168.80.32(Master.Hadoop的IP地址)

Port:9001

DFS Master

Use M/R Master host:前面的勾上栋烤。(因?yàn)槲覀兊腘ameNode和JobTracker都在一個(gè)機(jī)器上。)

Port:9000

User name:hadoop (與署中的一致)

備注:這里面的Host挺狰、Port分別為你在mapred-site.xml、core-site.xml中配置的地址及端口买窟。不清楚的可以參考"0基礎(chǔ)搭建Hadoop大數(shù)據(jù)處理-集群安裝"進(jìn)行查看丰泊。

接著點(diǎn)擊"Advanced parameters"從中找見"hadoop.tmp.dir",修改成為我們Hadoop集群中設(shè)置的地址始绍,我們的Hadoop集群是"/usr/local/hadoop273/hadoop_tmp"瞳购,這個(gè)參數(shù)在"core-site.xml"進(jìn)行了配置。

點(diǎn)擊"finish"之后亏推,會(huì)發(fā)現(xiàn)Eclipse軟件下面的"Map/Reduce Locations"出現(xiàn)一條信息学赛,就是我們剛才建立的"Map/Reduce Location"年堆。

第五步:查看HDFS文件系統(tǒng),并嘗試建立文件夾和上傳文件盏浇。點(diǎn)擊Eclipse軟件左側(cè)的"DFS Locations"下面的变丧,就會(huì)展示出HDFS上的文件結(jié)構(gòu)。

右擊">user>hadoop"可以嘗試建立一個(gè)"文件夾--index_in"绢掰,然后右擊刷新就能查看我們剛才建立的文件夾痒蓬。

創(chuàng)建完之后,并刷新滴劲。

遠(yuǎn)程登錄"Master.Hadoop"服務(wù)器攻晒,用下面命令查看是否已經(jīng)建立一個(gè)"index_in"的文件夾。

hadoop fs -ls

到此為止班挖,我們的Hadoop Eclipse開發(fā)環(huán)境已經(jīng)配置完畢鲁捏,不盡興的同學(xué)可以上傳點(diǎn)本地文件到HDFS分布式文件上,可以互相對(duì)比意見文件是否已經(jīng)上傳成功萧芙。

Eclipse運(yùn)行WordCount程序

配置Eclipse的JDK

如果電腦上不僅僅安裝的JDK8.0给梅,那么要確定一下Eclipse的平臺(tái)的默認(rèn)JDK是否8.0。從"Window"菜單下選擇"Preference"末购,彈出一個(gè)窗體破喻,從窗體的左側(cè)找見"Java",選擇"Installed JREs"盟榴,然后添加JDK8.0曹质。下面是我的默認(rèn)選擇JRE。

如果沒有的話點(diǎn)擊Add添加擎场。

添加后按下圖選擇1.8的版本羽德。

設(shè)置Eclipse的編碼為UTF-8

創(chuàng)建MapReduce項(xiàng)目

從"File"菜單,選擇"Other"迅办,找到"Map/Reduce Project"宅静,然后選擇它。

接著站欺,填寫MapReduce工程的名字為"WordCountProject"姨夹,點(diǎn)擊"finish"完成。

目前為止我們已經(jīng)成功創(chuàng)建了MapReduce項(xiàng)目矾策,我們發(fā)現(xiàn)在Eclipse軟件的左側(cè)多了我們的剛才建立的項(xiàng)目磷账。

創(chuàng)建WordCount類

選擇"WordCountProject"工程,右擊彈出菜單贾虽,然后選擇"New"逃糟,接著選擇"Class",然后填寫如下信息:

因?yàn)槲覀冎苯佑肏adoop2.7.3自帶的WordCount程序,所以報(bào)名需要和代碼中的一致為"org.apache.hadoop.examples"绰咽,類名也必須一致為"WordCount"菇肃。這個(gè)代碼放在如下的結(jié)構(gòu)中。

hadoop-2.7.3

|---src

|---examples

|---org

|---apache

|---hadoop

|---examples

從上面目錄中找見"WordCount.java"文件取募,用記事本打開琐谤,然后把代碼復(fù)制到剛才建立的java文件中。由于代碼貼出來亂了矛辕,下面就貼出圖:


備注:如果不加"conf.set("mapred.job.tracker", "192.168.80.32:9001");"笑跛,將提示你的權(quán)限不夠,其實(shí)照成這樣的原因是剛才設(shè)置的"Map/Reduce Location"其中的配置不是完全起作用聊品,而是在本地的磁盤上建立了文件飞蹂,并嘗試運(yùn)行,顯然是不行的翻屈。我們要讓Eclipse提交作業(yè)到Hadoop集群上陈哑,所以我們這里手動(dòng)添加Job運(yùn)行地址。

運(yùn)行WordCount程序

選擇"Wordcount.java"程序伸眶,右擊一次按照"Run AS Run on Hadoop"運(yùn)行惊窖。然后會(huì)彈出如下圖,按照下圖進(jìn)行操作厘贼。

在Console中可以看到輸出日志界酒。

查看WordCount運(yùn)行結(jié)果

查看Eclipse軟件左側(cè),右擊"DFS Locations》Hadoop273》user》hadoop"嘴秸,點(diǎn)擊刷新按鈕"Refresh"毁欣,我們剛才出現(xiàn)的文件夾"newoutput"會(huì)出現(xiàn)。記得"newoutput"文件夾是運(yùn)行程序時(shí)自動(dòng)創(chuàng)建的岳掐,如果已經(jīng)存在相同的的文件夾凭疮,要么程序換個(gè)新的輸出文件夾,要么刪除HDFS上的那個(gè)重名文件夾串述,不然會(huì)出錯(cuò)执解。

打開"newoutput"文件夾,打開"part-r-00000"文件纲酗,可以看見執(zhí)行后的結(jié)果衰腌。

還可以將項(xiàng)目導(dǎo)出成jar包,發(fā)送到Hadoop服務(wù)器上運(yùn)行觅赊,就像運(yùn)行自帶的example一樣右蕊。

到此為止,Eclipse開發(fā)環(huán)境設(shè)置已經(jīng)完畢茉兰,并且成功運(yùn)行Wordcount程序,下一步我們真正開始Hadoop之旅欣簇。

擴(kuò)展

以下列出自己和參考園友列出的問題匯總:

INFO hdfs.DFSClient: Exception in createBlockOutputStream

java.net.NoRouteToHostException: 沒有到主機(jī)的路由

在每個(gè)服務(wù)器上jps看下hadoop的進(jìn)程有沒啟動(dòng)规脸,如果都啟動(dòng)了坯约,則停掉主機(jī)和幾個(gè)Slave的防火墻,如果再?zèng)]有出現(xiàn)問題的話說明相關(guān)端口沒有開放莫鸭,在防火墻中加入相關(guān)端口闹丐。

"error: failure to login"問題

下面以網(wǎng)上找的"hadoop-0.20.203.0"為例,我在使用"V1.0"時(shí)也出現(xiàn)這樣的情況被因,原因就是那個(gè)"hadoop-eclipse-plugin-1.0.0_V1.0.jar"卿拴,是直接把源碼編譯而成,故而缺少相應(yīng)的Jar包梨与。具體情況如下

詳細(xì)地址:http://blog.csdn.net/chengfei112233/article/details/7252404

在我實(shí)踐嘗試中堕花,發(fā)現(xiàn)hadoop-0.20.203.0版本的該包如果直接復(fù)制到eclipse的插件目錄中,在連接DFS時(shí)會(huì)出現(xiàn)錯(cuò)誤粥鞋,提示信息為: "error: failure to login"缘挽。

彈出的錯(cuò)誤提示框內(nèi)容為"An internal error occurred during: "Connecting to DFS hadoop".org/apache/commons/configuration/Configuration". 經(jīng)過察看Eclipse的log,發(fā)現(xiàn)是缺少jar包導(dǎo)致的呻粹。進(jìn)一步查找資料后壕曼,發(fā)現(xiàn)直接復(fù)制hadoop-eclipse-plugin-0.20.203.0.jar,該包中l(wèi)ib目錄下缺少了jar包等浊。

經(jīng)過網(wǎng)上資料搜集腮郊,此處給出正確的安裝方法:

首先要對(duì)hadoop-eclipse-plugin-0.20.203.0.jar進(jìn)行修改。用歸檔管理器打開該包筹燕,發(fā)現(xiàn)只有commons-cli-1.2.jar 和hadoop-core.jar兩個(gè)包轧飞。將hadoop/lib目錄下的:

commons-configuration-1.6.jar ,

commons-httpclient-3.0.1.jar ,

commons-lang-2.4.jar ,

jackson-core-asl-1.0.1.jar

jackson-mapper-asl-1.0.1.jar

一共5個(gè)包復(fù)制到hadoop-eclipse-plugin-0.20.203.0.jar的lib目錄下,如下圖:

然后庄萎,修改該包META-INF目錄下的MANIFEST.MF踪少,將classpath修改為一下內(nèi)容:

Bundle-ClassPath:classes/,lib/hadoop-core.jar,lib/commons-cli-1.2.jar,lib/commons-httpclient-3.0.1.jar,lib/jackson-core-asl-1.0.1.jar,lib/jackson-mapper-asl-1.0.1.jar,lib/commons-configuration-1.6.jar,lib/commons-lang-2.4.jar

這樣就完成了對(duì)hadoop-eclipse-plugin-0.20.203.0.jar的修改。

最后糠涛,將hadoop-eclipse-plugin-0.20.203.0.jar復(fù)制到Eclipse的plugins目錄下援奢。(各版本對(duì)應(yīng)的版本號(hào)也不相同)

"Permission denied"問題

網(wǎng)上試了很多,有提到"hadoop fs -chmod 777 /user/local/hadoop273 "忍捡,有提到"dfs.permissions 的配置項(xiàng)集漾,將value值改為 false",有提到"hadoop.job.ugi"砸脊,但是通通沒有效果具篇。

參考文獻(xiàn):

地址1:http://www.cnblogs.com/acmy/archive/2011/10/28/2227901.html

地址2:http://sunjun041640.blog.163.com/blog/static/25626832201061751825292/

錯(cuò)誤類型:org.apache.hadoop.security.AccessControlException: org.apache.hadoop.security?.AccessControlException: Permission denied: user=*********, access=WRITE, inode="hadoop":?hadoop:supergroup:rwxr-xr-x

解決方案:

我的解決方案直接把系統(tǒng)管理員的名字改成你的Hadoop集群運(yùn)行hadoop的那個(gè)用戶。

"Failed to set permissions of path"問題

參考文獻(xiàn):https://issues.apache.org/jira/browse/HADOOP-8089

錯(cuò)誤信息如下:

ERROR security.UserGroupInformation: PriviledgedActionException as:?hadoop cause:java.io.IOException Failed to set permissions of path:\usr\hadoop\tmp\mapred\staging\hadoop753422487\.staging to 0700?Exception in thread "main" java.io.IOException: Failed to set permissions of path:?\usr\hadoop\tmp \mapred\staging\hadoop753422487\.staging to 0700

解決方法:

Configuration conf = new Configuration();

conf.set("mapred.job.tracker", "[server]:9001");

"[server]:9001"中的"[server]"為Hadoop集群Master的IP地址凌埂。

"hadoop mapred執(zhí)行目錄文件權(quán)"限問題

參考文獻(xiàn):http://blog.csdn.net/azhao_dn/article/details/6921398

錯(cuò)誤信息如下:

job Submission failed with exception 'java.io.IOException(The ownership/permissions on the staging directory /tmp/hadoop-hadoop-user1/mapred/staging/hadoop-user1/.staging is not as expected. It is owned by hadoop-user1 and permissions are rwxrwxrwx. The directory must be owned by the submitter hadoop-user1 or by hadoop-user1 and permissions must be rwx------)

修改權(quán)限:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末驱显,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌埃疫,老刑警劉巖伏恐,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異栓霜,居然都是意外死亡翠桦,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門胳蛮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來销凑,“玉大人,你說我怎么就攤上這事仅炊《酚祝” “怎么了?”我有些...
    開封第一講書人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵茂洒,是天一觀的道長(zhǎng)孟岛。 經(jīng)常有香客問我,道長(zhǎng)督勺,這世上最難降的妖魔是什么渠羞? 我笑而不...
    開封第一講書人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮智哀,結(jié)果婚禮上次询,老公的妹妹穿的比我還像新娘。我一直安慰自己瓷叫,他們只是感情好屯吊,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著摹菠,像睡著了一般盒卸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上次氨,一...
    開封第一講書人閱讀 51,462評(píng)論 1 302
  • 那天蔽介,我揣著相機(jī)與錄音,去河邊找鬼煮寡。 笑死虹蓄,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的幸撕。 我是一名探鬼主播薇组,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼坐儿!你這毒婦竟也來了律胀?” 一聲冷哼從身側(cè)響起宋光,我...
    開封第一講書人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎炭菌,沒想到半個(gè)月后跃须,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡娃兽,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了尽楔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片投储。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖阔馋,靈堂內(nèi)的尸體忽然破棺而出玛荞,到底是詐尸還是另有隱情,我是刑警寧澤呕寝,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布勋眯,位于F島的核電站,受9級(jí)特大地震影響下梢,放射性物質(zhì)發(fā)生泄漏客蹋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一孽江、第九天 我趴在偏房一處隱蔽的房頂上張望讶坯。 院中可真熱鬧,春花似錦岗屏、人聲如沸辆琅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽婉烟。三九已至,卻和暖如春暇屋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背率碾。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工叔营, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人所宰。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓绒尊,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親仔粥。 傳聞我的和親對(duì)象是個(gè)殘疾皇子婴谱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容