现在的位置: 首页 > 综合 > 正文

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

2013年09月09日 ⁄ 综合 ⁄ 共 11481字 ⁄ 字号 评论关闭

首先看下官网的东西,大概有个轮廓见下图:



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下的文件复制到hadoopconf目录下,并重命名为log4j.properties

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

  • $CHUKWA_HOME/share/chukwa/chukwa-0.5.0-client.jar 复制到hadooplib目录下面

  • $CHUKWA_HOME/share/chukwa/lib/json-simple-1.1.jar复制到hadooplib目录下面

  • $CHUKWA_HOME/share/chukwa/lib/chukwa-0.5.0.jar复制到hadooplib目录下面

如果上面的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.启动集群的AggregationScriptPIG脚本),所以PIG需要提前配置好。

    • 首先,需要在etc/profile中定义好pigclasspath

    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包(在hbaselib下)以及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这个类导致的。

    抱歉!评论已关闭.