作業要求來自于https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3319
1.用自己的話闡明Hadoop平台上HDFS和MapReduce的功能、工作原理和工作過程
HDFS 功能 分布式檔案系統,用來存儲海量資料。
工作原理 檔案系統都有最小的處理單元,而HDFS的處理單元是一個塊。HDFS儲存的檔案被分成塊進行存儲。預設塊大小為
64MB。HDFS有兩種類型的節點:NameNode和DataNode。
NameNode是管理節點,存放檔案中繼資料。也就是存放着檔案和資料塊的映射表,資料塊和資料節點的映射表。通
過NameNode可以找到檔案存放的地方,找到存放的資料。DataNode是工作節點,用來存放資料塊,也就是檔案實
際存儲的地方。
工作過程 當用戶端向NameNode發送消息以讀取中繼資料時,NameNode将查詢其塊映射以找到相應的資料節點。然後用戶端可
以在相應的資料節點中找到資料塊,并将它們拼接成檔案。這是讀寫的過程。
MapReduce 功能 并行處理架構,實作任務分解和排程。
工作原理 map task
程式會根據InputFormat将輸入檔案分割成splits,每個split會作為一個map task的輸入,每個map task會有一
個記憶體緩沖區,輸入資料經過map階段處理後的中間結果會寫入記憶體緩沖區,并且決定資料寫入到哪個
partitioner,當寫入的資料到達記憶體緩沖區的的閥值(預設是0.8),會啟動一個線程将記憶體中的資料溢寫入磁
盤,同時不影響map中間結果繼續寫入緩沖區。在溢寫過程中,MapReduce架構會對key進行排序,如果中間
結果比較大,會形成多個 溢寫檔案,最後的緩沖區資料也會全部溢寫入磁盤形成一個溢寫檔案(最少有一個溢
寫檔案),如果是多個溢寫檔案,則最後合并所有的溢寫檔案為一個檔案。
reduce task
當所有的map task完成後,每個map task會形成一個最終檔案,并且該檔案按區劃分。reduce任務啟動之
前,一個map task完成後,就會啟動線程來拉取map結果資料到相應的reduce task,不斷地合并資料,為
reduce的資料輸入做準備,當所有的map tesk完成後,資料也拉取合并完畢後,reduce task 啟動,最終将
輸出輸出結果存入HDFS上。
工作過程 開發人員編寫好MapReduce program,将程式打包運作。JobClient向JobTracker申請可用Job,JobTracker返
回JobClient一個可用Job ID。JobClient得到Job ID後,将運作Job所需要的資源拷貝到共享檔案系統HDFS中。
資源準備完備後,JobClient向JobTracker送出Job。JobTracker收到送出的Job後初始化Job。初始化完成後,
JobTracker從HDFS中擷取輸入splits(作業可以該啟動多少Mapper任務)。與此同時,TaskTracker不斷地向
JobTracker彙報心跳資訊,并且傳回要執行的任務。TaskTracker得到JobTracker配置設定(盡量滿足資料本地化)的
任務後,向HDFS擷取Job資源(若資料是本地的,不需拷貝資料)。 擷取資源後,TaskTracker會開啟JVM子程序
運作任務。
2.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)檢視運作結果