Hadoop學(xué)習(xí)筆記(2) ——解讀Hello World

Hadoop學(xué)習(xí)筆記(2)

——解讀Hello World

上一章中,我們把hadoop下載、安裝、運行起來,最后還執(zhí)行了一個Hello world程序,看到了結(jié)果。現(xiàn)在我們就來解讀一下這個Hello Word。

OK,我們先來看一下當(dāng)時在命令行里輸入的內(nèi)容:

$mkdir input

$cd input

$echo "hello world">test1.txt

$echo "hello hadoop">test2.txt

$cd ..

$bin/hadoop dfs -put input in

$bin/hadoop jar build/hadoop-0.20.2-examples.jar wordcount in out

$bin/hadoop dfs -cat out/*

第1行,容易理解,我們在hadoop文件夾下建了一個input子文件夾;

第2行,進(jìn)入input文件夾;

第3行,echo是指回顯示,可以理解為print, 大于符(>)為重定向,正常echo是顯示在屏幕上,而用了重定向后,即內(nèi)容顯示在了text1.txt文件里。那這句話意思是,創(chuàng)建一個test1.txt文件,其內(nèi)容是"hello world"。 第4行類同;

第5行,回上一級目錄

第6行,這里運行了一個hadoop命令, 參數(shù)為 dfs –put input in 意思是將input文件夾上傳到hadoop文件系統(tǒng)中,并存于目錄in中。

第7行,同樣是hadoop命令,參數(shù) jar XXX.jar wordcount in out 是指運行jar程序中wordcount類的程序,并傳入?yún)?shù) in out。 in 為輸入目錄 out 為輸出結(jié)果目錄,兩個目錄皆為hadoop文件系統(tǒng)中的目錄,而并不是當(dāng)前操作系統(tǒng)目錄了。在第7行后,會看到屏幕在刷,是在計算。

第8行,cat是linux常用的命令,是將指定文件中的文本內(nèi)容輸出。 所以這里 cat out/* 是指把out文件夾下所有文件的文本內(nèi)容輸出,同時注意這里是dfs即是在hadoop文件系統(tǒng)中,且這個out正是第7步程序中輸出的目錄。所以輸入該命令后,我們看到了下面的結(jié)果:

這個簡單的程序目的是什么,其實比較容易看出來了,就是統(tǒng)計每個文件中的單詞出現(xiàn)的數(shù)量,并將結(jié)果合并后顯示出來。

可能有人就想,有什么啊,這程序我們C#、java幾行代碼也就實現(xiàn)了,有什么特別的?的確,初看過程就是。但我們深入來看一下。Hadoop的框架最核心的設(shè)計就是:HDFS和MapReduce。

HDFS就是分布式數(shù)據(jù)存儲,這就不一樣了,也就是說我的這里需要統(tǒng)計的文件很多的話,可能就不存在一臺機(jī)器上了,而且存在不同機(jī)器上,不需要我們?nèi)藶榭刂?,而是交給Hadoop自動完成,而我們,只需要統(tǒng)一的接口(bin/Hadoop dfs)來訪問:

MapReduce當(dāng)然就是負(fù)責(zé)計算咯,回頭一想,的確這程序不簡單,統(tǒng)計一個文件單詞出現(xiàn)的頻率容易,但時如果這些文件是分布在不同機(jī)器上,然后又需要將結(jié)果能很方便的合并起來,那就不是簡單幾行代碼就能搞定的了。所以MapReduce就是來負(fù)責(zé)這一塊的。

看到這里,我們就理解了上面的hello world,但是馬上會想,這個hadoop有哪些應(yīng)用場景呢?或為什么它這現(xiàn)在這么牛,這么流行?

現(xiàn)在是一個大數(shù)據(jù)時代,首先是一個存儲問題,hadoop提供了一個很好的分布式文件系統(tǒng),方便我們存大量數(shù)據(jù),同時提供了統(tǒng)一接口。

其次,擁有了大數(shù)據(jù),不代表能產(chǎn)生價值,在產(chǎn)生價值,就必須利用這些數(shù)據(jù)進(jìn)行計算(查詢、分析等),但時傳統(tǒng)的計算就是在一臺或多臺機(jī)器上部署程序,然后把數(shù)據(jù)獲通過接口抓取到程序里進(jìn)行分析,這稱之為移動數(shù)據(jù)。而hadoop不是,而是把程序自動分發(fā)到各hadoop結(jié)點上進(jìn)行計算,然后通過一定機(jī)制把結(jié)果進(jìn)行匯總最后返回出來,這稱之為移動計算。顯然,移動計算要比移動數(shù)據(jù)成本要低得多。

應(yīng)用場景之一:就是搜索引擎,現(xiàn)在互聯(lián)網(wǎng)數(shù)據(jù)海量,如何存儲并搜索成為難點,那hadoop的兩大核心框架就正符合這用處,用網(wǎng)絡(luò)爬蟲取來的海量網(wǎng)頁數(shù)據(jù)存于分布式庫,然后當(dāng)去搜索時,通過各子結(jié)點并發(fā)搜索,將數(shù)據(jù)返回合并后展示。 而hadoop的產(chǎn)生,也就是在google在2003年到2004年公布了關(guān)于GFS、MapReduce和BigTable三篇技術(shù)論文,即google的三駕馬車。Hadoop的HDFS對就google的GFS,MapReduce對就google的MapReduce,Hadoop的HBase對應(yīng)google的BigTable。 (注:HBase是其于hadoop開發(fā)的類似數(shù)據(jù)操作的軟件)。

應(yīng)用場景之二:生物醫(yī)療,大量DNA數(shù)據(jù)存儲,同時要進(jìn)行比對工作,用Hadoop再合式不過了。

當(dāng)然還有N多其他應(yīng)用場景……

到現(xiàn)在hadoop的核心價值總算摸清了,一是分布式存儲,二是移動計算。

為了支撐這些功能,肯定會用到不少的進(jìn)程,現(xiàn)在我們就來了解下這些進(jìn)程以及相應(yīng)的命令。

我們知道,運行$bin/start-all.sh來啟動整個hadoop。然后運行$bin/jps可以看到所有運行的進(jìn)程:

這些進(jìn)程現(xiàn)在是安裝在同一臺機(jī)器上的,而實際分布式部署時,如下圖:

NameNode:是HDFS的守護(hù)進(jìn)程,負(fù)責(zé)記錄文件是如何分割成數(shù)據(jù)塊以及分配存儲到哪個DataNode節(jié)點上,對內(nèi)存及I/O進(jìn)行集中管理。一個系統(tǒng)中只會有一個NameNode。

DataNode:數(shù)據(jù)結(jié)點,負(fù)責(zé)將數(shù)據(jù)包讀寫到硬盤上。當(dāng)客戶端需要數(shù)據(jù)通訊時,先問NameNode獲取存放到哪個DataNode,然后,客戶端直接與DataNode進(jìn)行通訊。

SecondaryNameNode:用來監(jiān)控HDFS狀態(tài)的輔助進(jìn)程。與NameNode不同的時,它不接收或記錄任何實時的數(shù)據(jù)變化,只與NameNode進(jìn)行通信,以便定期地保存HDFS元數(shù)據(jù)的快照。由于NameNode是單點的,通過SecondaryNameNode的快照功能,可以將NameNode的宕機(jī)時間和數(shù)據(jù)損失降低到最小。同時NameNode發(fā)生問題時,Secondary NameNode可以及時地作為備用NameNode使用。

JobTracker:應(yīng)用程序與Hadooop之間的紐帶,代碼提交到集群上,JobTracker將會確定執(zhí)行計劃,包括決定處理哪些文件,為不同的任務(wù)分配節(jié)點以及監(jiān)察所有任務(wù)的運行,如果任務(wù)失敗,JobTracker將會自動重啟,但分配的節(jié)點可能會不同。

TaskTracker:負(fù)責(zé)執(zhí)行由JobTracker分配的單項任務(wù),雖然單個結(jié)點上只有一個TaskTracker,但可以利用多個JVM(Java虛擬機(jī))并行處理多個Map或reduce任務(wù)。

了解了進(jìn)程后,我們再來了解下有哪些文件操作命令,

bin/hadoop是一個批處理sh文件(與bat類似),運行時需要輸入子命令。子命令列表如下:

這里比較清楚了,各個子命令的描述,但這里有下fs,是我們常用的,同里里面會還有N多子命令,比如bin/hadoop fs -ls 列出文件內(nèi)容。

其它fs參數(shù)清單如下:

命令

說明

[-ls ]

列出文件夾下的內(nèi)容

[-lsr ]

遞歸列出文件夾下的內(nèi)容

[-du ]

顯示文件點用空間

[-mv ]

移動文件

[-cp ]

復(fù)制文件

[-rm [-skipTrash] ]

刪除文件

[-rmr [-skipTrash] ]

刪除文件夾

[-put ... ]

將本地文件上傳到服務(wù)器上

[-copyFromLocal ... ]

將服務(wù)器文件下載到本地

[-moveFromLocal ... ]

將服務(wù)器文件移至到本地

[-get [-ignoreCrc] [-crc] ]

將服務(wù)器文件下載到本地

[-getmerge [addnl]]

將服務(wù)器文件夾內(nèi)文件合并后下載到本地

[-cat ]

顯示文件的文本內(nèi)容

[-text ]

顯示文件文本內(nèi)容

[-copyToLocal [-ignoreCrc] [-crc] ]

復(fù)制文件(夾)到本地

[-moveToLocal [-crc] ]

移動文件(夾)到本地

[-mkdir ]

創(chuàng)建文件夾

[-setrep [-R] [-w] ]

設(shè)置文件的復(fù)制數(shù)量

[-touchz ]

寫一個時間戳放在文件同級目錄

[-test -[ezd] ]

測試文件是否存在

[-stat [format] ]

返回文件狀態(tài)

[-tail [-f] ]

顯示文件最后1KB的內(nèi)容

[-chmod [-R] PATH...]

修改文件(夾)屬性

[-chown [-R] [OWNER][:[GROUP]] PATH...]

修改文件owner屬性

[-chgrp [-R] GROUP PATH...]

修改文件(夾)屬性

[-help [cmd]]

顯示幫助

需要案例實戰(zhàn)的可以戳這里http://www.bdtbus.com

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 首先,我們在使用前先看看HDFS是什麼?這將有助于我們是以后的運維使用和故障排除思路的獲得。 HDFS采用mast...
    W_Bousquet閱讀 4,437評論 0 2
  • 之前的有點忘記了,這里在云筆記拿出來再玩玩.看不懂的可以留言 大家可以嘗試下Ambari來配置Hadoop的相關(guān)環(huán)...
    HT_Jonson閱讀 3,185評論 0 50
  • HDFS的設(shè)計目標(biāo) 通過上一篇文章的介紹我們已經(jīng)了解到HDFS到底是怎樣的東西,以及它是怎樣通過多副本機(jī)制來提供高...
    陌上疏影涼閱讀 1,529評論 0 3
  • (一) 去年過年回家,遇到了一個高中同學(xué)jacky,算是發(fā)小。廣州做外貿(mào)的,恕我眼拙,竟然沒有認(rèn)出他是土豪,只注意...
    江左梅娘閱讀 561評論 1 4
  • 【按語】看到兩起溺水事件,令人揪心!愿每一個孩子都能健康成長,愿每一個家庭都能幸福美滿。 防溺水順口溜 文/塵一粒...
    塵一粒W閱讀 1,073評論 0 0

友情鏈接更多精彩內(nèi)容