使用chukwa的自定义数据类型收集日志配置问题

     chukwa是基于hadoop开发的数据采集与分析的框架,我最近在看陈康贤编著的《大型分布式网站架构设计与实践》,书中最后一章数据分析讲到如何使用chukwa收集nginx下的日志信息access.log。书中用的是自定义数据类型,自定义类型必须继承自org.apache.hadoop.chukwa.extraction.demux.processor.mapper.AbstractProcessor抽象类,并且实现parse方法,如下所示:

package org.apache.hadoop.chukwa.extraction.demux.processor.mapper;

import org.apache.hadoop.chukwa.extraction.demux.processor.mapper.AbstractProcessor;
import org.apache.hadoop.chukwa.extraction.engine.ChukwaRecord;
import org.apache.hadoop.chukwa.extraction.engine.ChukwaRecordKey;
import org.apache.hadoop.mapred.OutputCollector;
import org.apache.hadoop.mapred.Reporter;


public class LogProcessor extends AbstractProcessor{
    protected void parse(String recordEntry, OutputCollector<ChukwaRecordKey, ChukwaRecord> 
                   outputCollector, Reporter reporter) throws Throwable {
        ChukwaRecordKey chukwaRecordKey=new ChukwaRecordKey();
        String reduceType="Log";
        chukwaRecordKey.setReduceType(reduceType);
        ChukwaRecord record=new ChukwaRecord();
        record.add("",recordEntry);
        outputCollector.collect(chukwaRecordKey,record);
    }
}
    然后书中说自定义的类型需要在conf/chukwa-collector-conf.xml文件中进行相应的配置,结果也没介绍怎么配置,而是紧接着编辑chukwa-demux-conf.xml这个文件

添加了这几行代码

<property>

     <name>Log</name>

     <value>org.apache.hadoop.chukwa.extraction.demux.processor.mapper.LogProcessor</value>

< /property>

      在这个配置文件中添加这个property,我也明白是想让chukwa使用这个解析类,但是chukwa如何去找你自定义的这个类呢?除了在自己的chukwa-core.jar中找,他还会在哪里找呢?作者说自定义的类型需要在conf/chukwa-collector-conf.xml文件中进行相应的配置,然而又不说怎么配,网上也搜不到,不过有几个博客提到可以自己编译chukwa,然后没办法我只能把这个自定义的类编译到chukwa-core.jar包中

编译步骤:我使用的是chukwa-0.4.0.tar.gz    ;tar包解压后默认已经编译好了,可以直接使用,但是里面也有src文件夹,即源码,你可以把自定义数据类型Java文件放到包名对应的位置,在chukwa-0.4.0文件夹下使用ant命令编译,如果没安装ant就先安装ant,编译完后会多出一个build目录,将build目录里面的chukwa-core-0.4.0.jar、chukwa-hadoop-0.4.0-client.jar、chukwa-agent-0.4.0.jar、tools-0.4.0.jar替换chukwa-0.4.0文件夹下的jar包,并全部拷贝到hadoop的lib目录下

    自定义类型已经在jar包中了,可以启动chukwa了,运行过程中查看启动日志,出现了几个错误:

错误1(在Demux.log中出现): java.lang.NoClassDefFoundError: org/codehaus/jackson/map/JsonMappingException 

解决方法:将jackson-core-asl-1.8.8.jar   和   jackson-mapper-asl-1.8.8.jar这两个jar包拷贝到chukwa的lib目录中


错误2Name node is in safe mode.The ratio of reported blocks 1.0000 has reached the threshold 0.9990. Safe mode will be turned off automatically in 27 seconds.

解决方法:网上说将安全模式关掉#hadoop dfsadmin -safemode leave,我试了不行,还有说将hdfs-site.xml中的dfs.safemode.threshold.pct的值改为0f,我试了也不行,最后将hadoop namenode的文件夹删除,重新格式化,就OK了


    为了便于看到自己的测试结果,在chukwa的配置文件目录下的initial_adapter中去掉官方自带的例子,好像有四行,只保留你自己的adapter:

add filetailer.CharFileTailingAdapterUTF8 Log 0 /home/lvyuan/temp/access.log 0


最后我使用命令hadoop fs -tail -f /chukwa/dataSinkArchives/20170714/dataSinkDir_1500010409961/201714132624034_localhostlocaldomain_450ec65515d3f8ff0228000.done   查看收集到的日志信息,确实看到收集到的日志了,如下图



唯一奇怪的地方是:书上写Collector会将收集到的日志信息写入logs/*.chukwa,直到文件达到64MB或者达到一定的时间间隔后,Collector会将logs/*.chukwa文件重命名为logs/*.done。后台的DemuxManager进程将每隔20秒检查一次*.done文件是否生成,如果文件存在,则将文件移动到demuxProcessing/mrInput目录下,而demux MapReduce job将会以此目录作为输入进行MapReduce操作,如果操作成功,则将MapReduce的输出结果从demuxProcessing/mrOutput目录下归档到dataSinkArchives/[yyyyMMdd]/*/*.done;我的demuxProcessing目录下是空的,但是我在Demux.log中看到mapreduce都正常,不知道怎么就输出到dataSinkArchives这个下面了,难道没有经过demuxProcessing吗,日志里面都正常啊,希望有人能告诉我




                            

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值