HDFS簡單實踐以及遇到的小問題

引言

? 哇屁擅,好久沒更新偿凭,最近工作太忙了。記得上次我們簡單了解了一下Hadoop的HDFS嗎煤蹭?今天我們就來簡單的搭建一下笔喉,非常簡單,帶大家一起深入看看硝皂。本次使用的是虛擬機VM14版本常挚、系統(tǒng)CentOS7 、Hadoop為3.X稽物。

PS:Hadoop版本不一樣奄毡,做法可能有差異


至于如何安裝贝或,大家可以在網(wǎng)上自行查找吼过,我認為比較有參考價值的我就粘出來:

1、 https://blog.csdn.net/babyxue/article/details/80970526【VMware安裝Centos7超詳細過程(圖文)】

2咪奖、 https://blog.csdn.net/u010476739/article/details/86647585 【centos7.6安裝配置hadoop-3.2.0筆記(單機安裝盗忱、偽分布式安裝)】

3、 https://blog.csdn.net/jimuka_liu/article/details/82784313【centos安裝hadoop超級詳細沒有之一】

兄弟們羊赵,只能幫你們到這里了

這里就簡單總結(jié)一下趟佃,安裝hadoop的注意點:

【單機、偽分布式】

  1. 把虛擬機的網(wǎng)絡(luò)設(shè)置好(我使用的是NAT)
  2. 下載并上傳hadoop3.Xjdk1.8(可下可不下)安裝包到你的虛擬機
  3. 獲權(quán)root
  4. 裝好centOS必要的插件rsync
  5. 關(guān)閉防火墻昧捷,并檢查你虛擬機內(nèi)是否存在jdk闲昭,若無請安裝、修改系統(tǒng)環(huán)境變量
  6. 安裝Hadoop靡挥,記得要在bin目錄下執(zhí)行指令(你懂的)——老手忽略這一點
  7. 運行偽分布式要記得合理修改配置xml文件序矩,注意ip地址,注意能否ssh免密碼登錄
  8. 修改完任何配置文件后跋破,都要進行格式化

【集群】

  1. 網(wǎng)絡(luò)方面更需要設(shè)置好
  2. 創(chuàng)建多個hadoop用戶簸淀,同時記得賦root權(quán)
  3. hosts設(shè)置好節(jié)點
  4. 在每臺機子設(shè)置好/etc/profile的Hadoop環(huán)境

? 這里不做過多解釋了,我在上手的過程中毒返,會出現(xiàn)很多小問題啃擦,供大家參考解決方案【求大家給出你們遇到的問題和更好的方案共享】

情況一

[hadoop@cenServer bin]$ ./hadoop version
ERROR: JAVA_HOME is not set and could not be found.

回答:明顯是你裝了java之后沒有配置環(huán)境變量,記得隨時java -version檢查一下饿悬。

情況二

[hadoop@cenServer bin]$ ./hadoop version
log4j:ERROR setFile(null,true) call failed.
java.io.FileNotFoundException: /opt/hadoop/hadoop-3.2.0/logs/fairscheduler-statedump.log (權(quán)限不夠)

回答:看到權(quán)限不夠或者Permission denied字樣令蛉,應(yīng)該懂得使用sudo塞?什么?不想輸入密碼珠叔?參考

https://blog.csdn.net/Z0157/article/details/82079252 【Liunx:sudo命令不在重復(fù)輸入password蝎宇,和不再每次都輸入sudo】

情況三

[hadoop@cenServer hadoop-3.2.0]$ bin/hdfs namenode -format
ERROR: Unable to write in /opt/hadoop/hadoop-3.2.0/logs. Aborting.

回答:要么你還是sudo,要么你就chmod -R 777 /opt/hadoop/hadoop-3.2.0/logs給他賦權(quán)唄

情況四

Starting namenodes on [192.xxx.xxx.134]
上一次登錄:五 5月 31 10:34:23 CST 2019pts/4 上
192.168.114.134: ssh: connect to host 192.168.114.134 port 22: Connection timed out
Starting datanodes
上一次登錄:五 5月 31 10:36:23 CST 2019pts/4 上
Starting secondary namenodes [cenServer]
上一次登錄:五 5月 31 10:36:34 CST 2019pts/4 上
cenServer: ssh: Could not resolve hostname censerver: Name or service not known

回答:假如在啟動hadoop出現(xiàn)以上的情況祷安,首先可以去logs去查日志姥芥,其次就是查看/etc/hosts內(nèi)有無設(shè)置好ip地址,如上不認識censerver汇鞭,就需要把censerver給一個localhost凉唐,要設(shè)置自己正確的ip窩。

情況五

[root@cenServer hadoop-3.2.0]# bin/hdfs dfs -put input input_test
2019-06-03 10:13:33,439 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
put: Cannot create directory /user/root/input_test/input. Name node is in safe mode.

