模块一:flume收集log文件
一:flume的source不满足我们的需求,所以自定义source。遇到的难点:
1,实时收集的数据,采集后出现乱码问题。最后发现是因为RandomAccessFile 读写文件时,不管文件中保存的数据编码格式是什么 使用 RandomAccessFile对象方法的 readLine() 都会将编码格式转换成 ISO-8859-1 所以 输出显示是还要在进行一次转码
new String(ra.readLine().getBytes("ISO-8859-1"),"utf-8") 2,在start方法上Executors.newSingleThreadExecutor();以后在stop方法中关闭线程池,可能调用一次shutdown方法并不能关闭线程池。我们用的方法是,模仿flume 中executor类的方法来关闭线程池。
3,flume中的一个agent分为source,channel,sink。
二:flume对接kafka
1,安装kafka0.10的时候,按照要求更改配置文件后。消费端与生产端并不能建立连接。解决办法:在server.properties的添加了一个host.name=主机名。在kafka集群上都进行
更改。 ERROR Error when sending message to topic chao with key: null, value: 4 bytes with error:
2,flume中有kafkaChannel,就是source采集数据后,直接传送到kafka当中
a1.channels.c1.type = org.apache.flume.channel.kafka.KafkaChannel
a1.channels.c1.kafka.bootstrap.servers = node1:9092,node3:9092,node4:9092
a1.channels.c1.kafka.topic = lichao
a1.channels.c1.parseAsFlumeEvent = false//说明:kafka消费端消费数据,默认的是event,把这个参数改成false·,就可以了。以后消费数据相当与以一般的文本形式。
三:kafka对接HDFS
1.在一台机器上安装jdk
2.解压flume-ng
3.创建flume的配置文件kafka-hdfs.conf
4.添加flume依赖hdfs的jar包
5.将hdfs的配置文件放入到flume的conf目录下(core-site.xml,hdfs-site.xml)
6.启动flume
四:kafka对接Elastic Serath
问题整理:安装完elastic后,要安装ik分词器,跟sql插件。我事先创建了一个sql空目录,但是后来启动elastic总是启动后又闪退,后来看错误日志log,发现是这个空文件夹搞的
问题。解决办法,将这个空文件夹删除后,重新启动就可以了。