本文版權歸做者和博客園共有,歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接,博主爲石山園,博客地址爲 http://www.cnblogs.com/shishanyuan 。該系列課程是應邀實驗樓整理編寫的,這裏須要贊一下實驗樓提供了學習的新方式,能夠邊看博客邊上機實驗,課程地址爲 https://www.shiyanlou.com/courses/237javascript
【注】該系列所使用到安裝包、測試數據和代碼都可在百度網盤下載,具體地址爲 http://pan.baidu.com/s/10PnDs,下載該PDF文件php
部署節點操做系統爲CentOS,防火牆和SElinux禁用,建立了一個shiyanlou用戶並在系統根目錄下建立/app目錄,用於存放Hadoop等組件運行包。由於該目錄用於安裝hadoop等組件程序,用戶對shiyanlou必須賦予rwx權限(通常作法是root用戶在根目錄下建立/app目錄,並修改該目錄擁有者爲shiyanlou(chown –R shiyanlou:shiyanlou /app)。css
Hadoop搭建環境:html
l 虛擬機操做系統: CentOS6.6 64位,單核,1G內存java
l JDK:1.7.0_55 64位mysql
l Hadoop:1.1.2linux
chukwa 是一個開源的用於監控大型分佈式系統的數據收集系統。這是構建在 hadoop 的 hdfs 和 map/reduce 框架之上的,繼承了 hadoop 的可伸縮性和魯棒性。Chukwa 還包含了一個強大和靈活的工具集,可用於展現、監控和分析已收集的數據。web
其中主要的組件爲: sql
1. agents :負責採集最原始的數據,併發送給 collectors 數據庫
2. adaptor :直接採集數據的接口和工具,一個 agent 能夠管理多個 adaptor 的數據採集
3. collectors :負責收集 agents 收送來的數據,並定時寫入集羣中
4. map/reduce jobs :定時啓動,負責把集羣中的數據分類、排序、去重和合並
5. HICC :負責數據的展現
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 代碼就能夠了
能夠到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
編輯/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
首先把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 ./
把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
打開$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
打開$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使之生效
打開$CHUKWA_HOME/etc/chukwa/collectors文件
cd /app/chukwa-0.6.0/etc/chukwa/
sudo vi collectors
該配置指定哪臺機器運行收集器進程,例如修改成http://hadoop:8080,指定hadoop機器運行收集器進程
打開$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
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端口
打開$CHUKWA_HOME/etc/chukwa/agents文件
cd /app/chukwa-0.6.0/etc/chukwa/
sudo vi agents
編輯$CHUKWA_CONF_DIR/agents文件,使用hadoop
打開$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>
分別啓動以下進程:
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
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
啓動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