海量資料去重

2021-08-27 10:41:55 字數 2897 閱讀 7075

巧用mapreduce+hdfs,海量資料去重的五大策略

hadoopsphere .mapreducehdfshadoop儲存hbasededoop雲計算. 摘要:隨著收集到資料體積的激增,去重無疑成為眾多大資料玩家面對的問題之一。重複資料刪除在減少儲存、降低網路頻寬方面有著顯著的優勢,並對擴充套件性有所幫助。在儲存架構中,刪除重複資料的常用方法包括雜湊、二進位制比較和增量差分;而本文專注的是使用mapreduce和hdfs對資料進行去重。

隨著儲存資料資訊量的飛速增長,越來越多的人開始關注儲存資料的縮減方法。資料壓縮、單例項儲存和重複資料刪除等都是經常使用的儲存資料縮減技術。

重複資料刪除往往是指消除冗餘子檔案。不同於壓縮,重複資料刪除對於資料本身並沒有改變,只是消除了相同的資料占用的儲存容量。重複資料刪除在減少儲存、降低網路頻寬方面有著顯著的優勢,並對擴充套件性有所幫助。

舉個簡單的例子:在專門為電信運營商定製的呼叫詳單去重應用程式中,我們就可以看到刪除重複資料的影子。同樣的,對於包含相同資料報的通訊網路,我們可以使用這種技術來進行優化。

在儲存架構中,刪除重複資料的一些常用的方法包括:雜湊、二進位制比較和增量差分。在 hadoopsphere這篇文章中,將專注於如何利用mapreduce和hdfs來消除重複的資料。(下面列出的方法中包括一些學者的實驗方法,因此把術語定義為策略比較合適)。

策略1:只使用hdfs和mapreduce

owen o』malley在乙個論壇的帖子中建議使用以下方法:

讓你的歷史資料按照md5值進行排序。 執行乙個mapreduce的作業,將你的新資料按照md5進行排序。需要注意的是:你要做所有資料的整體排序,但因為md5是在整個金鑰空間中是均勻分布的,排序就變得很容易。

基本上,你挑選乙個reduce作業的數量(如256),然後取md5值的前n位資料來進行你的reduce作業。由於這項作業只處理你的新資料,這是非常快的。 接下來你需要進行乙個map-side join,每乙個合併的輸入分塊都包含乙個md5值的範圍。recordreader讀取歷史的和新的資料集,並將它們按照一定方式合併。(你可以使用map-side join庫)。你的map將新資料和舊資料合併。這裡僅僅是乙個map作業,所以這也非常快。

當然,如果新的資料足夠小,你可以在每乙個map作業中將其讀入,並且保持新記錄(在ram中做了排序)在合適的數量範圍內,這樣就可以在ram中執行合併。這可以讓你避免為新資料進行排序的步驟。類似於這種合併的優化,正是pig和hive中對開發人員隱藏的大量細節部分。

策略2:使用hdfs和hbase

在一篇名為「 工程雲系統中一種新穎的刪除重複資料技術」的**中,zhe sun, jun shen, jianming young共同提出了一種使用hdfs和hbase的方法,內容如下:

•使用md5和sha-1雜湊函式計算檔案的雜湊值,然後將值傳遞給hbase

•將新的雜湊值與現有的值域比較,如果新值已經存在於hbase去重複表中,hdfs會檢查鏈結的數量,如果數量不為零時,雜湊值對應的計數器將增加1。如果數量是零或雜湊值在之前的去重複表中不存在,hdfs會要求客戶端上傳檔案並更新檔案的邏輯路徑。

•hdfs將儲存由使用者上傳的原始檔,以及相應的鏈結檔案,這些鏈結檔案是自動生成的。鏈結檔案中記錄了原始檔的雜湊值和原始檔的邏輯路徑。

要注意使用這種方法中的一些關鍵點:

•檔案級的重複資料刪除需要保持索參數量盡可能小,這樣可以有高效的查詢效率。

•md5和sha-1需要結合使用從而避免偶發性的碰撞。

策略3:使用hdfs,mapreduce和儲存控制器

•將資料指紋(fingerprint)由儲存控制器遷移到hdfs

•生成資料指紋資料庫,並在hdfs上永久儲存該資料庫

•使用mapreduce從資料指紋記錄集中篩選出重覆記錄,並將去重複後的資料指紋表儲存回儲存控制器。

資料指紋是指儲存系統中檔案塊經過計算後的雜湊索引,通常來說資料指紋要比它代表的資料塊體積小的多,這樣就可以減少分布式檢測時網路中的資料傳輸量。

策略4:使用streaming,hdfs,mapreduce

對於hadoop和streaming的應用整合,基本上包含兩種可能的場景。以ibm infosphere streams和biginsights集成為例,場景應該是:

1. streams到hadoop的流程:通過控制流程,將hadoop mapreduce模組作為資料流分析的一部分,對於streams的操作需要對更新的資料進行檢查並去重,並可以驗證mapreduce模型的正確性。

眾所周知,在資料攝入的時候對資料進行去重複是最有效的,因此在infosphere streams中對於某個特定時間段或者數量的記錄會進行去重複,或者識別出記錄的增量部分。接著,經過去重的資料將會傳送給hadoop biginsights用於新模型的建立。

2. hadoop到streams的流程:在這種方式中,hadoop mapreduce用於移除歷史資料中的重複資料,之後mapreduce模型將會更新。mapreduce模型作為streams中的一部分被整合,針對mid-stream配置乙個操作符(operator),從而對傳入的資料進行處理。

策略5:結合塊技術使用mapreduce

在萊比錫大學開發的乙個原型工具dedoop(deduplication with hadoop)中,mapreduce應用於大資料中的實體解析處理,到目前為止,這個工具囊括了mapreduce在重複資料刪除技術中最為成熟的應用方式。

基於實體匹配的分塊是指將輸入資料按照類似的資料進行語義分塊,並且對於相同塊的實體進行限定。

實體解析處理分成兩個mapreduce作業:分析作業主要用於統計記錄出現頻率,匹配作業用於處理負載均衡以及近似度計算。另外,匹配作業採用「貪婪模式」的負載均衡調控,也就是說匹配任務按照任務處理資料大小的降序排列,並做出最小負載的reduce作業分配。

dedoop還採用了有效的技術來避免多餘的配對比較。它要求mr程式必須明確定義出哪個reduce任務在處理哪個配對比較,這樣就無需在多個節點上進行相同的配對比較。

海量資料去重

法一 hash,通過雜湊對映構建原始資料與hash值之間的關係。若雜湊值相同則存在相同的資料,剔除即可。缺點 需要儲存該資料與對映關係。法二 bitmap,位圖法,對於去重的問題,我們只需要標記該資料有沒有出現過,並不需要去儲存該資料。從這方面入手,便有了bitmap。這裡我們假設待處理的資料是in...

使用SimHash進行海量文字去重

閱讀目錄 在之前的兩篇博文分別介紹了常用的hash方法 data structure algorithm hash那點事兒 以及區域性敏感hash演算法 algorithm 區域性敏感雜湊演算法 locality sensitive hashing 本文介紹的simhash是一種區域性敏感hash,...

使用SimHash進行海量文字去重

在之前的兩篇博文分別介紹了常用的hash方法 data structure algorithm hash那點事兒 以及區域性敏感hash演算法 algorithm 區域性敏感雜湊演算法 locality sensitive hashing 本文介紹的simhash是一種區域性敏感hash,它也是go...