海量日誌資料處理

2021-10-05 13:24:33 字數 822 閱讀 3844

對不能完全載入到記憶體中處理的海量資料,考慮「分而治之」+hash的演算法思想 

1.按照標識欄位的hash(ip)%1024(根據具體情況設定)值,把海量日誌分別儲存到1024個小檔案中(每個標識所有資料只會儲存到1個小檔案中)。

2.對於每乙個小檔案,可以構建乙個標識欄位為key,出現次數為value的hash map,同時記錄當前出現次數最多的那個標識字段;

3.可以得到1024個小檔案中的出現次數最多的標識,再依據常規的排序演算法得到總體上出現次數最多的標識字段;

可採用bitmap(位圖法)

bitmap思想:就是用乙個bit位來標記某個元素對應的value, 而key即是該元素。由於採用了bit為單位來儲存資料,因此在儲存空間方面,可以大大節省。

eg:假設我們要對0-7內的5個元素(4,7,2,5,3)排序(這裡假設這些元素沒有重複)。那麼我們就可以採用bit-map的方法來達到排序的目的。要表示8個數,我們就只需要8個bit(1bytes),首先我們開闢1byte的空間,將這些空間的所有bit位都置為0

然後遍歷這5個元素,首先第乙個元素是4,那麼就把4對應的位置為1(可以這樣操作 p+(i/8)|(0×01<<(i%8)) 當然了這裡的操作涉及到big-ending和little-ending的情況,這裡預設為big-ending),因為是從零開始的,所以要把第五位置為1。

然後再處理第二個元素7,將第八位置為1,,接著再處理第三個元素,一直到最後處理完所有的元素,將相應的位置為1。

然後我們現在遍歷一遍bit區域,將該位是一的位的編號輸出(2,3,4,5,7),這樣就達到了排序的目的。

其實就是把計數排序用的統計陣列的每個單位縮小成bit級別的布林陣列

海量資料處理

1 有一千萬條簡訊,有重複,以文字檔案的形式儲存,一行一條,有 重複。請用5分鐘時間,找出重複出現最多的前10條。方法1 可以用雜湊表的方法對1千萬條分成若干組進行邊掃瞄邊建雜湊表。第一次掃瞄,取首位元組,尾位元組,中間隨便兩位元組作為hash code,插入到hash table中。並記錄其位址和...

海量資料處理

給定a b兩個檔案,各存放50億個url,每個url各占用64位元組,記憶體限制是4g,如何找出a b檔案共同的url?答案 可以估計每個檔案的大小為5g 64 300g,遠大於4g。所以不可能將其完全載入到記憶體中處理。考慮採取分而治之的方法。遍歷檔案a,對每個url求取hash url 1000...

海量資料處理

分而治之 hash對映 hash統計 堆 快速 歸併排序 300萬個查詢字串中統計最熱門的10個查詢。針對此類典型的top k問題,採取的對策往往是 hashmap 堆。hash統計 先對這批海量資料預處理。具體方法是 維護乙個key為query字串,value為該query出現次數的hashtab...