您的位置:首页 > 运维架构

hadoop1.01+ hbase 0.92+chukwa0.5 安装配置 +问题

2012-04-12 11:31 686 查看
首先看下官网的东西,大概有个轮廓见下图:



1 agent 这个是部署在每台datanode 和 namenode机器上的因为他们需要监控自己机器的性能日志,将他发送到collector 去的,所以后面需要配置【collectors】这个文件。
agent的运行机制很简单,其实他也是在本机运行了多个socket.accept(); (可以使用telnet localhost 9093查看,可以动态添加),然后hadoop使用log4j将日志定向到这些端口。
2 collctor 是用来专门接收这个这些agent发来的监控信息,默认间监控8080端口,【可能与你的tomcat有冲突修改下】。
3 统一由collector将数据写进hdfs中和hbase数据库中。
总结:agent每台机器配置一个,collector可以配置多个以供agent调用【agent在/etc/chukwa/collectors这个文件中配置多个地址就行了】.

安装步骤:
参考chuwa 0.5安装

红色为修改以下做补充,原文: http://hi.baidu.com/zhangxinandala/blog/item/3730014de3262d16b2de0562.html
Chukwa0.5的安装

安装的前提条件:
1.使用的JDK的版本必须是1.6或者更高版本,本实例中使用的是JDK1.7

2.使用的hadoop的版本必须是Hadoop0.20.205.1及以上版本,本实例中使用的是Hadoop1.0.1版本。
3.为了运行HICC,需要使用HBase0.90.4版本,但是我们环境现在用的是0.92.0版本所以我们需要替换包

安装的步骤如下:

1.首先下载的chukwa的版本是0.5版本,需要在
http://labs.renren.com/apache-mirror/incubator/chukwa/chukwa-0.5.0/上(renren 网也加入apache了 O(∩_∩)O~)

下载如下的两个文件:

chukwa-incubating-0.5.0.tar.gz
//chukwa-incubating-src-0.5.0.tar.gz 可以不用下载

将如上的两个gz文件进行解压缩,
2.然后将chukwa-incubating-src-0.5.0下的conf目录和script目录拷贝到
chukwa-incubating-0.5.0目录下,并将chukwa-incubating-0.5.0重命名为chukwa

3.然后运行如下命令:

sudogedit /etc/profile 打开profile文件,然后加入以下的内容:
export CHUKWA_HOME=/opt/chukwa-incubating-0.5.0

export CHUKWA_CONF_DIR=$CHUKWA_HOME/conf

export CHUKWA_HOME=/opt/chukwa-incubating-0.5.0

export PATH=$PATH:$CHUKWA_HOME/bin

## 下面配置这个主要是因为0.5版本他把chukwa启动 shell单独放在sbin目录下了。  也可以直接cp /sbin/* ./bin

export PATH=$PATH:$CHUKWA_HOME/sbin

4.进行通用信息的配置:


修改etc/chukwa/chukwa-env.sh文件中的JAVA_HOME属性,使其指向正确的java安装目录 ,如:export JAVA_HOME=/opt/jdk/jdk1.7.0


修改etc/chukwa/chukwa-env.sh中的CHUKWA_LOG_DIR and CHUKWA_PID_DIR两个属性,这两个属性分别用于定义存放Chukwa的日志文件和pid文件的目录,默认的属性值如下:

# The directory where pid files are stored. CHUKWA_HOME/var/run by default.
export CHUKWA_PID_DIR=/tmp/chukwa/pidDir

# The location of chukwa logs, defaults to CHUKWA_HOME/logs
export CHUKWA_LOG_DIR=/tmp/chukwa/log需要注意的是 CHUKWA_PID_DIR目录不能被多个Chukwa实例来共享,而且它应该保存在本地磁盘中。  可以将这两个目录注释掉,他会保存在CHUKWA_HOME下的目录中、


5.Agent信息配置


必须进行配置的部分是修改$CHUKWA_HOME/etc/chukwa/collectors文件的内容,该文件保存了用于运行Chukwa collectors的主机列表。Agent从这些主机列表中随机的选择一个,然后将收集到的信息发送给它。

文件的内容格式如下:

http://<collector1HostName>:<collector1Port>/

http://<collector2HostName>:<collector2Port>/

http://<collector3HostName>:<collector3Port>/
默认文件的内容只有localhost


编辑CHUKWA_HOME/etc/chukwa/initial_adaptors 配置文件,该文件保存了Chukwa默认的Adapter的类型,这个文暂时不用修改,文件的内容如下:

add sigar.SystemMetrics SystemMetrics 60 0
add SocketAdaptor HadoopMetrics 9095 0
add SocketAdaptor Hadoop 9096 0
add SocketAdaptor ChukwaMetrics 9097 0
add SocketAdaptor JobSummary 9098 0

修改$CHUKWA_HOME/etc/chukwa/chukwa-agent-conf.xml配置文件的内容,此配置文件中的内容默认都可以不需要修改就行,但是有一个属性很重要,它定义了Agent所在的集群的名称:

