Chukwa

Apache 的開源項目 hadoop, 作為一個分散式存儲和計算系統,已經被業界廣泛套用。很多大型企業都有了各自基於 hadoop 的套用和相關擴展。當 1000+ 以上個節點的 hadoop 集群變得常見時,集群自身的相關信息如何收集和分析呢?針對這個問題, Apache 同樣提出了相應的解決方案,那就是 chukwa。

chukwa 的官方網站是這樣描述自己的: chukwa 是一個開源的用於監控大型分散式系統的數據收集系統。這是構建在 hadoop 的 hdfs 和 map/reduce 框架之上的,繼承了 hadoop 的可伸縮性和健壯性。Chukwa 還包含了一個強大和靈活的工具集,可用於展示、監控和分析已收集的數據。 在一些網站上,甚至聲稱 chukwa 是一個“日誌處理/分析的full stack solution”。 說了這么多,你心動了嗎?

基本介紹

  • 外文名:Chukwa
  • 類型:數據收集系統
  • 用途:監控大型分散式系統
  • 特點:可伸縮性和魯棒性
基本介紹,基本架構,相關設計,

基本介紹

Apache 的開源項目 hadoop, 作為一個分散式存儲和計算系統,已經被業界廣泛套用。很多大型企業都有了各自基於 hadoop 的套用和相關擴展。當 1000+ 以上個節點的 hadoop 集群變得常見時,集群自身的相關信息如何收集和分析呢?針對這個問題, Apache 同樣提出了相應的解決方案,那就是 chukwa。
chukwa 的官方網站是這樣描述自己的: chukwa 是一個開源的用於監控大型分散式系統的數據收集系統。這是構建在 hadoop 的 hdfs 和 map/reduce 框架之上的,繼承了 hadoop 的可伸縮性和魯棒性。Chukwa 還包含了一個強大和靈活的工具集,可用於展示、監控和分析已收集的數據。
在一些網站上,甚至聲稱 chukwa 是一個“日誌處理/分析的full stack solution”。
說了這么多,你心動了嗎?
我們先來看看 chukwa 是什麼樣子的:
Chukwa
chukwa結構圖
chukwa 不是什麼
1. chukwa 不是一個單機系統. 在單個節點部署一個 chukwa 系統,基本沒有什麼用處. chukwa 是一個構建在 hadoop 基礎上的分散式日誌處理系統.換言之,在搭建 chukwa 環境之前,你需要先構建一個 hadoop 環境,然後在 hadoop 的基礎上構建 chukwa 環境,這個關係也可以從稍後的 chukwa 架構圖上看出來.這也是因為 chukwa 的假設是要處理的數據量是在 T 級別的.
2. chukwa 不是一個實時錯誤監控系統.在解決這個問題方面, ganglia,nagios 等等系統已經做得很好了,這些系統對數據的敏感性都可以達到秒級. chukwa 分析的是數據是分鐘級別的,它認為像集群的整體 cpu 使用率這樣的數據,延遲幾分鐘拿到,不是什麼問題.
3. chukwa 不是一個封閉的系統.雖然 chukwa 自帶了許多針對 hadoop 集群的分析項,但是這並不是說它只能監控和分析 hadoop.chukwa 提供了一個對大數據量日誌類數據採集、存儲、分析和展示的全套解決方案和框架,在這類數據生命周期的各個階段, chukwa 都提供了解決方案,這一點也可以從它的架構中看出來.
chukwa 是什麼
上一節說了很多 chukwa 不是什麼,下面來看下 chukwa 具體是乾什麼的一個系統呢?
具體而言, chukwa 致力於以下幾個方面的工作:
1. 總體而言, chukwa 可以用於監控大規模(2000+ 以上的節點, 每天產生數據量在T級別) hadoop 集群的整體運行情況並對它們的日誌進行分析
2. 對於集群的用戶而言: chukwa 展示他們的作業已經運行了多久,占用了多少資源,還有多少資源可用,一個作業是為什麼失敗了,一個讀寫操作在哪個節點出了問題.
3. 對於集群的運維工程師而言: chukwa 展示了集群中的硬體錯誤,集群的性能變化,集群的資源瓶頸在哪裡.
4. 對於集群的管理者而言: chukwa 展示了集群的資源消耗情況,集群的整體作業執行情況,可以用以輔助預算和集群資源協調.
5. 對於集群的開發者而言: chukwa 展示了集群中主要的性能瓶頸,經常出現的錯誤,從而可以著力重點解決重要問題.

基本架構

chukwa 的整體結構圖是下面這個樣子的:
Chukwa
Chukwa
其中主要的部件為:
1. agents : 負責採集最原始的數據,並傳送給 collectors
2. adaptor : 直接採集數據的接口和工具,一個 agent 可以管理多個 adaptor 的數據採集
3. collectors 負責收集 agents 收送來的數據,並定時寫入集群中
4. map/reduce jobs 定時啟動,負責把集群中的數據分類、排序、去重和合併
5. HICC 負責數據的展示

相關設計

