将Chukwa 0.5部署在基于Cloudera CDH4的Hadoop集群上

56 篇文章 1 订阅
11 篇文章 0 订阅

一、使用maven构建基于chukwa 0.5的项目

 

    使用nexus搭建了maven私服,此时如果使用maven构建chukwa 0.5版本时可能在以下两个依赖项遇到问题

 

    thrift-0.2.0.jar

    hadoop-core-0.20-append-r1056497.pom

 

    这是因为chukwa0.5版本在pom文件中依赖了hbase0.90.4版,而此版本的hbase又依赖了以上两个比较低的版本(见hbase 0.90.4的pom文件)

 

 

 

 

Xml代码    收藏代码
  1. <repositories>  
  2.     <repository>  
  3.       <id>temp-thrift</id>  
  4.       <name>Thrift 0.2.0</name>  
  5.       <url>http://people.apache.org/~rawson/repo/</url>  
  6.       <snapshots>  
  7.         <enabled>false</enabled>  
  8.       </snapshots>  
  9.       <releases>  
  10.         <enabled>true</enabled>  
  11.       </releases>  
  12.     </repository>  
  13.     ......  
  14. </repositories>  
  15. ......  
  16. <properties>  
  17.     <hadoop.version>0.20-append-r1056497</hadoop.version>  
  18. </properties>  

 

 

    解决此问题需要修改maven的配置文件,将私服镜像的配置暂时注释掉,使其可以按照pom文件中指明的url下载相应的文件

 

Xml代码    收藏代码
  1. <mirror>  
  2.     <id>nexus</id>  
  3.     <name>nexus</name>  
  4.     <mirrorOf>*</mirrorOf>  
  5.     <url>http://localhost:8081/nexus/content/groups/public</url>  
  6. </mirror>  

 

 

 

    构建成功后可以将下载好的相关文件提交到私服

    将编程成功的chukwa 0.5的jar提交到私服,其中相关项目的pom文件可以添加如下依赖

 

 

 

Xml代码    收藏代码
  1. <dependency>  
  2.     <groupId>org.apache.incubator</groupId>  
  3.     <artifactId>chukwa</artifactId>  
  4.     <version>0.5.0</version>  
  5. </dependency>   

 

 

二、基于Chukwa 0.5实现自己的日志收集机制

 

    chukwa本身的日志收集机制因为要提供对hadoop集群的性能分析,所以其策略是

    a. 将agent提交的数据使用SeqFileWriter将其构建成以ChukwaArchiveKey为key、以ChunkImpl为value的键值对写入同一个.chukwa文件,完成后改名为.done文件

    b. demux进程执行mapreduce过程将.done文件分类

    c. db进程将demux分类后的文件转储到相应的日期、小时目录下

    d. rolling进程将每个小时、每天目录下的碎小文件合并成一个大文件

 

    这样便于其分类、去重、排序、合并,方便为其hicc组件提供近似实时分析的日志支持。

    但是这里有两个弊端:

    a. agent提交的数据转换为ChukwaArchiveKey、ChunkImpl键值对后,最终分类、合并后的.evt文件大小要比原始日志大小增加几倍

    b. 经过demux、db、rolling进程的处理需要消耗一定时间

 

    其实对于大多数的日志收集功能:实时性、完整性、稳定性这些基本的功能就足够了。

    因此,可以编写自己的Writer以简化收集过程。

    比如:

    a. 将agent提交的数据写入dataType+date+hour.chukwa的文件中,如果此文件不存在则调用

FileSystem的create(Path)方法返回输出流,否则调用append(Path)返回数据流

    (注意:要想成功使用append(Path)方法需要在hdfs-site.xml中添加dfs.support.append配置项,设置其值为true)

    b. 定时检测,如果当前时间(小时)已经和正在写的.chukwa文件中的时间(小时)不一致,则将.chukwa文件改名为.done文件

 

    这样得到的.done文件即为一个小时内的日志,而且已经进行了分类,可直接对其进行分析或导入hive

 

三、将Chukwa 0.5部署到基于Cloudera CDH4的Hadoop集群

 

 

    chukwa 0.5基于hadoop 1.0版,但因为hdfs的API在1.0版与0.23版之间变化不大,因此可以将其部署在CDH4环境下,只不过因为mapreduce的API存在一定变化,因此demux、rolling进程可能会受到影响,但基于上面的步骤2,已经将chukwa的日志收集机制修改为只和hdfs的API相关,因此mapreduce不兼容的问题可以不用考虑。

    a. 删除$CHUKWA_HOME/share/chukwa/lib/hadoop-core-1.0.0.jar

    b. 复制

    $HADOOP_HOME/share/hadoop/common/hadoop-common-0.23.0-cdh4b1.jar

    $HADOOP_HOME/share/hadoop/hdfs/hadoop-hdfs-0.23.0-cdh4b1.jar

    到$CHUKWA_HOME/share/chukwa/lib/

    c. 复制

    $HADOOP_HOME/share/hadoop/common/lib/*.jar

    $HADOOP_HOME/share/hadoop/hdfs/lib/*.jar

    到

    $CHUKWA_HOME/share/chukwa/hadoop-common-lib/

    $CHUKWA_HOME/share/chukwa/hadoop-hdfs-lib/

 

  (这些都是hadoop-common、hadoop-hdfs依赖的 jar包)

 

    在$CHUKWA_HOME/libexec/chukwa-config.sh中添加依赖的jar包

    CHUKWA_CLASSPATH="${CHUKWA_HOME}/share/chukwa/*:${CHUKWA_HOME}/share/chukwa/lib/*:${CHUKWA_HOME}/share/chukwa/hadoop-common-lib/*:${CHUKWA_HOME}/share/chukwa/hadoop-hdfs-lib/*"

 

    d.

    删除$CHUKWA_HOME/share/chukwa/lib/protobuf-java-2.3.0.jar

    (与hadoop-common、hadoop-hdfs中的protobufjar包有冲突)

 

    这样既可在CDH4环境下继续使用chukwa收集日志。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值