1.flume的安装
首先进行解压:
$tar zxvf apache-flume-1.6.0-bin.tar.gz /home/hadoop // 自定义目录
解压完成进行配置进入
/home/hadoop/apache-flume-1.6.0-bin/cof目录,里面flume-conf.properties.template主要配置
执行cp flume-conf.properties.template flume-conf.properties 复制一份
cp Flume-env.sh.template Flume-env.sh复制一份
flume-conf.properties 中主要配置agent
先执行vim Flume-env.sh添加JAVA_HONE
export JAVA_HOME=/usr/lib/jvm/jre-1.7.0-openjdk.x86_64
具体flume-conf.properties的配置后面在写因为agent的种类很多,可以自定义不同的配置。
但是JAVA_HOME一定要配置 ,这样就可以启动起来,
2.Kafka的安装
首先进行解压 tar -xzf kafka_2.9.2-0.8.1.1.tgz
进入kafka目录后
1
因为kafka是需要注册在zookeper上的所以需要先启动他
bin/zookeeper-server-start.sh config/zookeeper.properties
2
现在启动Kafka:
> bin/kafka-server-start.sh config/server.properties
3 创建一个叫做“test”的topic,它只有一个分区,一个副本。
> bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
4 发送消息.
> bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
5 启动consumer
bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning
kafka-console-producer.sh和kafka-console-cousumer.sh只是系统提供的命令行工具。这里启动是为了测试是否能正常生产消费;验证流程正确性
在实际开发中还是要自行开发自己的生产者与消费者
Flume+kafka的整合
1.下载flume-kafka-plus:https://github.com/beyondj2ee/flumeng-kafka-plugin
2.找到flume-conf.properties文件 拷贝其中的内容到flume/conf目录下中的对应文件中
修改美容:
producer.sources.s.type = exec
producer.sources.s.command = tail -f -n+1 /mnt/hgfs/vmshare/test.log //想要监控的目录下的内容(自定义)
producer.sources.s.channels = c
修改所有topic的值改为test
将改后的配置文件放进flume/conf目录下
在该项目中提取以下jar包放入环境中flume的lib下:
然后进行测试是否联通
我们先启动flume,$bin/flume-ng agent --conf conf --conf-file conf/flume-conf.properties --name producer -Dflume.root.logger=INFO,console
然后再启动kafka, bin/zookeeper-server-start.sh config/zookeeper.properties
bin/kafka-server-start.sh config/server.properties
bin/kafka-console-consumer.sh --zookeeper hadoop001:2181 --topic test --from-beginning 开启消费者
发现kafka消费者将flume监视的文件全部读取出来。测试成功,kafka与flume连通
Flume总结:flume的核心在与agent的配置,包括source channel sink
其中source 分为一下几种不同需求下的配置
1.avro 可以监听指定端口的的日志,需要说明主机和端口号。
2.Exec (上文所使用) 可以通过指定的操作对日志进行读取,指定shell命令 监听指定文件日志
3.Spooling dirctory (测试成功)可以读取文件夹里的日志,使用时指定一个文件夹可以读取该文件夹的所有文件,读取是不可修改。
Channel最主要的还是memory
常见的sink
1.logger sink 简单使用 将收集的日志写到flume的log中
2.Avro sink 可以将接收到的日志发送到指定端口功下一级的收集和接收
3.File roll ink (测试成功) 将受到的日志写入到一个指定的文件中
4.Hdfs sink 和file roll sink 类似,不过上个是写到本地文件中,hdfs是写到分布式的路径中。