雲端技術這個詞在這幾年越來越紅,到底什麼是雲端設計?
簡單說就是把所有需要計算的東西丟到伺服器,讓伺服器去分配更多的電腦、空間去計算
而眼前的電腦只是扮演一個螢幕的角色而已
負責傳送、接收並顯示資訊,就像你口袋中的手機而已。
而雲端技術看似簡單,而後卻有著了不起的演算法,
其中最有名的大概就是Google所提出的兩大概念:Map Reduce & Big Table。
Map Reduce 簡單的說就是把一堆東西分成有規律的一個由key和value搭配的pair: (key, value),
接著在將具有相同key的pair聚集在一起,再對他們的value做處理。
最簡單的例子就是做WordCount了
問題:
假設有一堆文件 ( 量大到無法想像,假設有1 TB的純文字文件好了 )
要計算出再這堆文件中某個字到底出現了多少次?
Map Reduce的想法:
對於每一個檔案,將所有的字output成 (字, 出現次數),
然後再透過Reducer去將擁有相同的字的pair拿回來,然後再將出現次數做加總即可。
作法:
Map 就是去讀一堆這些檔案,然後將每個字output出(key, value)的樣式
像是"Hi, I am Austin. How are you? I am fine"這樣的一串字,
經過Map以後就會output出(Hi, 1), (I, 1), (am, 1), (Austin, 1), ...
Reducer就會拿到一個具有相同key的array(iterator),
只要將這個array的每個次數相加起來以後,就是最後的答案了
詳細的Map Reduce可以參考Google的文件或是網路上其他資源
回到Hadoop和Hbase
Hadoop即是一套實現Google Map Reduce的工具,
Hbase則是實現了Big Table設計概念的工具,
這兩套目前都是Apache的專案之一,
皆使用Java為主要語言
而最有名的使用者大概就是yahoo了XD
Hadoop 簡單的說就是建立一個cluster平台
利用MapReduce的概念將一個工作分到很多個cluster去平行運算
Map就是將一個工作分到多個運算節點(Node)
Reduce就是將各個節點的結果再重新結合成最後的結果
而Hadoop就是提供這樣的環境的平台
Hbase則是一個可以快速存取大量資料的一個資料庫設計
利用Row Oriented以及Column Family的概念
方便存入具有不同column屬性的data以及根據row key 快速拿出想要的data
這兩套系統都是基於一個分散式的檔案系統 HDFS 建立而成
HDFS: Hadoop Distributed File System
在設立Hadoop和Hbase的時候都要設定聯繫HDFS的server和port
而這個系統也是分散式的到每一個node上
達到分散運算以及Fault Tolerance
( 因為同一份檔案可以複製到不同的node上面,如果其中有個node掛了就還有另外的node可以補回來)
接下來的幾篇會分別紀錄:
1. 安裝Hadoop環境(Fully Distributed)
2. 安裝Hbase環境
3. 透過thrift讓php、python、c++等其他語言可以與Hbase溝通