map根據key排序 Map Reduce原理簡介

2021-10-11 15:10:00 字數 1959 閱讀 4042

首先我們來思考下,當計算機集群在計算時,往往會遇到哪些的問題呢?

1.高故障率

1000臺伺服器的集群 => 平均故障率 1 次/天

100萬台伺服器的集群 => 平均故障率 1000 次/天

故障率這麼高,如何保持資料的持續性,即在某些節點故障的情形下不影響依舊能夠使用資料?

在執行時間較長的集群運算中,如何應對節點故障呢?

2.網路頻寬瓶頸

如果網路頻寬 = 1 gbps ,那麼移動10tb 資料需要花費將近一天

3.分布式程式設計非常複雜

能否有乙個簡單的模型能夠隱去所有的複雜性?

map-reduce集群運算時問題的解決方案

1.在多節點上冗餘地儲存資料,以保證資料的持續性和一直可取性

2.將計算移向資料端,以最大程度減少資料移動

3.簡單的程式模型隱藏所有的複雜度

同時,我們也創造了分布式檔案儲存系統

以提供全域性的檔案命名空間,冗餘度和可獲取性

例如google 的 gfs; hadoop 的 hdfs

典型的應用場景與模式

超大級別的資料量(100gb到100tb級別),資料很少就地整個被替換;

最常見的操作為讀取和追加資料;

資料以「塊狀」形式在多台機器上儲存;

每個資料塊都會重複地在多台機器上儲存,保證資料的持續性和隨時可取性;

計算模型示例

假設我們手頭上有個超大的文字檔案,我們需要統計每個文字中的詞所出的次數

假設所有的詞和頻次對都超出了記憶體大小,無法一次性放入記憶體進行計算

我們使用linux命令:

words(doc.txt)| sort | uniq -c

其實這行**體現了mapreduce的精髓,我們來看一下:

words(doc.txt)| sort | uniq -c

words命令輸出乙個文字內容中所有詞,乙個一行

sort是進行排序

uniq -c是去重並統計重複的數字

對應map-reduce就是:

map

逐個檔案逐行掃瞄

掃瞄的同時抽取出我們感興趣的內容

(keys)group by key

排序和洗牌

reduce

聚合、總結、過濾或轉換

寫入結果

我們可以看到總體框架都和上述描述過程一致,只是map和reduce函式要根據具體問題具實現

所以在工程上,我們基本是寫map或者reduce,再寫個執行指令碼就行了

如果不理解linux,可以看看鳥哥的私房菜基礎版(廣告費麻煩結下!~!)

我們總結下總流程

1.首先是利用map函式讀取輸入文字,產生一系列的鍵值對

2.接下來是key-value,即將所有有相同key的鍵值對排在一起

3.最後輸出key-value,即把不同key的value加起來,就能最終的輸出結果,每個key的統計結果value

故障及處理

1.map任務節點故障

所有執行中和已經完成的map任務,都被重置為待初始

所有這些待初始map任務,將重新被分配到能工作的節點worker

2.reduce任務節點故障

只有執行中而未完成的reduce任務被設定為待初始。

這些待初始reduce任務被重新分配至其他worker

3.主節點故障

整個map-reduce任務中斷,同時通知客戶端管理員。

不多就這樣了,希望本文能夠幫到你!~!

Map集合排序 根據value對key進行排序

在流水的業務中,碼出最優雅的 描述 有若干個鍵值對格式的json字串,根據其中的value進排序,取出其中的排位靠前的一半以上的key值,json資料為 這是業務上的乙個需求,於是針對這個需求就有了對map的排序一系列探索 前言 對於json轉map本篇就不介紹,直接從對map的排序開始,其他型別可...

java json 根據 key排序

阿里的jsonobject內部是用hashmap來儲存的,所以輸出是按key的排序來的,如果要讓jsonobject按固定順序 put的順序 排列,可以修改jsonobject的定義hashmap改為linkedhashmap。public jsonobject 即定義jsonobject可以這樣 ...

Map排序(按key排序,按value排序)

主要分兩種,按鍵排序 按值排序。而且,按key排序主要用於treemap,而按value排序則對於map的子類們都適用。按key排序主要用於treemap,可以實現按照key值的大小,在物件插入時直接插入到合適的位置,保持map的順序性。來看treemap的建構函式 treemap comparat...