adaptors 和 agents
在 每個數據的產生端(基本上是集群中每一個節點上), chukwa 使用一個 agent 來採集它感興趣的數據,每一類數據通過一個 adaptor 來實現, 數據的類型(DataType?)在相應的配置中指定. 默認地, chukwa 對以下常見的數據來源已經提供了相應的 adaptor : 命令行輸出、log 檔案和 httpSender等等. 這些 adaptor 會定期運行(比如每分鐘讀一次 df 的結果)或事件驅動地執行(比如 kernel 打了一條錯誤日誌). 如果這些 adaptor 還不夠用,用戶也可以方便地自己實現一個 adaptor 來滿足需求。
為防止數據採集端的 agent 出現故障,chukwa 的 agent 採用了所謂的 ‘watchdog’ 機制,會自動重啟終止的數據採集進程,防止原始數據的丟失。
另一方面, 對於重複採集的數據, 在 chukwa 的數據處理過程中,會自動對它們進行去重. 這樣,就可以對於關鍵的數據在多台機器上部署相同的 agent,從而實現容錯的功能.
collectors
agents 採集到的數據,是存儲到 hadoop 集群上的. hadoop 集群擅長於處理少量大檔案,而對於大量小檔案的處理則不是它的強項,針對這一點,chukwa 設計了 collector 這個角色,用於把數據先進行部分合併,再寫入集群,防止大量小檔案的寫入。
另 一方面,為防止 collector 成為性能瓶頸或成為單點,產生故障, chukwa 允許和鼓勵設定多個 collector, agents 隨機地從 collectors 列表中選擇一個 collector 傳輸數據,如果一個 collector 失敗或繁忙,就換下一個 collector. 從而可以實現負載的均衡,實踐證明,多個 collector 的負載幾乎是平均的.
demux 和 archive
放在集群上的數據,是通過 map/reduce 作業來實現數據分析的. 在 map/reduce 階段, chukwa 提供了 demux 和 archive 任務兩種內置的作業類型.
demux 作業負責對數據的分類、排序和去重. 在 agent 一節中,我們提到了數據類型(DataType?)的概念.由 collector 寫入集群中的數據,都有自己的類型. demux 作業在執行過程中,通過數據類型和配置檔案中指定的數據處理類,執行相應的數據分析工作,一般是把非結構化的數據結構化,抽取中其中的數據屬性.由於 demux 的本質是一個 map/reduce 作業,所以我們可以根據自己的需求制定自己的 demux 作業,進行各種複雜的邏輯分析. chukwa 提供的 demux interface 可以用 java 語言來方便地擴展.
而 archive 作業則負責把同類型的數據檔案合併,一方面保證了同一類的數據都在一起,便於進一步分析, 另一方面減少檔案數量, 減輕 hadoop 集群的存儲壓力。
dbadmin
放在集群上的數據,雖然可以滿足數據的長期存儲和大數據量計算需求,但是不便於展示.為此, chukwa 做了兩方面的努力:
1. 使用 mdl 語言,把集群上的數據抽取到 mysql 資料庫中,對近一周的數據,完整保存,超過一周的數據,按數據離當前時間長短作稀釋,離當前越久的數據,所保存的數據時間間隔越長.通過 mysql 來作數據源,展示數據.
2. 使用 hbase 或類似的技術,直接把索引化的數據在存儲在集群上
chukwa 0.4.0 版本為止, chukwa 都是用的第一種方法,但是第二種方法更優雅也更方便一些.
hicc
hicc 是 chukwa 的數據展示端的名字.在展示端, chukwa 提供了一些默認的數據展示 widget,可以使用“列表”、“曲線圖”、“多曲線圖”、“柱狀圖”、“面積圖式展示一類或多類數據,給用戶直觀的數據趨勢展示。而且,在 hicc 展示端,對不斷生成的新數據和歷史數據,採用 robin 策略,防止數據的不斷增長增大伺服器壓力,並對數據在時間軸上“稀釋”,可以提供長時間段的數據展示
從 本質上, hicc 是用 jetty 來實現的一個 web 服務端,內部用的是 jsp 技術和 javascript 技術.各種需要展示的數據類型和頁面的局都可以通過簡直地拖拽方式來實現,更複雜的數據展示方式,可以使用 sql 語言組合出各種需要的數據.如果這樣還不能滿足需求,不用怕,動手修改它的 jsp 代碼就可以了.
其它數據接口
如果對原始數據還有新的需要,用戶還可以通過 map/reduce 作業或 pig 語言直接訪問集群上的原始數據,以生成所需要的結果。chukwa 還提供了命令行的接口,可以直接訪問到集群上數據。
默認數據支持
對 於集群各節點的cpu使用率、記憶體使用率、硬碟使用率、集群整體的 cpu 平均使用率、集群整體的記憶體使用率、集群整體的存儲使用率、集群檔案數變化、作業數變化等等 hadoop 相關數據,從採集到展示的一整套流程, chukwa 都提供了內建的支持,只需要配置一下就可以使用.可以說是相當方便的.
可以看出,chukwa 從數據的產生、收集、存儲、分析到展示的整個生命周期都提供了全面的支持。

相關詞條

熱門詞條

聯絡我們