<property>


<name>chukwaAgent.tags</name>

<value>cluster="demo"</value>

<description>The cluster's name for this agent   貌似暂时没发现有什么用,</description>

</property>



启动Agent

可以使用bin/chukwa agent命令来启动,但是这里会出现两个问题:首先我如果直接进入到bin目录下,然后运行./chukwa agent命令,此时会出现路径错误的异常;

另外一个问题就是,当我不是以root的身份登录linux系统时,直接运行上面的命令会出现如下的异常情况:

java.io.FileNotFoundException: /agent.log (Permission denied)

atjava.io.FileOutputStream.openAppend(Native Method)

atjava.io.FileOutputStream.<init>(FileOutputStream.java:192)

atjava.io.FileOutputStream.<init>(FileOutputStream.java:116)

atorg.apache.log4j.FileAppender.setFile(FileAppender.java:294)

该异常表明当前的用户没有权限来打开agent.log文件,所以应该以如下的命令来运 行:sudo bin/chukwaagent

也可以使用sudo bin/start-agents.sh命令来使用SSH登录到 etc/chukwa/agents文件中列出的所有的agent所在的主机来启动Agent后台进程。
其实你可以简单命令:
>> cd $CHUKWA_HOME
>> start-agent.sh ## 前提是已经导入了PATH 信息。

为了检查Agent是否成功,可以运行telnetlocalhost 9093命令,然后再运行list

看能否可以在命令行看到一些提示信息。

6.修改被Chukwa监控的hadoop集群的配置信息:

首先将CHUKWA_HOME/etc/chukwa/hadoop-log4j.properties下的文件复制到hadoop的conf目录下,并重命名为log4j.properties

将$CHUKWA_HOME/etc/chukwa/hadoop-metrics2.properties 复制到hadoop的conf目录下,并保持原文件的名称

$CHUKWA_HOME/share/chukwa/chukwa-0.5.0-client.jar 复制到hadoop的lib目录下面

将$CHUKWA_HOME/share/chukwa/lib/json-simple-1.1.jar复制到hadoop的lib目录下面

将$CHUKWA_HOME/share/chukwa/lib/chukwa-0.5.0.jar复制到hadoop的lib目录下面

如果上面的jar包没在$CHUKWA_HOME/share/chukwa/lib目录下,那么需要到最先下载的chukwa-incubating-src-0.5.0.tar.gz文件夹下找到相应的jar包。

7.启动HBase,然后在HBase中创建相应的表,启动hadoop
hdfs


/hbase shell < etc/chukwa/hbase.schema


8.配置Collector信息:
首先,编辑$CHUKWA_HOME/etc/chukwa/chukwa-env.sh,需要修改HADOOP_CONF_DIR and HBASE_CONF_DIR属性信息,这两个信息都是提前在/etc/profile中定义好的,也可以直接在文件中配置他们路径。

然后编辑$CHUKWA_HOME/etc/chukwa/chukwa-collector-conf.xml配置文件,我们直到Collector可以将收集到的信息保存在HBase中和HDFS中,所以相应的配置信息也会有两个,如下:使用HBase作为存储介质:

<property>

<name>chukwaCollector.writerClass</name>

<value>org.apache.hadoop.chukwa.datacollection.writer.PipelineStageWriter</value>

</property>

<property>

<name>chukwaCollector.pipeline</name>

<value>org.apache.hadoop.chukwa.datacollection.writer.hbase.HBaseWriter</value>

</property>


给出另外一套配置:

<property>
<name>chukwaCollector.writerClass</name>
<value>org.apache.hadoop.chukwa.datacollection.writer.PipelineStageWriter</value>
</property>

<property>
<name>chukwaCollector.pipeline</name>
<value>org.apache.hadoop.chukwa.datacollection.writer.SeqFileWriter,org.apache.hadoop.chukwa.datacollection.writer.SocketTeeWriter,org.apache.hadoop.chukwa.datacollection.writer.hbase.HBaseWriter</value>

<description>这里解释下,如果你需要使用hdfs做为保存数据的介质必须要在这里配置SeqFileWriter这个类因为也要使用hbase所以最好将这两个都配上。   </description>

</property>
.......
........
<property>
<name>writer.hdfs.filesystem</name>
<value>hdfs://hadoopIP:9000</value>
<description>HDFS to dump to  你的hdfs地址</description>
</property>

<property>
<name>chukwaCollector.outputDir</name>
<value>/chukwa/logs/</value>
<description>Chukwa data sink directory</description>
</property>


使用HDFS做为存储介质

启动Collector:

sudobin/chukwa collector或者sudobin/start-collectors.sh

通过http://collectorhost:collectorport/chukwa?ping=true来查看,collector是否启动正常。

启动后查看异常信息,会看到hbase的错误,

