大數據處理相關知識點彙總

簡單統計

Map-Reduce概念介紹

Map-Reduce分爲兩個階段:Map階段和Reduce階段

  • Map階段:使用哈希函數把任務分成若干個子任務,在分佈式計算中節點可能是一臺電腦或者是一個計算節點。
  • Reduce階段:把子任務併發處理,然後合併結果。

用Map-Reduce方法統計一篇文章中每個單詞出現的個數。

  • 文章預處理:1. 去掉文章中的標點符號。2.對連字符-的處理。3.對於縮寫的處理。4.對於大小寫的處理。
  • Map階段:對每個單詞生成詞頻爲1的記錄,如:(dog, 1),一個單詞可能有多個詞頻爲1的記錄。通過哈希函數得到每個單詞的哈希值,並根據該值分成若干個子任務。
  • Reduce階段:每個子任務中包含若干種單詞,但同一種單詞不會分配進不同的子任務中。所以單個子任務中同一種單詞的詞頻進行合併。
  • 所有子任務統一合併,即得每種單詞的詞頻統計。

海量數據處理

解題關鍵

  • 分而治之。通過哈希函數將大任務分流到機器,或分流成小文件
  • 常用的HashMapBitMap
  • 難點:通訊、時間和空間的估算。

請對10億個IPV4的ip地址進行排序,每個ip只會出現一次

IPV4的ip數量約等於42億,申請長度爲232的bit類型的數組,bitmap中每個位置上是一個bit,只可表示0或1兩種狀態。將10億個ip地址依次放入bitmap中,即ip地址所對應的下標置1,最後再順序輸出ip地址即可。

請對10億人的年齡進行排序。

可以認爲年齡在0-200之間,創建一個長度爲200的數組,然後按照年齡計數排序即可。

有一個包含20億個全是32位整數的大文件,在其中找到出現次數最多的數,但是內存限制只有2G。

初步方案:使用hashmap記錄所有數出現的次數,key爲具體的數,使用4字節整型;value爲這個數出現的次數,使用4字節整型。所以一條記錄key-value保守估計佔有8字節。當記錄條數爲2億時,大約爲1.6G內存,如果20億都是不同的數,哈希表內存不夠存放。

改進方案:將大文件使用哈希函數進行分流,假設分成16個小文件,同一種數不會被分流到不同文件上,對於不同的數,每個文件中含有整數的種數也幾乎一樣。所以對每個小文件用哈希表進行次數統計。全部處理完成後,只要選出16個小文件中哪個第一名最大即可。

32位無符號整數的範圍是0-4294967295。現在有一個正好包含40億個無符號整數的文件,所以在整個範圍中必然有沒出現過的數。可以使用最多10M的內存,只用找到一個沒出現的數即可,改如何找。

0 - 232-1 範圍分成64個區間,單個區間應該裝下 232/64 個數。總共的範圍爲42億,但數一共爲40個億,所以必然會有區間計數不足 232/64。此時只要關注一個計數不足的區間,並用bitmap統計區間中的數出現情況即可。

某搜索公司一天的用戶搜索詞彙是海量的,假設有百億的數據量,請設計一種求出每天最熱100詞的可行辦法。

使用哈希函數進行分流至每臺機器,如果機器中文件依舊很大,可以再次進行哈希函數分流成小文件,處理每一個小文件,得到每個小文件中詞彙的詞頻統計。建立記錄後,利用小根堆或外排序來進行TOP100的篩選

工程師常使用服務器集羣來設計和實現數據緩存,以下是常見的策略。1.無論是添加、查詢還是刪除數據,都先將數據的id通過哈希函數轉換成一個哈希值,即爲key。2.如果目前機器有N臺,則計算key%N的值,這個值就是該數據所屬的機器編號,無論是添加、刪除還是查詢操作,都只在這臺機器上進行。請分析這種緩存策略可能帶來的問題,並提出改進的方案。

潛在問題:如果增加或刪除機器時,數據遷移的代價很大。
根據哈希函數得到的哈希值結果%N, 當機器數N發生變化時,所有數據必須重新計算哈希值,以及對新的機器數M取餘,來決定各自數據的歸屬。

解決方案:一致性哈希算法
假設數據id通過哈希值計算後的結果爲0 - 232,將這些數字收尾相連,形成環形。然後將機器id計算出哈希值,確定機器在環中的位置一條數據如何確定歸屬於哪臺機器,將數據通過哈希函數計算後,在環中順時針找尋離這個哈希值最近的機器位置,這臺機器就是該數據的歸屬。
添加機器時,只需要計算新機器順時針下一臺機器中的數據id,從下一臺機器中遷移部分數據進入新機器即可;刪除機器時,只要將刪除的機器數據全部順時針的複製到下一臺機器即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章