1. 程式人生 > >大資料(演算法知識)

大資料(演算法知識)

大資料問題

Map-Reduce和Hadoop逐漸成為熱門。

1介紹雜湊函式

雜湊函式又叫雜湊函式,雜湊函式的輸入域可以是非常大的範圍,但是輸出域是固定範圍。假設為s。

雜湊函式性質:

1:典型的雜湊函式都擁有無限的輸入值域;
2:輸入值相同時,返回值一樣;
3:輸入值不同時,返回值可能一樣,也可能不一樣。
4:不同輸入值得到的雜湊值,整體均勻的分佈在輸出域s上。

1~3是雜湊函式的雜湊值,第4點是評價一個雜湊函式優劣的關鍵。(並且這種分佈與輸入值是沒有關係的;比如:aaa1,aaa2,aaa3,雖然相似,但是計算出的雜湊值差異巨大)

在這裡插入圖片描述

MD5演算法與SHA1演算法都是經典的雜湊函式演算法,瞭解即可,面試時不需要掌握。

2:介紹Map-Reduce

第一步:Map階段:通過雜湊演算法把大任務分成小任務;
第二步:Reduce階段:子任務併發處理,然後合併結果。

難點:在於工程上的處理。

注意點:

1:備份的考慮,分散式儲存的設計細節,以及容災策略。

比如在一個大型的分散式系統中,每臺計算機是一個計算節點,這麼多機器,總會有壞的,一旦壞了,上面的資料怎麼辦呢,一個數據屬於多少個備份才算合適呢?

MapReduce產生檔案相等龐大,可能一個問檔案就可能讓一臺機器的檔案存不下,這麼多檔案,如何分散式儲存呢?還有如何讓這個系統對使用者來說是透明的呢(就是使用者在終端使用的時候感覺在一臺電腦上是一樣的),這種儲存的核心是分散式檔案系統,而分散式檔案系統需要考慮軟體,硬體,效率,災難恢復等多方面的問題。這不是一個簡單的工程問題。

2:任務分配策略與任務進度跟蹤的細節設計,節點狀態的呈現。

再比如說:MapReduce的Map階段就是把任務分配給不同的機器,分散式系統的機器效能都是不同的,即便是機器效能相同,任務也不會分配的那麼平均,必然會導致某些機器先完成,某些機器後完成,所以任務分配也需要考慮,均衡的策略也需要去設計。

還有分散式系統是多使用者的,任務的執行是並行的,這就需要跟蹤每個任務完成的程序,一旦有些任務失敗,就要想辦法重新執行該任務,所以就需要中心控制,而且既然要跟蹤任務的執行,當然也要實時查詢節點的狀態,同時還得重新分配失敗的任務。

3:多使用者許可權的控制。

再比如,任何一個系統都要設定不同的許可權,防止使用者修改刪除,系統的重要檔案,導致系統的奔潰,分散式系統也不例外,對多使用者的安全控制也是需要考慮的條件之一。

3:用MapReduce解決的一個經典的統計問題

用MapReduce方法統計一篇文章中單詞出現的個數。