9.可选的ETL过程:
sudo bin/chukwa archivesudo bin/chukwa demux


10.启动集群的AggregationScript(PIG脚本),所以PIG需要提前配置好。

首先,需要在etc/profile中定义好pig的classpath

export PIG_CLASSPATH=$HADOOP_CONF_DIR:$HBASE_CONF_DIR

创建如下的jar包

jar cf $CHUKWA_HOME/hbase-env.jar $HBASE_CONF_DIR


启动如下的pig脚本:

pig -Dpig.additional.jars=${HBASE_HOME}/hbase-0.90.4.jar:${HBASE_HOME}/lib/zookeeper-3.3.2.jar:${PIG_PATH}/pig.jar:${CHUKWA_HOME}/hbase-env.jar ${CHUKWA_HOME}/script/pig/ClusterSummary.pig

为了保证上面的脚本能够正常运行,一定要将hbase相应的jar包和 zookeeper相应的jar包(在hbase的lib下)以及pig相应的jar包添加到classpath中。

11.启动HICC
sudo bin/chukwa hicc


使用http://<server>:4080/hicc进行验证,默认的用户名和密码都是admin

注意:

通过上面配置之后,重启hadoop:

start-all.sh出现如下的异常log4j:ERRORCould not connect to remote log4j server at [localhost]. We will tryagain later.这是因为,要将hadoop的日志通过socket发送给相应的Agent,所以我们首先需要启动Agent。

Questions:

--Q1----------------------------------
2012-04-12 09:48:33,940 INFO org.apache.zookeeper.ClientCnxn$SendThread.startConnect(ClientCnxn.java:1041) ClientCnxn - Opening socket connection to server hadoop2/0.0.0.0:21818
2012-04-12 09:48:33,941 WARN org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1161) ClientCnxn - Session 0x336a075096b0009 for server null, unexpected error, closing socket connection and attempting reconnect
java.net.ConnectException: Connection refused
at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:701)
at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1119)

配置export HADOOP_CONF_DIR=/opt/chukwa-incubating-0.5.0/HADOOP_HBASE_CONF两个信息找到hbase-site.xml 、 hdfs-site.xml两个文件。

--Q2----------------------------------

2012-04-12 09:01:35,838 ERROR org.apache.hadoop.chukwa.datastore.ChukwaHBaseStore.getSeries(ChukwaHBaseStore.java:98) ChukwaHBaseStore - java.lang.IllegalArgumentException: Not a host:port pair: ï¿6304@hadoop2hadoop2,60020,1334137368905
at org.apache.hadoop.hbase.HServerAddress.<init>(HServerAddress.java:60)
at org.apache.hadoop.hbase.zookeeper.RootRegionTracker.dataToHServerAddress(RootRegionTracker.java:82)
at org.apache.hadoop.hbase.zookeeper.RootRegionTracker.waitRootRegionLocation(RootRegionTracker.java:73)
at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegion(HConnectionManager.java:579)
at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegion(HConnectionManager.java:559)
at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegionInMeta(HConnectionManager.java:688)
at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegion(HConnectionManager.java:590)
at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegion(HConnectionManager.java:559)
at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegionInMeta(HConnectionManager.java:688)
at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegion(HConnectionManager.java:594)
at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegion(HConnectionManager.java:559)
at org.apache.hadoop.hbase.client.HTable.<init>(HTable.java:173)
at org.apache.hadoop.hbase.client.HTableFactory.createHTableInterface(HTableFactory.java:36)
at org.apache.hadoop.hbase.client.HTablePool.createHTable(HTablePool.java:133)
at org.apache.hadoop.hbase.client.HTablePool.getTable(HTablePool.java:96)
at org.apache.hadoop.chukwa.datastore.ChukwaHBaseStore.getSeries(ChukwaHBaseStore.java:63)
at org.apache.hadoop.chukwa.hicc.rest.MetricsController.getSeriesBySessionAttribute(MetricsController.java:106)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60)
at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:185)
at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)
at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:288)
at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)
at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1469)
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1400)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1349)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1339)
at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416)
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:537)
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:708)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)

你的hbase包在chukwa中的不匹配实际用的hbase工程的版本。本工程使用hbase-0.92.0.jar版本。

cp $HBASSE_HOME/hbase-0.92.0.jar$CHUKEA_HOME\chukwa-incubating-0.5.0\share\chukwa\lib
cp $HBASSE_HOME/hbase-0.92.0-tests.jar$CHUKEA_HOME\chukwa-incubating-0.5.0\share\chukwa\lib

删掉$CHUKEA_HOME\chukwa-incubating-0.5.0\share\chukwa\lib以前老版本的hbase包,本工程使用hbase-0.92.0.jar版本。

--Q3---------------

不写hdfs的问题。将chukwa/logs 创建到了本地,而没有创建到hdfs上去,是因为没有配置org.apache.hadoop.chukwa.datacollection.writer.SeqFileWriter这个类导致的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: