2016.08.06 筆記
《Hadoop 權威指南》
初識Hadoop
MapReduce 和 關係型數據庫
Hadoop
爲我們提供了一個可靠的共享存儲和分析系統
HDFS
實現數據的存儲
MapReduce
實現數據的分析和處理
如果數據庫系統只更新一小部分記錄,那麼B樹更有優勢(關係型數據庫中使用的一種數據結構,受限於尋址的比例)
但數據庫系統如果有大量數據更新時,B樹的效率就明顯落後於MapReduce
,因爲需要使用排序合併來重建數據庫。
在許多情況下,可以將MapReduce
視爲關係型數據庫管理系統的補充
MapReduce
比較適合以批處理方式處理需要分析整個數據集的問題,尤其是動態分析;適合一次寫入、多次讀取數據的應用
RDBMS
(關係型數據庫)適用於點查詢和更新;適合持續更新的數據集
基於MapReduce
的高級查詢語言:
Pig
Hive
Hadoop發展歷史
MapReduce
由谷歌的工程師開發,用於構建搜索引擎的索引
Hadoop
是Apache Lucene
創始人創建的
(Lucene是一個開放源代碼的全文檢索引擎工具包,)
Hadoop
起源於開源網絡搜索引擎Apache Nutch
(Nutch
是基於Lucene
的)
Nutch
是一個可以運行的網頁爬取工具和搜索引擎系統
Nutch
受GFS
(谷歌分佈式文件系統)論文啓發,開發了NDFS
(Nutch
分佈式文件系統)
NDFS
後來改名HDFS
2004年穀歌發表論文介紹MapReduce
Nutch
完成移植,使用MapReduce
和NDFS
來運行
開發人員將NDFS
和MapReduce
移出Nutch
形成Lucence
的一個子項目,命名爲Hadoop
Hadoop
在雅虎發展成能夠處理Web數據的系統
紐約時報案例:
他們把1851年到1980年的存檔掃描之後得到4T的文件並用亞馬遜的EC2雲服務將文件存爲PDF格式放到網上共享,整個過程一共使用了100臺計算機,所花時間不到24小時。
Hadoop
在209秒內完成了對1TB數據的排序
Hadoop
已經是公認的大數據通用存儲和分析平臺
雅虎搜索引擎主要組成部分
Crawler
從網頁服務器爬取網頁
WebMap
構建一個已知網頁的鏈接圖(生成的鏈接圖非常大,需要大批計算機很長時間運行來創建和分析)
Indexer
爲最佳頁面構建一個反向索引
Runtime
處理用戶的查詢
關於MapReduce
MapReduce
是一種可用於數據處理的編程模型
Hadoop
可以運行各種語言版本的MapReduce
程序
傳統按行存儲數據的工具是awk
爲了充分利用Hadoop
提供的並行處理優勢,我們需要將查詢表示成MapReduce
作業。完成某種本地端的小規模測試之後,就可以把作業部署到集羣上運行。
map
函數的輸出經由MapReduce
框架處理後,最後發送到reduce
函數
繼承Mapper
類,重寫map()
函數
繼承Reducer
類,重寫reduce()
函數
運行MapReduce
作業
main
函數中:
Job job = new Job;
job.setJarByClass(...);
job.setJobName("...");
job.setMapperClass(...);
job.setReducerClass(...);
job.setOutputKeyClass(...);
job.setOutputValueClass(...);
job.waitForCompletion(...); // 提交作業並等待執行完成
Hadoop
集羣上運行一個作業時,要把代碼打包成一個jar
文件,在集羣上發佈這個文件。
使用hadoop
執行程序
每個reducer
都有一個輸出文件