回答:看見Name node is in safe mode.字樣霍骄,肯定讓其離開安全模式台囱,即可輸入hadoop dfsadmin -safemode leave指令。

情況六

WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

回答:由于可能存在依賴包版本過低读整,看到這種提示簿训,一可以選擇忽略,二是可以先排除64位與32位的問題米间,其次就是查看glibc 版本和輸入hadoop checknative -a指令查看是否出現(xiàn)false字樣强品。

解決方案參考:

https://blog.csdn.net/u010003835/article/details/81127984 【1】

https://blog.csdn.net/daiqinge/article/details/83545443 【2】


開擼,首先成功啟動Hadoop的時候屈糊,我們不難發(fā)現(xiàn)一些關(guān)鍵詞出現(xiàn)在上一篇介紹hdfs的文章的榛,

[root@cenServer hadoop-3.2.0]# sbin/start-dfs.sh
WARNING: HADOOP_SECURE_DN_USER has been replaced by HDFS_DATANODE_SECURE_USER. Using value of HADOOP_SECURE_DN_USER.
Starting namenodes on [cenServer]
上一次登錄:五 5月 31 10:44:00 CST 2019pts/4 上
cenServer: Warning: Permanently added 'censerver,192.xxx.xxx.130' (ECDSA) to the list of known hosts.
Starting datanodes
上一次登錄:五 5月 31 11:09:48 CST 2019pts/4 上
Starting secondary namenodes [cenServer]
上一次登錄:五 5月 31 11:09:51 CST 2019pts/4 上

namenodesdatanodes還有secondary namenodes的進程啟動逻锐,你甚至可以輸入jps去查看這些進程是否啟動夫晌。

為了不同于鏈接中的例子,整一個demo演示一波hadoop-mapreduce-examples-3.2.0.jar這個包的作用谦去,以此簡單介紹一下map-reduce慷丽。

首先當(dāng)然是創(chuàng)建目錄

[root@cenServer hadoop-3.2.0]# mkdir input
[root@cenServer hadoop-3.2.0]# cd input/

再創(chuàng)建兩份文件蹦哼,分別輸入內(nèi)容hello worldhello hadoop

[root@cenServer input]# touch fileA.txt;echo "hello world" >> fileA.txt
[root@cenServer input]# touch fileB.txt;echo "hello hadoop" >> fileB.txt

將input目錄上傳到hadoop上命名為input_test鳄哭,并查看

[root@cenServer hadoop-3.2.0]# bin/hdfs dfs -put input input_test

[root@cenServer hadoop-3.2.0]# bin/hdfs dfs -ls
Found 1 items
drwxr-xr-x   - root supergroup          0 2019-05-31 17:26 input_test

運行map-reduce包的wordcount功能,待運行完畢后會生成output文件夾

[root@cenServer hadoop-3.2.0]# bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.0.jar wordcount input_test output

運行成功的話纲熏,打開output文件夾里面的part-r-00000 的文件內(nèi)容

[root@cenServer hadoop-3.2.0]# bin/hdfs dfs -cat output/part-r-00000
hadoop  1
hello   2
world   1

表面上的確是單詞統(tǒng)計的功能妆丘,我們先反編譯這個jar包看看源碼:

源碼

加上官方文檔的解釋

MapReduce - 用戶界面

本節(jié)提供了MapReduce框架的每個面向用戶方面的合理數(shù)量的詳細信息。這應(yīng)該有助于用戶以細粒度的方式實現(xiàn)局劲,配置和調(diào)整他們的工作勺拣。但請注意,每個類/接口的javadoc仍然是最全面的文檔; 這只是一個教程鱼填。

我們先來看看MapperReducer接口药有。應(yīng)用程序通常會實現(xiàn)它們以提供mapreduce方法。

然后我們將討論其他核心接口,包括Job愤惰,Partitioner苇经,InputFormatOutputFormat等宦言。

最后扇单,我們將討論框架的一些有用功能,如DistributedCache奠旺,IsolationRunner等蜘澜。

Mapper

Mapper將key/value對映射到一組中間key/value對。

Maps是將輸入記錄轉(zhuǎn)換為中間記錄的各個任務(wù)响疚。轉(zhuǎn)換后的中間記錄不需要與輸入記錄的類型相同鄙信。給定的輸入對可以映射到零個或多個輸出對。

Hadoop MapReduce框架為作業(yè)的InputFormat生成的每個InputSplit生成一個map任務(wù)稽寒。``

總的來說扮碧,Mapper實現(xiàn)通過Job.setMapperClass(Class)方法傳遞給作業(yè)。然后杏糙,框架為該任務(wù)的InputSplit中的每個鍵/值對調(diào)用map(WritableComparable慎王,Writable,Context)宏侍。然后赖淤,應(yīng)用程序可以覆蓋清理(Context)方法以執(zhí)行任何所需的清理。````

