跳到主要內容

HBase 介紹

Hadoop 除了擁有分散式的運算平台之外,底層還有一個適合循序式、批次存取的檔案系統(HDFS),當然大家就不會就此滿足。既然 Google 用自家的分散式檔案系統做了一個用來存放結構化資料的 BigTable,為甚麼不也用 Hadoop 的 HDFS 做一個出來呢?

於是,兩年前在兩位 Powerset 工程師(Jim Kellerman 跟 Michael Stack)的號召下,在 Hadoop 的 contrib 計畫中多出了 HBase 這個跟 BigTable 採用類似設計的分散式結構化資料的儲存系統。

簡單的說,HBase 跟 BigTable 一樣,有別於一般資料庫系統用的 row-oriented 儲存方式,這兩個系統都是 column-oriented 的儲存方式。Column-oriented 的好處是每一筆資料可以存放不固定欄位的東西,不像 row-oriented 的存法,增加一個新的欄位需要多花些力氣才能達成。與 BigTable 相同的是 HBase 底層也是使用了分散式的檔案系統 (Hadoop 的 HDFS),並且也將一個資料表拆成很多份,由不同的伺服器負責該部份的存取,藉此達到高效能。

在寫入資料的時候,HBase 跟 BigTable 一樣,都是先寫到記憶體中的 MemCache,並且有 Write-Ahead Log 以防意外發生時可以做復原的動作。每隔一段時間,或者 MemCache 累積到一定程度,HBase 就會把資料寫入檔案系統中。因此,HBase 可以提供相當高速的寫入。讀取的時候,也是先去找 MemCache 後再去找檔案系統,而藉由將一個大大的表拆成很多份的技巧,也提昇了讀取的速度。

HBase 本身跟 Hadoop 一樣用 Java 撰寫,但透過 Thrift 的支援(Thrift 是一套由 Facebook 所開發,提供跨語言做資料交換的平台),你可以用任何 Thrift 有支援的語言,像是PHP/Perl/Ruby/Python 等來存取 HBase。

在系統架構上,HBase 分成 master 與 regionserver 兩部份,基本上,master 會告訴 client 某個表的某個部份要去哪台 regionserver 找才有,而 regionserver 就是實際上提供資料的程式。目前為止,master 只有一台,當他掛了之後,整個 HBase 就會陣亡(這跟 BigTable 不同,BigTable 會有自動的備援機制)。目前 HBase 的開發者已經在計畫提供自動切換到備援 master 的機制,預計會在下下版推出(0.20.0)。

目前 HBase 已經是 Hadoop 底下獨立的次計畫之一,共有五位開發者。最新版本是 0.18.1 需要搭配 Hadoop 0.18 一起使用,等 Hadoop 0.19 推出後,會跟著推出 HBase 0.19.0 (應該快了,目前 Hadoop 0.19.0 已經在 RC1 了)。

有興趣的可以參考 HBase 的官方網站: http://hadoop.apache.org/hbase/。另外有篇由 Jim R. Wilson 寫的簡單介紹,也可以參考看看。

參考來源 :
http://www.hadoop.tw/2008/11/hbase.html

留言

這個網誌中的熱門文章

自訂Apache的日誌檔輪替(Custom Apache log rotation behaviour on CentOS / RHEL)

1. 若有設定虛擬主機的話,要先設定虛擬主機的日誌以及日誌內容的格式 <VirtualHost *:80> ServerName DNS網址 DocumentRoot 網站目錄路徑 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined CustomLog access_log的路徑 combined </VirtualHost> ... ... ... 其中 LogFormat 與 CustomLog 的制定方式,在官方頁面有說明「 Log Files說明頁面 」 2. apache的日誌設定完之後,就可以開始設定apache的logrotate功能。在開始定義之前,先解釋甚麼是logrotate。 logrotate顧名思義就是log rotate,即日誌的輪換。Logrotate是Linux系統自身帶的一個日誌輪替執行檔,它的執行檔所在的目錄是/usr/sbin/logrotate,是專門對各種系統日誌(syslogd,mail)進行輪替的執行檔。 所以logrotate 的主要功能就是將舊的日誌檔案移動成舊日誌檔, 並且重新建立一個新的空的日誌檔案來記錄,它的執行結果有點類似底下的圖示:

巨型網站的分散式架構設計 (雲端運算的基礎)

網站初始: 架設網站入門其實很容易,很多網路上的免費資源運用一下,許多學生也可以自己建置網站,最基本的架構就是安裝一台Web server 及一台Database server,這樣的架構在流量不高的個人網站的確已足夠,但其實風險相當高,因為完全沒考慮到日後的擴充性(scalibility),也沒考慮到系統容錯及復原能力(High avability & Failover),因此只要流量一高,問題就接踵而至,但用這個架構可視為Close beta時期,多找一些親友來當免費測試員。 商業化架構: 在這時期代表已經籌到一筆資金,網站可以進行商業化架構設計,一般商業化考量下的標準架構,通常如下圖所示:

透過awk程式來計算網站流量

網路上有很多很多計算網站流量的分析工具....但是有時後自己想要知道如何分析,所以在網路上找到此指令可以計算網站的流量。 65.55.213.67 - - [04/Jul/2013:04:37:51 +0800] "GET /user.php?act=login HTTP/1.1" 200 10104 "-" "msnbot/2.0b (+http://search.msn.com/msnbot.htm)" 65.55.213.67 - - [04/Jul/2013:04:37:53 +0800] "GET /category.php?id=3 HTTP/1.1" 200 16041 "-" "msnbot/2.0b (+http://search.msn.com/msnbot.htm)" 65.55.213.67 - - [04/Jul/2013:04:37:56 +0800] "GET /category.php?id=1 HTTP/1.1" 200 11080 "-" "msnbot/2.0b (+http://search.msn.com/msnbot.htm)" 65.55.213.67 - - [04/Jul/2013:04:37:58 +0800] "GET /goods.php?id=351 HTTP/1.1" 200 19369 "-" "msnbot/2.0b (+http://search.msn.com/msnbot.htm)" 以上是從access_log擷取一部分的內容 再透過以下指令,就能計算出網站流量 cat /網站日誌檔目錄/access_log | awk '{SUM+=$10}END{print SUM/1024/1024}' 得出的流量數據是 0.054MB,因為流量數據是byte單位所以要除2次1024byte(56594/1024/1024) 其中 awk 是一種處理資料且可產生報告的語言,功能相當強大:而處理的單位是一行一行的比對處理,當符合awk的條件