MapReduce設計模式學習 讀書筆記

2021-08-21 07:12:25 字數 3924 閱讀 7684

thinkgamer部落格

概要設計模式更接近簡單的mr應用,因為基於鍵將資料分組是mr范型的核心功能,所有的鍵將被分組匯入reducer中

本章涉及的概要模式有數值概要(numerical summarization),倒排索引(inverted index),計數器計數(counting with counter)

combiner:reducer之前呼叫reducer函式,對資料進行聚合,極大的減少通過網路傳輸到reducer端的key/value數量,適用的條件是你可以任意的改變值的順序,並且可以隨意的將計算進行分組,同時需要注意的是乙個combiner函式只對乙個map函式有作用

partitioner:許多概要模式通過定製partitioner函式實現更優的將鍵值對分發到n個reducer中,著這樣的需求場景會比較少,但如果任務的執行時間要求很高,資料量非常大,且存在資料傾斜的情況,定製partitioner將是非常有效的解決方案

原始碼分析

程式設計例項

2.2.1:數值概要模式:計算資料聚合統計的一般性模式

2.2.2:數值概要應用的場景需要滿足以下亮點:

1:要處理的資料是數值資料或者計數

2:資料可以按照某些特定的字段分組

2.2.3:適用場景:

適用場景:通常用在需要快速搜尋查詢響應的場景,可以對乙個查詢結果進行預處理並儲存在乙個資料庫中

倒排索引實戰1

倒排索引實戰2

統計記錄數:簡單的對指定時間段的記錄數進行統計是很常見的,統計小數量級的唯一例項計數

彙總:用來執行對資料的某些字段進行彙總過濾模式也可以被認為是一種搜尋形式,如果你對找出所有具備特定資訊的記錄感興趣,就可以過濾掉不匹配搜尋條件的其他記錄,與大多數基礎模式類似,過濾作為一種抽象模式為其他模式服務,過濾簡單的對某一條記錄進行評估,並基於某個條件作出判斷,以確定當前這條記錄是保留還是丟棄

2.1:過濾

使用過濾的唯一必要條件是資料可以被解析成記錄,並可以通過非常特定的準則來確定它們是否需要保留,不需要reducer函式

近距離觀察資料:準備乙個特定的子集,子集中的記錄有某些共同屬性或者具備某些有趣的特性,需要進一步深入的分析。 

跟蹤某個事件的線索:從乙個較大資料集中抽取乙個連續事件作為線索來做案例研究。

分布式grep:通過乙個正規表示式匹配每一行,輸出滿足條件的行

資料清理:資料有時是畸形的,不完整的 或者是格式錯誤的,過濾可以用於驗證每一條資料是否滿足記錄,將不滿足的資料刪除

簡單隨機抽樣:可以使用隨機返回true or false的評估函式做過濾,可以通過調小true返回的概率實現對結果集合大小的控制

移除低分值資料:將不滿足某個特定閥值的記錄過濾出去    

2.2:布隆過濾,

對每一條記錄,抽取其中乙個特徵,如果抽取的特性是布隆過濾中所表示的值的集合成員,則保留記錄  

移除大多數不受監視的值:最直接的使用案例是清楚不感興趣的值

對成本很高的集合成員資格檢查做資料的預先過濾:

2.3:top10,不管輸入資料的大小是多少,你都可以精確的知道輸出的結果的記錄數

異類分析:

選取感興趣的資料:

引人注目的指標面板:

2.4:去重,過濾掉資料集中的相似資料,找出唯一的集合

資料去重: **舉例

抽取重複值:

規避內連線的資料膨脹:

全排序:關注的是資料從記錄到記錄的順序,目的是能夠按照指定的鍵進行並行排序。適用的範圍是排序的鍵必須具有可比性只有這樣資料才能被排序

混排序:關注記錄在資料集中的順序,目的是將乙個給定的記錄完全隨機化

sql連線模式包括內連線和外連線

eg:a表  b表

內連線:只連線兩個表中都用的外來鍵連線(eg 以id作為連線鍵,只連線有相同id)

外連線:

1:做外連線

以使用者id為外來鍵的a+b做外連線   以a表為基準,a表資料全部顯示,b表中不在a表中的id顯示為null

2:右外連線

和做外連線相反

3:全外連線

左外連線和右外連線的合併,有相同id 的顯示,沒有相同id的顯示為null

反連線:全外連線減去內連線的結果

