map-reduce和hadoop熱門
常見海量處理題目解題關鍵
1.分而治之。通過雜湊函式將大任務分流到機器,或分流成小檔案
2.常用的hashmap或bitmap
難點:通訊,時間和空間的估算。
請對10億個ipv4的ip位址進行排序,每個ip只會出現一次
ipv4的ip數量約等於42億
ip->轉化為無符號整數
10億個ip->轉化為10億個整數(每個整數4位元組,空間約為4g)
更好的方法是申請長度為2的32次方的bit型別的陣列(空間約為500m) bitmap
請對10億人的年齡進行排序
用個長度為200的陣列,年齡計數排序即可
有個包含20億個全是32位整數的大檔案,在其中找到出現次數最多的數,但是記憶體限制只有2g
hashmap記錄所有數出現的次數
具體某乙個數:key->整形4位元組
這個數出現的次數:value->整形4位元組
一條記錄占有8位元組,記錄2億時,大約1.6g記憶體
所以用雜湊表來直接統計20億個整數的方案,可能記憶體不足
正確方法:
使用雜湊函式進行分流,可以分n個檔案
桶一種數不會被分流到不同檔案,這是雜湊函式性質決定的。
對於不同的數,每個檔案種含有整數的種數機會一樣,這也是雜湊函式性質決定的。
全部處理完成後,等到n個檔案種各自的第一名
再在n個第一名中,再選出其中的第一名即可
32位無符號整數的範圍時0~4294967295。現在正好有乙個包含40億個無符號整數的檔案,所以在整個範圍中必然有沒有出現過的數。可以使用最多10m的記憶體,只用找到乙個沒出現過的數即可,該如何找。
將0~2的32次方-1範圍分成64個區間
單個區間應該裝下2的32次方/64個數(這個64是按照給的記憶體來選擇的)
總共範圍約為42億,但數一共為40億,所以必然會有區間計數不足2的32次方/64
此區間為a,再遍歷一次40億個數,此時只關注區間a上的數,並用bitmap統計區間a上的數出現的情況。占用500m/64約等於8m,找到乙個在區間a上沒出現的數即可
某搜尋公司一天的使用者搜尋詞彙是海量的,假設有百億的資料量,請設計一種求出每天最熱100詞的可行方法。
百億資料使用雜湊函式進行分流到n臺機器上,如果每個機器上記憶體仍然不足,可以再使用雜湊函式再每台機器上再進行分流,分成若干個小檔案,處理每乙個小檔案,得到每個小檔案中詞彙的詞頻統計。
建立記錄後,利用小根堆來進行top100篩選。
利用小根堆或者外排序合併小檔案中的top100,獲得每台機器上的top100
再利用小根堆或者外排序將每台機器上的top100合併,獲得總體top100
工程師常使用伺服器集群來設計和實現資料快取,以下是常見的策略。1.無論是新增、查詢還是刪除資料,都先將資料的id通過雜湊函式轉換成乙個雜湊值,記為key。2.如果目前機器有n臺,則計算key%n的值,這個值就是該資料所屬的機器編號,無論是新增、刪除還是查詢操作,都只在這台機器上進行。請分析這種快取策略可能帶來的問題,並提出改進的方案
潛在問題:
如果增加或刪除機器,資料遷移的代價很大。
所有資料必須重新計算雜湊值,以及對新的機器數m取餘,來決定各自資料的歸屬。
資料快取很好的設計方案為:
一致性雜湊演算法
資料id通過雜湊值後的結果在0~2的32次方範圍內
將這些數字首尾相連,想象成乙個環形,將n臺機器id通過雜湊值計算出在環中的位置,其他的資料id順時針找到最近的機器,即為其歸屬機器
這種做法新增機器以及解除安裝機器時的代價都是很小的,只需要對區域性資料進行遷移即可。
大資料相關技術和演算法
大資料的關鍵技術 大資料的關鍵技術分為分析技術和處理技術,可用於大資料分析的關鍵技術主要包括a b測試,關聯規則挖掘,資料探勘,整合學習,遺傳演算法,機器學習,自然語言處理,模式識別,模型,訊號處理,空間分析,監督式學習,時間序列分析等,可用於大資料處理的關鍵技術主要是商業智慧型,雲計算,資料倉儲,...
必知C 演算法之鍊錶基本問題
給定乙個鍊錶 1.判斷鍊錶是否有環。2.如果鍊錶有環,請找出環入口。3.計算環的大小。思路 快慢指標 分別定義乙個快指標fast和慢指標slow,快指標一次走兩步,慢指標一次走一步。如果鍊錶沒有環,那麼fast最終會指向nullptr 如果鍊錶有環,那麼快指標和慢指標最終會相遇。所以,如果最終fas...
《大資料日知錄 架構與演算法》前言
大資料日知錄 架構與演算法 前言 像移動網際網路 o2o 可穿戴裝置等概念一樣,大資料 從甫一提出到颶風般席捲並風靡全球,從最初的技術名詞到形成滲透各行各業的社會現象,所耗時間僅幾年而已,其興也勃焉。那麼,大資料是否會像很多曾經火熱現在已難覓蹤跡的流行概念一樣,將來某日,人們靜心抬眼,發現風已去而水...