Hadoop入門進階課程13--Chukwa介紹與安裝部署
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,博主為石山園,博客地址為 http://www.rzrgm.cn/shishanyuan 。該系列課程是應邀實驗樓整理編寫的,這里需要贊一下實驗樓提供了學習的新方式,可以邊看博客邊上機實驗,課程地址為 https://www.shiyanlou.com/courses/237
【注】該系列所使用到安裝包、測試數據和代碼均可在百度網盤下載,具體地址為 http://pan.baidu.com/s/10PnDs,下載該PDF文件
1、搭建環境
部署節點操作系統為CentOS,防火墻和SElinux禁用,創建了一個shiyanlou用戶并在系統根目錄下創建/app目錄,用于存放Hadoop等組件運行包。因為該目錄用于安裝hadoop等組件程序,用戶對shiyanlou必須賦予rwx權限(一般做法是root用戶在根目錄下創建/app目錄,并修改該目錄擁有者為shiyanlou(chown –R shiyanlou:shiyanlou /app)。
Hadoop搭建環境:
l 虛擬機操作系統: CentOS6.6 64位,單核,1G內存
l JDK:1.7.0_55 64位
l Hadoop:1.1.2
2、Chukwa介紹
chukwa 是一個開源的用于監控大型分布式系統的數據收集系統。這是構建在 hadoop 的 hdfs 和 map/reduce 框架之上的,繼承了 hadoop 的可伸縮性和魯棒性。Chukwa 還包含了一個強大和靈活的工具集,可用于展示、監控和分析已收集的數據。
2.1 Chukwa架構
其中主要的組件為:
1. agents :負責采集最原始的數據,并發送給 collectors
2. adaptor :直接采集數據的接口和工具,一個 agent 可以管理多個 adaptor 的數據采集
3. collectors :負責收集 agents 收送來的數據,并定時寫入集群中
4. map/reduce jobs :定時啟動,負責把集群中的數據分類、排序、去重和合并
5. HICC :負責數據的展示
2.2 組件說明
l adaptors 和 agents
在每個數據的產生端(基本上是集群中每一個節點上), chukwa 使用一個 agent 來采集它感興趣的數據,每一類數據通過一個 adaptor 來實現, 數據的類型(DataType?)在相應的配置中指定. 默認地, chukwa 對以下常見的數據來源已經提供了相應的 adaptor : 命令行輸出、log 文件和 httpSender等等. 這些 adaptor 會定期運行(比如每分鐘讀一次 df 的結果)或事件驅動地執行(比如 kernel 打了一條錯誤日志). 如果這些 adaptor 還不夠用,用戶也可以方便地自己實現一個 adaptor 來滿足需求。
為防止數據采集端的 agent 出現故障,chukwa 的 agent 采用了所謂的 ‘watchdog’ 機制,會自動重啟終止的數據采集進程,防止原始數據的丟失。另一方面, 對于重復采集的數據, 在 chukwa 的數據處理過程中,會自動對它們進行去重. 這樣,就可以對于關鍵的數據在多臺機器上部署相同的 agent,從而實現容錯的功能.
l collectors
agents 采集到的數據,是存儲到 hadoop 集群上的. hadoop 集群擅長于處理少量大文件,而對于大量小文件的處理則不是它的強項,針對這一點,chukwa 設計了 collector 這個角色,用于把數據先進行部分合并,再寫入集群,防止大量小文件的寫入。
另一方面,為防止 collector 成為性能瓶頸或成為單點,產生故障, chukwa 允許和鼓勵設置多個 collector, agents 隨機地從collectors 列表中選擇一個collector 傳輸數據,如果一個 collector 失敗或繁忙,就換下一個collector。從而可以實現負載的均衡,實踐證明,多個 collector 的負載幾乎是平均的.
l demux 和 archive
放在集群上的數據,是通過 map/reduce 作業來實現數據分析的. 在 map/reduce 階段, chukwa 提供了 demux 和 archive 任務兩種內置的作業類型.
demux 作業負責對數據的分類、排序和去重. 在 agent 一節中,我們提到了數據類型(DataType)的概念.由 collector 寫入集群中的數據,都有自己的類型. demux 作業在執行過程中,通過數據類型和配置文件中指定的數據處理類,執行相應的數據分析工作,一般是把非結構化的數據結構化,抽取中其中的數據屬性.由于 demux 的本質是一個 map/reduce 作業,所以我們可以根據自己的需求制定自己的 demux 作業,進行各種復雜的邏輯分析. chukwa 提供的 demux interface 可以用 java 語言來方便地擴展.
而 archive 作業則負責把同類型的數據文件合并,一方面保證了同一類的數據都在一起,便于進一步分析, 另一方面減少文件數量, 減輕 hadoop 集群的存儲壓力。
l dbadmin
放在集群上的數據,雖然可以滿足數據的長期存儲和大數據量計算需求,但是不便于展示.為此, chukwa 做了兩方面的努力:
1. 使用 mdl 語言,把集群上的數據抽取到 mysql 數據庫中,對近一周的數據,完整保存,超過一周的數據,按數據離當前時間長短作稀釋,離當前越久的數據,所保存的數據時間間隔越長.通過 mysql 來作數據源,展示數據.
2. 使用 hbase 或類似的技術,直接把索引化的數據在存儲在集群上
到 chukwa 0.4.0 版本為止, chukwa 都是用的第一種方法,但是第二種方法更優雅也更方便一些.
l hicc
hicc 是 chukwa 的數據展示端的名稱。在展示端,chukwa 提供了一些默認的數據展示 widget,可以使用“列表”、“曲線圖”、“多曲線圖”、“柱狀圖”、“面積圖式展示一類或多類數據,給用戶直觀的數據趨勢展示。而且,在 hicc 展示端,對不斷生成的新數據和歷史數據,采用 robin 策略,防止數據的不斷增長增大服務器壓力,并對數據在時間軸上“稀釋”,可以提供長時間段的數據展示
從本質上, hicc 是用 jetty 來實現的一個 web 服務端,內部用的是 jsp 技術和 javascript 技術.各種需要展示的數據類型和頁面的局都可以通過簡直地拖拽方式來實現,更復雜的數據展示方式,可以使用 sql 語言組合出各種需要的數據.如果這樣還不能滿足需求,不用怕,動手修改它的 jsp 代碼就可以了
3、安裝部署Chukwa
3.1 Chukwa部署過程
3.1.1 下載Chukwa
可以到apache基金chukwa官網http://chukwa.apache.org/,選擇鏡像下載地址http://mirrors.hust.edu.cn/apache/chukwa/下載一個穩定版本,如下圖所示下載chukwa-0.6.0.tar.gz
也可以在/home/shiyanlou/install-pack目錄中找到該安裝包,解壓該安裝包并把該安裝包復制到/app目錄中
cd /home/shiyanlou/install-pack
tar -xzf chukwa-0.6.0.tar.gz
mv chukwa-0.6.0 /app/chukwa-0.6.0
3.1.2 設置/etc/profile參數
編輯/etc/profile文件,聲明chukwa的home路徑和在path加入bin/sbin的路徑:
export CHUKWA_HOME=/app/chukwa-0.6.0
export CHUKWA_CONF_DIR=$CHUKWA_HOME/etc/chukwa
export PATH=$PATH:$CHUKWA_HOME/bin:$CHUKWA_HOME/sbin
編譯配置文件/etc/profile,并確認生效
source /etc/profile
echo $PATH
3.1.3 將Chukwa文件復制到Hadoop中
首先把hadoop配置目錄中的log4j.properties和hadoop-metrics2.properties文件改名備份,然后把chukwa配置目錄中的log4j.properties和hadoop-metrics2.properties文件復制到hadoop配置目錄中。
cd /app/hadoop-1.1.2/conf
mv log4j.properties log4j.properties.bak
mv hadoop-metrics2.properties hadoop-metrics2.properties.bak
cp /app/chukwa-0.6.0/etc/chukwa/hadoop-log4j.properties ./log4j.propertie
cp /app/chukwa-0.6.0/etc/chukwa/hadoop-metrics2.properties ./
3.1.4 將Chukwa中jar復制到Hadoop中
把chukwa中的chukwa-0.6.0-client.jar和json-simple-1.1.jar兩個jar文件復制到hadoop中lib目錄下:
cd /app/chukwa-0.6.0/share/chukwa
cp chukwa-0.6.0-client.jar /app/hadoop-1.1.2/lib
cp lib/json-simple-1.1.jar /app/hadoop-1.1.2/lib
ls /app/hadoop-1.1.2/lib
3.1.5 修改chukwa-config.sh
打開$CHUKWA_HOME/libexec/chukwa-config.sh文件
cd /app/chukwa-0.6.0/libexec
sudo vi chukwa-config.sh
將export CHUKWA_HOME='pwd -P ${CHUKWA_LIBEXEC}/..' 改為chukwa的安裝目錄:
export CHUKWA_HOME=/app/chukwa-0.6.0
3.1.6 修改chukwa-env.sh
打開$CHUKWA_HOME/etc/chukwa/chukwa-env.sh文件
cd /app/chukwa-0.6.0/etc/chukwa/
sudo vi chukwa-env.sh
配置JAVA_HOME和HADOOP_CONF_DIR等變量
# The java implementation to use. Required.
export JAVA_HOME=/app/lib/jdk1.7.0_55/
# Hadoop Configuration directory
export HADOOP_CONF_DIR=/app/hadoop-1.1.2/conf
編譯配置文件chukwa-env.sh使之生效
3.1.7 修改collectors文件
打開$CHUKWA_HOME/etc/chukwa/collectors文件
cd /app/chukwa-0.6.0/etc/chukwa/
sudo vi collectors
該配置指定哪臺機器運行收集器進程,例如修改為http://hadoop:8080,指定hadoop機器運行收集器進程
3.1.8 修改initial_adaptors文件
打開$CHUKWA_HOME/etc/chukwa/initial_adaptors文件
cd /app/chukwa-0.6.0/etc/chukwa/
sudo vi initial_adaptors
可以使用默認配置(即不需要修改)
為了更好顯示測試效果這里添加新建的監控服務,監控/app/chukwa-0.6.0/目錄下的testing文件變化情況
add filetailer.FileTailingAdaptor FooData /app/chukwa-0.6.0/testing 0
建立被監控testing文件
cd /app/chukwa-0.6.0
touch testing
3.1.9 修改chukwa-collector-conf.xml文件
1. 打開$CHUKWA_HOME/etc/chukwa/chukwa-collector-conf.xml文件
cd /app/chukwa-0.6.0/etc/chukwa/
sudo vi chukwa-collector-conf.xml
2. 啟用chukwaCollector.pipeline參數
<property>
<name>chukwaCollector.pipeline</name>
<value>org.apache.hadoop.chukwa.datacollection.writer.SocketTeeWriter,org.apache.hadoop.chukwa.datacollection.writer.SeqFileWriter</value>
</property>
3. 注釋hbase的參數(如果要使用hbase則不需要注釋)
4. 指定HDFS的位置為 hdfs://hadoop1:9000/chukwa/logs
<property>
<name>writer.hdfs.filesystem</name>
<value>hdfs://hadoop:9000</value>
<description>HDFS to dump to</description>
</property>
<property>
<name>chukwaCollector.outputDir</name>
<value>/chukwa/logs/</value>
<description>Chukwa data sink directory</description>
</property>
5. 確認默認情況下collector監聽8080端口
3.1.10 配置Agents文件
打開$CHUKWA_HOME/etc/chukwa/agents文件
cd /app/chukwa-0.6.0/etc/chukwa/
sudo vi agents
編輯$CHUKWA_CONF_DIR/agents文件,使用hadoop
3.1.11 修改chukwa-agent-conf.xml文件
打開$CHUKWA_HOME/etc/chukwa/chukwa-agent-conf.xml文件
cd /app/chukwa-0.6.0/etc/chukwa/
sudo vi chukwa-agent-conf.xml
$CHUKWA_CONF_DIR/chukwa-agent-conf.xml文件維護了代理的基本配置信息,其中最重要的屬性是集群名,用于表示被監控的節點,這個值被存儲在每一個被收集到的塊中,用于區分不同的集群,如設置cluster名稱:cluster="chukwa" ,使用默認值即可:
<property>
<name>chukwaAgent.tags</name>
<value>cluster="chukwa"</value>
<description>The cluster's name for this agent</description>
</property>
3.2 Chukwa部署驗證
3.2.1 啟動Chukwa
分別啟動如下進程:
1. 啟動hadoop
cd /app/hadoop-1.1.2/bin
./start-all.sh
jps
2. 啟動chukwa:
cd /app/chukwa-0.6.0/sbin
./start-chukwa.sh
./start-collectors.sh
./start-data-processors.sh
使用jps查看啟動狀態:
使用telnet查看agent啟動情況
telnet hadoop 9093
telnet>list
3.2.2 準備日志數據文件和添加數據腳本
1. 在/app/chukwa-0.6.0/testdata/目錄下創建weblog文件,內容如下:
cd /app/chukwa-0.6.0
mkdir testdata
cd testdata
vi weblog
數據如下:
220.181.108.151 [31/Jan/2012:00:02:32] "GET /home.php?mod=space"
208.115.113.82 [31/Jan/2012:00:07:54] "GET /robots.txt"
220.181.94.221 [31/Jan/2012:00:09:24] "GET /home.php?mod=spacecp"
112.97.24.243 [31/Jan/2012:00:14:48] "GET /data/common.css?AZH HTTP/1.1"
112.97.24.243 [31/Jan/2012:00:14:48] "GET /data/auto.css?AZH HTTP/1.1"
112.97.24.243 [31/Jan/2012:00:14:48] "GET /data/display.css?AZH HTTP/1.1"
220.181.108.175 [31/Jan/2012:00:16:54] "GET /home.php"
220.181.94.221 [31/Jan/2012:00:19:15] "GET /?72 HTTP/1.1" 200 13614 "-"
218.5.72.173 [31/Jan/2012:00:21:39] "GET /forum.php?tid=89 HTTP/1.0"
65.52.109.151 [31/Jan/2012:00:24:47] "GET /robots.txt HTTP/1.1"
220.181.94.221 [31/Jan/2012:00:26:12] "GET /?67 HTTP/1.1"
218.205.245.7 [31/Jan/2012:00:27:16] "GET /forum-58-1.html HTTP/1.0"
2. 在/app/chukwa-0.6.0/testdata/目錄下創建weblogadd.sh執行腳本,該腳本執行往3.3.11創建/app/chukwa-0.6.0/testing文件添加weblog數據:
cd /app/chukwa-0.6.0/testdata/
vi weblogadd.sh
內容為:
cat /app/chukwa-0.6.0/testdata/weblog >> /app/chukwa-0.6.0/testing
3.2.3 查看HDFS的文件
啟動chukwa的agents和collector,然后運行weblogadd.sh腳本,往weblog文件中添加數據,最后查看HDFS的/chukwa/logs目錄下監聽生成的數據文件
cd /app/chukwa-0.6.0/testdata
sudo sh ./weblogadd.sh
hadoop fs -ls /chukwa/logs






















浙公網安備 33010602011771號