前面講的 分割槽、分箱模式 都是不關心資料的順序。 接下來 全排序、混排序模式 關心的是資料按照指定鍵進行並行排序。
全排序解釋;
排序在順序結構程式中容易實現, 但是在mapreduce 中,或者說在並行程式設計中不易實現。這是典型的 「分治法」。
每個 reduce 將按照鍵對他的資料排序,但這種排序並不是全域性意義上的排序。 這裡想做的是全排序,記錄是整個資料集按照順序排列好的。
作用:
排序號的資料有很多有用的特性,比如時間排序可以提供乙個基於
時間軸的檢視。在乙個已排序好的資料集中查詢某條記錄可以採用二分查詢法替代線性查詢。如 mr例子中通過查看檔案第一條和最後一條知道資料的
上界和下界。 該特性在查詢記錄時非常有用,同時這也是 hbase 的主要特性之一。 如果資料已經按主鍵或索引列排好序,那麼一些資料在批量載入這些資料時將更快。
不過一般不推薦使用 mr 進行資料排序, 這類操作代價高昂。 需要掃瞄 1+(x~n)*次的全量掃瞄。(好的設計幹嘛還需要第二次排序呢?)
使用範圍:
被排序的鍵必須具有可比較性,另外此資料如果需要補齊位數則需要抽樣時補充好。
結構:全排序需要先根據值的取值範圍劃分一組分割槽,並且每個分割槽將獲得相同規模的資料子集, 整體資料數量(上界、下界)的大小決定 每個 reduce 將對多少資料進行排序。 然後通過自定義的分割槽器按照排序鍵將資料分割槽。
全排序模式包含兩個階段:
1 分析階段
分析階段確定每個分割槽的範圍
如果資料分布不隨時間變化而快速變化, 那麼分析階段僅需執行一次。
猜分割槽: 如果資料是均勻分布的就可以猜到大致分割槽。 如 id增量排序 100w id。假設用1000 個 reduce 處理,那麼就是 1000 個id 乙個分割槽。
分析階段首先對資料隨機取樣,然後基於 隨機樣本進行分割槽。 原理是分割槽能夠均勻的拆分隨機樣本,那麼也就能均勻的拆分更大的資料集。
2 排序階段
排序階段對資料進行排序
全排序例:
1 分析
假設有 10億 條資料進行排序, 計畫用 1000 個reduce執行排序, 那麼取樣(10億 / 1000=10w) 10w 條記錄沒個分割槽將能獲取很平均。 也就是分析階段(取樣)
只需要覆蓋 0.01%的記錄。
這裡只需要乙個 reduce 用來儲存分析之後的資料。 這些資料的鍵就是資料屬性。 值為 null 節省空間。 此資料儲存為資料的範圍邊界。
2 排序
如果想有乙個主排序加第二排序,那麼可以將兩個鍵連線起來 並用分隔符分開。 例如 省^市 。
效能分析:
這是乙個代價高昂的操作,因為實際上該模式需要載入兩和解析資料兩次。 第一次是建立分割槽範圍。 第二次才是真正的對資料排序。
由於所有資料都需要通過網路傳輸,並且這些資料都將被寫入磁碟,因此需要使用相對較多的 reduce。
混排:
混排效果與 全排序效果是對立的。但後者也關心資料在資料集中的順序。(需要亂序、匿名,隨機資料中獲得可重複的隨機取樣。
)結構:
和乙個隨機鍵一起輸出。
reduce 負責對隨機鍵排序,進而使得資料隨機分布。
效能分析:
混排模式有非常好的效能,因為 reduce 的每條記錄都是隨機的,因此 reduce 的資料將會分布十分平衡。 reduce 越多, 資料的展開越快。 並且該模式資料檔案的大小也可**。 即為整個資料集的大小除以 reduce 數。
來自為知筆記(wiz)
五 資料組織模式 2) 分割槽模式
分割槽模式是將記錄進行分類 即分片 分割槽或分箱 他不關心記錄的順序 目的 將資料集中相似的資料記錄成不同的 更小的資料。適用範圍 必須提前知道有多少個分割槽。比如按天 按月 年等等。結構 資料是通過分割槽器進行分割槽的。所以需要自定義分割槽器 partitioner 函式來確定每條記錄應該被分在那...
關於資料訪問模式(五) Layers模式
layers 層 模式,我想大家應該都不會陌生了。不管是硬體驅動程式 tcp ip協議,還是j2ee應用軟體的架構,層 的強大之處在 呢?我們是否真的了解層的劃分呢?我們面對乙個複雜問題的時候,都會想著將這個問題化整為零,分為乙個個子問題,然後逐個擊破。相應 的,處理這樣複雜問題的軟體也會進行劃分。...
讀《企業應用架構模式》4 關於組織領域邏輯
關於領域邏輯的組織主要講了 貫穿領域層裡的某些東西 1.事務指令碼 指令碼 顧名思義就是 sql語句 當然如果我們運算元據庫,必然要在乙個事務中,這樣就出會事務指令碼的概念,估計市場是小的應用都是這樣的組織的,記得8年前做廣電專案的時候,就是這用他來組織 的,如果大家看過bbs 大部分也是應用這種模...