文字上的演算法讀書筆記四--分散式系統

imagination_gogo發表於2018-10-10

第三篇 應用篇

如何計算的更快

隨著資料量的爆炸式增長,如何儲存和計算海量資料就成了一個問題。解決的方法之一是使用分散式系統,可以更快更好的完成使用者的請求。

程式優化

程式執行時,經過將目標檔案中的程式碼和資料從磁碟拷貝到主存,從儲存器拷貝到暫存器堆,再從暫存器中拷貝到顯示器上。

花費大量的時間把資訊從一個地方拷貝到另一個地方。需要系統設計者考慮怎麼設計儲存器使拷貝操作儘可能快。

儲存器結構,越上層的速度越快但儲存量小,相反,越下層的速度越慢但儲存量大。

程式的優化有3個方向:

1).系統級(分散式系統)

2).演算法/資料結構級(傅立葉變換,trie樹,優先佇列,空間換時間)

3).程式碼級

儘可能使用上層儲存器,訪問速度快,少呼叫函式,引數儘可能少,引數儘可能是引用和指標,減少拷貝,資料儘可能少

區域性性原理。

 

為什麼要分散式系統?

分散式模型大概有這幾種:

(1)多執行緒,最基本的方法

(2)graphics Processing units ,利用圖形處理器的高度並行結構來提高速度

(3)Message Passing Interface,一種訊息傳遞程式設計模型

(4)MapReduce 

設計好分散式系統,需要考慮的事情比如:叢集負載均衡,資料的正確性和完整性,伺服器的錯誤處理等等。

4.3 Hadoop

軟體平臺,是Apache 開源組織的一個分散式計算開源框架,可以很容易地開發和執行處理海量資料的應用。核心設計是MapReduce和HDFS,可以認為是基於HDFS的MapReduce的實現。

分散式分解系統(HDFS)

採用master/slave架構。包括Namenode和Datanode。

Namenode是中心伺服器,負責管理檔案系統的名字空間以及客戶端對檔案的訪問。

Datanode一般是一個節點一個,負責管理所在節點上的儲存。

MapReduce

用來處理鍵/值對。Map輸出鍵值對,Reduce輸出鍵值對。

如統計詞頻,假設有一堆分好的詞,現在的任務是統計每個詞出現的次數。

首先將文字分成若干份,然後每一份資料,分配給一個Mapper,將每個詞賦值為1,然後按照某種規律(字母序,這樣同一個詞才能分配到一個Reducer)發給相應的Reducer,Reducer就是把相同的key的value累加起來,這樣完成統計詞頻。

 

 

相關文章