該作業要求來源于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3319
一、用自己的話闡明Hadoop平台上HDFS和MapReduce的功能、工作原理和工作過程。
Hdfs的功能:高度容錯性、支援大規模資料集、支援流式讀取資料、簡單的一緻性模型、移動計算而非移動資料、異構軟硬體平台間的可移植性
MapReduce的功能:資料劃分和計算任務排程、資料/代碼互定位、系統優化、出錯檢測和恢複、HDFS工作原理及流程
hdfs的工作流程:
- hdfs叢集分為兩大角色:NameNode,DataNode (Secondary NameNode)
- NameNode負責管理整個檔案的中繼資料(命名空間資訊,塊資訊) 相當于Master
- DataNode負責管理使用者的檔案資料塊 相當于Salve
- 檔案會按照固定的大小(block=128M)切成若幹塊後分布式存儲在若幹個datanode節點上
- 每一個檔案塊有多個副本(預設是三個),存在不同的datanode上
- DataNode會定期向NameNode彙報自身所儲存的檔案block資訊,而namenode則會負責保持檔案副本數量
- hdfs的内部工作機制會對客戶的保持透明,用戶端請求方法hdfs都是通過向namenode申請來進行通路
- SecondaryNameNode有兩個作用,一是鏡像備份,二是日志與鏡像的定期合并
MapReduce的工作流程:
1、輸入檔案分片,每一片都由一個MapTask來處理
2、Map輸出的中間結果會先放在記憶體緩沖區中,這個緩沖區的大小預設是100M,當緩沖區中的内容達到80%時(80M)會将緩沖區的内容寫到磁盤上。也就是說,一個map會輸出一個或者多個這樣的檔案,如果一個map輸出的全部内容沒有超過限制,那麼最終也會發生這個寫磁盤的操作,隻不過是寫幾次的問題。
3、從緩沖區寫到磁盤的時候,會進行分區并排序,分區指的是某個key應該進入到哪個分區,同一分區中的key會進行排序,如果定義了Combiner的話,也會進行combine操作
4、如果一個map産生的中間結果存放到多個檔案,那麼這些檔案最終會合并成一個檔案,這個合并過程不會改變分區數量,隻會減少檔案數量。例如,假設分了3個區,4個檔案,那麼最終會合并成1個檔案,3個區
5、以上隻是一個map的輸出,接下來進入reduce階段
6、每個reducer對應一個ReduceTask,在真正開始reduce之前,先要從分區中抓取資料
7、相同的分區的資料會進入同一個reduce。這一步中會從所有map輸出中抓取某一分區的資料,在抓取的過程中伴随着排序、合并。
8、reduce輸出
二、HDFS上運作MapReduce
1)準備文本檔案,放在本地/home/hadoop/wc

2)編寫map函數和reduce函數,在本地運作測試通過
3)啟動Hadoop:HDFS, JobTracker, TaskTracker
4)把文本檔案上傳到hdfs檔案系統上 user/hadoop/input
5)streaming的jar檔案的路徑寫入環境變量,讓環境變量生效
6)建立一個shell腳本檔案:streaming接口運作的腳本,名稱為run.sh
7)source run.sh來執行mapreduce
8)檢視運作結果
每位同學準備不一樣的大一點英文文本檔案,每個步驟截圖交上部落格上。
上述步驟測試通過之後,可以嘗試對文本做處理之後再統計次數,如标點符号、停用詞等。
有能力的同學嘗試對之前爬蟲爬取的文本,在Hadoop上做中文詞頻統計