3.1 為什麼用mapreduce
分布式+海量資料
3.2 mapreduce計算模型
jobtracker,使用者管理和排程工作
tasktracker,用於執行工作
job,每個個mapreduce任務被初始化為乙個job,每個job又分為兩個階段,分別用map函式和reduce函式表示這兩個階段
inputsplit,儲存的不是資料本身,而是乙個分片長度和乙個記錄資料位置的資料
新/舊版api區別:
2、新api中廣泛使用context物件,並使用mapcontext進行mapreduce間的通訊
3、job的配置統一由configuration完成
4、job類負責job的控制,jobclient類被刪除
wordcount程式執行流程圖
1、按照textinputformat被處理成兩個inputsplit,然後輸入到兩個map中,map程式會讀取inputsplit指定位置的資料,然後交由map函式處理
2、處理後的資料寫入到本地磁碟,而不是hdfs,map的資料在job完成後可以刪除
3、reduce讀取map的輸出作為自己的輸入,合併value然後寫入hdfs
參照圖3-2來對照圖3-3wordcount程式
簡單控制流:jobtracker排程任務給tasktracker,tasktracker執行任務時會把進度返回給jobtracker,jobtracker會記錄進度的進行狀況,如果某個tasktracker上任務失敗,jobtracker會把這個任務分配給另乙個tasktracker,知道任務完成。
3.3 mapreduce任務的優化
1、任務排程
優先將任務分配給空閒的機器,盡量將map任務分配給inputsplit所在的機器,減少網路i/o消耗
2、資料預處理與inputsplit大小
mapreduce擅長處理少量大資料,不擅長處理大量小資料。在提交mapredcue任務前可以先對資料進行一次預處理,將資料合併為少量大資料。乙個block作為乙個inputsplit,合理的設定block塊大小。乙個map任務在一分鐘左右比較合適
3、map和reduce任務的數量
map/reduce任務槽,是這個集群能夠同時執行map/reduce任務的最大數量。例如:1200臺的集群,設定每台機器可以執行10個map任務,5個reduce任務,這個集群的map任務槽書為12000,reduce任務槽為6000。一般reduce任務數量是reduce任務槽數的0.95或1.75倍,0.95時,如果乙個reduce任務失敗,可以迅速找到一台空閒的機器重新執行這個任務,1.75時,執行速度快的機器可以獲得更多的reduce任務。
4、combine函式
這是乙個本地合併函式,wordcount程式中,詞頻最高的可能是「the」,每個map任務肯那個產生千萬個記錄,這些記錄如果一一的傳遞給reduce任務將會很耗時。可以通過combine函式合併這些資料,減少網路i/o操作。可以使用combine函式計算出這個block塊中「the」的數量。
5、壓縮
可以選擇對map的輸出或最終的輸出進行壓縮
6、自定義comparator
實現自定義型別時,自定義comparator來進行二進位製流的比較,省去資料的反序列化
3.4 hadoop流
通過流的方式hadoop可以支援任何語言編寫map/reduce函式
p493.5 hadoop pipes
在hadoop上執行c++程式的方法, hadoop的流使用的是標準的輸入/輸出,pipes使用的是sockets
mysql第三章關係模型 第三章 關係資料模型
一 資料模型概述 資料庫設計中兩種不同的模型 1 概念模型 面向現實世界,與計算機無關。2 資料模型 面向計算機實現。分為邏輯資料模型,物理資料模型。一 資料模型三要素 1 資料結構 資料庫資料,以及資料之間的聯絡。2 資料操作 資料庫物件允許執行操作的集合。3 資料的約束條件 資料庫完整性規則的集...
第三章 堆疊
1.基礎知識 堆疊可以實現很多的應用,遞迴的問題轉化成非遞迴形式,在本質上也是堆疊的問題.它是一種 filo 操作的資料結構,一般也有兩種儲存方式 陣列跟鍊錶實現形式,這裡我給出了鍊錶形式的堆疊模板,裡面包括了基本的堆疊所有的操作,還有兩個比較著名的應用例子,時間倉促,精力比較有限,關於迷宮老鼠還沒...
第三章 曙光
第三章 曙光 第二場校園招聘開始了。其實,洋對這個公司的不是很了解。因為前幾天突然在bbs上面看到了這個公司的招聘資訊,洋覺得這個公司不錯,就上網投了簡歷。接下來的乙個多小時,讓洋很震撼!想不到這個公司這個厲害,而且無論從哪方面來說,絕對不比之前的那個公司差。想不到自己的乙個不經意的決定到了這個大的...