1.安装好hadoop,确保hadoop运行无误(我hadoop版本为0.20.2)
2.去官网上下载chukwa 0.4.0版本:
http://www.apache.org/dyn/closer.cgi/hadoop/chukwa/chukwa-0.4.0
3.下载后别急着分发到各个节点,因为代码中存在着一个bug,这个bug会影响后面hicc的显示,所以需要经过修改编译以后再将其分发到各个节点上比较好!修改编译具体过程如下:
(1)源代码中找到ViewStore.java
(package org.apache.hadoop.chukwa.datastore)
在函数JSONArray list(String uid) 中,大概210行左右修改:
FileStatus[] fstatus = fs.listStatus(viewFile);
if(fstatus!=null) {
for(int i=0;i<fstatus.length;i++) {
+ if(!fstatus[i].getPath().getName().endsWith(".view")) {
+ continue;
+ }
long size = fstatus[i].getLen();
FSDataInputStream viewStream = fs.open(fstatus[i].getPath());
byte[] buffer = new byte[(int)size];
(2)然后在$CHUKWA_HOME/输入ant,重新编译
会在$CHUKWA_HOME/build/目录下得到编译后的文件
(3)将$CHUKWA_HOME/build/chukwa-core-0.4.0.jar 拷贝到$CHUKWA_HOME,将$CHUKWA_HOME/build/chukwa.war拷贝到$CHUKWA_HOME/webapps当中
4.配置各个节点的环境变量,最好在~/.bash_profile当中配好,下面是我的配置:
export JAVA_HOME=/usr/java/jdk1.6.0_16
export JRE_HOME=/usr/java/jdk1.6.0_16/jre
export HADOOP_VERSION=0.20.2
export HADOOP_HOME=/home/hadoop/hadoop-${HADOOP_VERSION}
export CHUKWA_HOME="/home/zhangliuhang/chukwa/"
export ANT_HOME=/usr/ant/ant-1.7.0
export PATH=.:$PATH: $JAVA_HOME/bin:$HADOOP_HOME/bin:$CHUKWA_HOME/bin:$ANT_HOME/bin
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib:$ANT_HOME/lib:$HADOOP_HOME/hadoop-${HADOOP_VERSION}-core.jar:$HADOOP_HOME/lib/*:$HADOOP_HOME/lib/commons-logging-1.0.4.jar:$ANT_HOME/junit-3.8.1.jar:$HADOOP_HOME/ivy/ivy-2.0.0-rc2.jar:$HADOOP_HOME/lib/commons-logging-api-1.0.4.jar:$HADOOP_HOME/lib/log4j-1.2.15.jar:$HADOOP_HOME/lib/hadoop-lzo-0.4.8.jar
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib:/home/hadoop/hadoop-0.20.2/lib/native/Linux-amd64-64
export JAVA_LIBRARY_PATH=/home/hadoop/hadoop-0.20.2/lib/native/Linux-amd64-64
export javalibpath=/home/hadoop/hadoop-0.20.2/lib/native/Linux-amd64-64
5.配置$CHUKWA_HOME/conf/chukwa-env.sh文件,其中的我的配置如下:(我只列出了没有被我注释掉的)
export JAVA_HOME=/usr/java/jdk1.6.0_16
export HADOOP_HOME="/home/hadoop/hadoop-0.20.2"
export HADOOP_CONF_DIR="/home/hadoop/hadoop-0.20.2/conf/"
export HADOOP_JAR=${HADOOP_HOME}/hadoop-0.20.2-core.jar
export chukwaRecordsRepository="/chukwa/repos/"
export CHUKWA_DATA_DIR="${CHUKWA_HOME}/data"
export CHUKWA_IDENT_STRING=chukwa
export JAVA_PLATFORM= Linux-amd64-64
export JAVA_LIBRARY_PATH=${HADOOP_HOME}/lib/native/${JAVA_PLATFORM}
export JDBC_DRIVER=com.mysql.jdbc.Driver
export JDBC_URL_PREFIX=jdbc:mysql://
export CHUKWA_HICC_MIN_iMEM=300M
export CHUKWA_HICC_MAX_MEM=300M
6.将必要的库从$CHUKWA_HOME/及$CHUKWA_HOME/lib拷贝到$HADOOP_HOME/lib当中,我拷贝的库有:
Chukwa-agent-0.4.0.jar,
chukwa-hadoop-0.4.0-client.jar,
tools-0.4.0.jar,json.jar
7.配置Agent
(1)配置$CHUKWA_HOME/conf/initial_adaptors
cp initial_adaptors.template initial_adaptors
(2)配置$CHUKWA_HOME/conf/chukwa-agent-conf.xml
(我只列出我修改的地方)
<property>
<name>chukwaAgent.tags</name>
<value>cluster="zlhchukwa"</value>
<description>The cluster's name for this agent</description>
</property>
(3)配置$CHUKWA_HOME/conf/agents文件,我的配置如下所示:
gd115
gd116
gd117
(4)配置$CHUKWA_HOME/conf/Collectors文件,我的配置如下:
http://10.10.104.116:9927/
(注:从这个地方可以看出来Collectors和agents是通过http进行联系的,此处最好要用ip,不要用其他代号,因为可能访问不到)
(5)测试启动agents看每个节点上的agent否启动成功
执行$CHUKWA_HOME/bin/ start-agents.sh
此时应该会在各个节点上通过jps可以看到有一个进程叫做ChukwaAgent,
可以试着telnet localhost 9093 然后list看一下各个adaptor是否启动
(6)关闭agents
执行$CHUKWA_HOME/bin/stop-agents.sh,
假如关闭不了ChukwaAgent进程可以修改$CHUKWA_HOME/bin/chukwa文件
找到关键字kill 然后将后面的数值改成kill -9
(7)在关闭hadoop的状态下,将$CHUKWA_HOME/conf/hadoop-logs4j.properties覆盖
$HADOOP_HOME/conf/log4j.properties
修改$CHUKWA_HOME/conf/hadoop-metrics.properties中的@TODO-CHUKWA_LOG_DIR@改为:
/home/zhangliuhang/chukwa/logs/,然后将该文件覆盖掉
$HADOOP_HOME/conf/hadoop-metrics.properties
在做这一步的时候最好将原文件进行备份
(正确的启动顺序是先启动hadoop,再启动collectors,然后才启动agents,在做完第(6)小步后,假如此时启动hadoop,会发现他可能报错,假如只出现以下出错信息:
Error initializing ChukwaClient with list of currently registered adaptors,clearing our local list of adaptors,可以置之不理的,但是其他错误不行)
8.配置Collectors
(1)配置$CHUKWA_HOME/conf/chukwa-collector-conf.xml文件,我的配置如下:
(我只给出了我修改的部分)
<property>
<name>writer.hdfs.filesystem</name>
<value>hdfs://gd115:9989/</value>
<description>HDFS to dump to</description>
</property>
(注意,此处配置的信息应该和$HADOOP_HOME/conf/core-site.xml当中的fs.default.name内容一致,因为collectors需要将从agents收集到的信息存储到hdfs上面去)
<property>
<name>chukwaCollector.outputDir</name>
<value>/chukwa/logs/</value>
<description>Chukwa data sink directory</description>
</property>
(注意,此配置强烈要求不要更改,这个目录是collectors写到hdfs上面的目录,假如这个目录变了,那么会导致后面的一些进程找不到hdfs上/chukwa/logs当中的信息,从而无法生成分析的数据流,当然假如对chukwa熟悉的人也可以改,但是我不建议这么做!)
<property>
<name>chukwaCollector.http.port</name>
<value>9927</value>
<description>The HTTP port number the collector will listen on</description>
</property>
(注意,这个地方的端口号要和collectors文件当中的保持一致!)
(2)测试collectors,agents,hadoop
先启动hadoop,在动collectors,最后启动agent,命令如下:
$HADOOP_HOME/bin/start-all.sh
(假如只是报”Error initializing ChukwaClient with list of currently registered adaptors, clearing our local list of adaptors”这个错误可以不管)
$CHUKWA_HOME/bin/start-collectors.sh
$CHUKWA_HOME/bin/start-agents.sh
检查四个地方:
(a)通过jps看是否有相应的节点上是否有相应的进程,其中agent进程对应ChukwaAgent,collector进程对应CollectorStub
(b)查看$CHUKWA_HOME/logs/agent.log及$CHUKWA_HOME/logs/collector.log,看他们是否正常
(c)通过网络web访问查看是否显示正常,结合我之前的配置,检查collector时网址中输入http://10.10.104.116:9927/可以看到显示:”Chukwa servlet running”,若检查agent,在网址中输入http://10.10.10.104.116:9093
(d)查看hdfs上是否生成了相应的文件$HADOOP_HOME/bin/hadoop dfs -ls /理论上应该hdfs上会有/chukwa/logs目录生成
9.配置Demux
对于这个不要配置什么直接运行就好了,选择一个节点,我是在非namenode上运行的如下命令:
$CHUKWA_HOME/bin/start-data-processors.sh
(注意这个时候,hadoop,collectors,agents已经启动起来了)
开始运行后的直接效果是jps多出3个进程,分别是PostProcessorManager,ChukwaArchiveManager,Demuxmanager
同时通过查看hdfs,可以发现/chukwa/目录下多了好几目录,分别是/chukwa/archivesProcessing, /chukwa/dataSinkArchives, /chukwa/demuxProcessing,随着时间的增加,数据分析进行的深入,会在hdfs上的/chukwa/目录下生成更多的目录,最终目录结构同http://incubator.apache.org/chukwa/docs/r0.4.0/dataflow.html
10.配置数据库
Chukwa0.4.0是通过将分析好的数据从hdfs上下载到本地mysql数据库中,然后通过hicc命令来进行图形化显示的,而对于chukwa0.5.0是通过hbase而非本地的mysql来处理的,所以对于chukwa0.4.0,我们还得装mysql数据库,我个人认为,安装数据库的时候不需要在所有的节点上安装,这里我选择的是同运行的Demux是同一个节点,我最终的hicc也是单独运行在这个单独的节点上。
(1)从mysql官网上下载mysql
http://dev.mysql.com/downloads/mysql/5.1.html#downloads这个网上可以下载到mysql-5.6.3-m6-linux2.6-x86_64.tar.gz,
(2)将该文件解压到$CHUKWA_HOME/opt/目录下,后面我用$MYSQL_HOME代表mysql所在目录
(3)我给系统添加一个mysql用户,并给予root权限,操作如下:
useradd mysql
chmod +w /etc/passwd
vi /etc/passwd (对该文件mysql用户修个为root组,即,后面的id都改为了0)
chmod –w /etc/passwd
(4)执行以下命令:
cd $MYSQL_HOME
./scripts/mysql_install_db
./bin/mysqld_safe &
./bin/mysqladmin –u root create zlhchukwa
./bin/mysql –u root zlhchukwa<$CHUKWA_HOME/conf/database_cerate_tables.sql
(此时可以进入到数据库当中检查是否在数据库当中建了一个叫做的zlhchukwa的database,并且在该database当中是否产生了一些tables)
(5)配置mysql replication
$MYSQL_HOME/mysql –u root –p
Enter password:
GRANT REPLICATION SLAVE ON *.* TO 'root'@'%' IDENTIFIED BY '';
FLUSH PRIVILEGES;
(事实上,我并不知道那个username域和password域该填些什么,所以就先这么填这先)
(6)配置$CHUKWA_HOME/conf/jdbc.conf文件,
<clustername>=jdbc:mysql://localhost:3306/<clustername>?user=root
我的配置内容如下:
zlhchukwa=jdbc:mysql://localhost:3306/zlhchukwa?user=root
11.启动进程将数据从hdfs下载到数据库
在装有数据库的那个非namenode节点上,运行$CHUKWA_HOME/bin/dbAdmin.sh
(注:在chukwa0.4.0当中是没有这个脚本的,我是从chukwa0.3.0的bin目录上面弄过来的)
该进程,似乎是每5分钟显示并操作一次,我们放他在后台运行就好
12.运行hicc进行图形化查看
$CHUKWA_HOME/bin/chukwa hicc