相當其他連線模式來講用時最長,但是也是實現簡單並且支援所有不同型別的操作

適用場景:

1:多個大資料需要按乙個外來鍵做鏈結操作,如果除了乙個資料集以外,其他所有的資料集都可以放入記憶體,可以嘗試使用複製連線

2:你需要靈活的執行任意型別的連線操作

等效的sql:select user.id,user.location,comment.uprotes

from user

[inner | left | right] join comments

on user.id=comments.userid

優化方案:可以使用布隆過濾器執行reduce端的連線

是一種特殊型別的連線操作,是在乙個打的資料集和許多小的資料集之間通過map端執行的連線的操作,該模式完全消除了混排資料到reduce的需求

適用場景:

1:要執行的連線型別是由內連線或者左外連線,且大的輸入資料集在連線操作符的「左邊」時

2:除乙個大的資料集外,所有的資料集都可以存入每個map任務的記憶體中

效能分析:因為不需要reduce,因此在所有連線模式是最快的一種,代價是資料量,資料要能完全的儲存在jvm中,這極大的受限於你願意為每個map和reduce分配多少記憶體

是一種有效的將多個輸入源的滅乙個記錄跟所有其他記錄配對的方式

適用場景:

1:需要分析各個記錄的所有配對之間的關係

2:沒有其他方法可以解決這個問題

3:對執行時間沒有限制

等效的sql:select * from t1,t2

等效的pig:cross a,b;

關於模式的模式

自定義輸入與輸出

在hadoop自定義輸入和輸出

hadoop允許使用者修改從磁碟載入資料的方式,修改方式有兩種:

1:配置如何根據hdfs的塊生成連續的輸入分塊,配置記錄在map階段如何實現。

為此將要用到的兩個類即,recordreader和inputformat

2:hadoop也允許使用者通過類似的方式修改資料的儲存形式

通過outputformat和recordwriter實現

這個模式下是只有map的

(1)inputformat憑空建立split

(2)recordreader讀入虛的split並根據他生成隨機記錄

(3)某些情況下,能夠在split中賦予一些資訊,告訴recordreader生成什麼

(4)通常情況下,identitymap僅僅將讀入的資料原樣輸出

外部源輸出詳細描述:在作業提交之前,outputformat將驗證作業配置中指定的輸出規範。recordreader負責將所有的鍵值對寫入外部源

效能分析:必須小心資料接收者能否處理並行連線。有1000個任務將資料寫入到單個sql資料庫中,者=這工作起來並不好,為避免這種情況你可能不得不讓每個reducer多處理一些資料以減少寫入到資料接收者的並行度,如果資料接收者支援並行寫入,那麼這未必是個問題。

在mapreduce中資料是以並行的方式載入而不是以序列的方式,為了能夠大規模的讀取資料,源需要有定義良好的邊界

mr實現該模式的瓶頸將是資料來源或網路,資料來源對於多連線可能不具很好的擴充套件性,同時給定的資料來源可能與mr集群的網路不在同乙個網路環境下

分割槽裁剪模式將通過配置決定框架如何選取輸入split以及如何基於檔名過濾載入到mr作業的檔案

描述:分割槽裁剪模式是在inputformat中實現的,其中getsplit方法是我們需要特別注意的,因為他確定了要建立的輸入split,進而確定map任務的個數,  recordreader的實現依賴於資料是如何儲存的

《MapReduce設計模式》一導讀

mapreduce設計模式 歡迎閱讀 mapreduce設計模式 這是一本既獨特又熟悉的書。首先,這顯然是一本關於設計模式的書,為大家提供解決問題的模板或通用指南。我們看了一些以前出版的有關設計模式的書,特別是gamma等人 1995 編著的 design patterns elements of ...

學習設計模式 原型設計模式

先想一下既然要建立新的例項,為什麼不直接使用 new 而要設計出乙個原型模式進行例項的複製呢?這是因為 有的時候,我們也會在不指定類名的前提下生成例項,例如像圖形編輯器中拖動現有的模型工具製作圖形的例項,這種是非常典型的生成例項的過程太過複雜,很難根據類來生成例項場景,因此需要根據現有的例項來生成新...

MapReduce幾種執行模式

1 在eclipse中開發好mr程式 windows或linux下都可以 然後打成jar包 wc.jar 上傳到伺服器 執行命令 hadoop jar wc.jar cn.itheima.hadoop.mainclassrunner 2 在linux的eclipse中直接啟動runner類的main...