輸出對不需要與輸入對具有相同的類型谅河。給定的輸入對可以映射到零個或多個輸出對咱旱。通過調(diào)用context.write(WritableComparable,Writable)來收集輸出對绷耍。

應(yīng)用程序可以使用Counter報告其統(tǒng)計信息吐限。

隨后將與給定輸出鍵關(guān)聯(lián)的所有中間值按框架分組,并傳遞給Reducer以確定最終輸出褂始。用戶可以通過Job.setGroupingComparatorClass(Class)指定Comparator來控制分組诸典。

Mapper輸出進行排序,然后根據(jù)Reducer進行分區(qū)崎苗。分區(qū)總數(shù)與作業(yè)的reduce任務(wù)數(shù)相同狐粱。用戶可以通過實現(xiàn)自定義分區(qū)程序來控制哪些鍵(以及記錄)轉(zhuǎn)到哪個Reducer。``

用戶可以選擇通過Job.setCombinerClass(Class)指定組合器胆数,以執(zhí)行中間輸出的本地聚合肌蜻,這有助于減少從Mapper傳輸?shù)?code>Reducer的數(shù)據(jù)量。````

中間排序的輸出始終以簡單(key-len必尼,key蒋搜,value-len,value)格式存儲。應(yīng)用程序可以控制是否以及如何壓縮中間輸出豆挽,以及通過配置使用CompressionCodec酸休。``

有多少Map?

Maps的數(shù)量通常由輸入的總大小驅(qū)動祷杈,即輸入文件的塊總數(shù)斑司。

Maps的正確并行度似乎是每個節(jié)點大約10-100個maps,盡管已經(jīng)為非常cpu-light地圖任務(wù)設(shè)置了300個maps但汞。任務(wù)設(shè)置需要一段時間宿刮,因此最好是maps至少需要一分鐘才能執(zhí)行。

因此私蕾,如果您期望10TB的輸入數(shù)據(jù)并且塊大小為128MB僵缺,那么除非使用Configuration.set(MRJobConfig.NUM_MAPS,int)(僅提供框架提示)來設(shè)置82,000個映射踩叭,否則將使用它來設(shè)置它甚至更高磕潮。

Reducer

Reducer減少了一組中間值,這些中間值與一組較小的值共享一個鍵容贝。

作業(yè)的減少次數(shù)由用戶通過Job.setNumReduceTasks(int)設(shè)置自脯。

總的來說,Reducer實現(xiàn)通過Job.setReducerClass(Class)方法傳遞Job的作業(yè)斤富,并且可以覆蓋它以初始化它們自己膏潮。然后,框架為分組輸入中的每個<key满力,(list of values)>對調(diào)用reduce(WritableComparable焕参,Iterable ,Context)方法油额。然后叠纷,應(yīng)用程序可以覆蓋清理(Context)方法以執(zhí)行任何所需的清理。````

Reducer有3個主要階段:shuffle潦嘶,sort和reduce涩嚣。

為了更好的解釋其作用,我還有以下的圖片作為參考
圖形化參考

? 由于時間關(guān)系衬以,在這里也不能大篇幅給你們講解缓艳,希望在之后的文章中校摩,以更好的形式(或者分析部分源碼)讓大家了解到Map-Reduce看峻,大家也可以只知道他有助于用戶以細粒度的方式實現(xiàn)、配置和調(diào)整他們的工作的作用就好了衙吩。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末互妓,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌冯勉,老刑警劉巖澈蚌,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異灼狰,居然都是意外死亡宛瞄,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進店門交胚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來份汗,“玉大人,你說我怎么就攤上這事蝴簇”睿” “怎么了?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵熬词,是天一觀的道長旁钧。 經(jīng)常有香客問我,道長互拾,這世上最難降的妖魔是什么歪今? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮颜矿,結(jié)果婚禮上彤委,老公的妹妹穿的比我還像新娘。我一直安慰自己或衡,他們只是感情好焦影,可當(dāng)我...
    茶點故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著封断,像睡著了一般斯辰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上坡疼,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天彬呻,我揣著相機與錄音,去河邊找鬼柄瑰。 笑死闸氮,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的教沾。 我是一名探鬼主播蒲跨,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼授翻!你這毒婦竟也來了或悲?” 一聲冷哼從身側(cè)響起孙咪,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎巡语,沒想到半個月后翎蹈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡男公,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年荤堪,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片枢赔。...
    茶點故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡逞力,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出糠爬,到底是詐尸還是另有隱情寇荧,我是刑警寧澤,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布执隧,位于F島的核電站揩抡,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏镀琉。R本人自食惡果不足惜峦嗤,卻給世界環(huán)境...
    茶點故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望屋摔。 院中可真熱鬧烁设,春花似錦、人聲如沸钓试。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽弓熏。三九已至恋谭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間挽鞠,已是汗流浹背疚颊。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留信认,地道東北人材义。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像嫁赏,于是被迫代替她去往敵國和親其掂。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,440評論 2 359

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