flume :实时日志收集系统。
flume是一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统。支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(比如文本、HDFS、Hbase等)的能力 。
flume的基本数据单位:事件。
flume的核心概念:
Client:Client生产数据,运行在一个独立的线程。
Event: 一个数据单元,消息头和消息体组成。(Events可以是日志记录、 avro 对象等。)
Flow: Event从源点到达目的点的迁移的抽象。
Agent: 一个独立的Flume进程,包含组件Source、 Channel、 Sink。(Agent使用JVM 运行Flume。每台机器运行一个agent,但是可以在一个agent中包含多个sources和sinks。)
Source: 数据收集组件。(source从Client收集数据,传递给Channel)
Channel: 中转Event的一个临时存储,保存由Source组件传递过来的Event。(Channel连接 sources 和 sinks ,这个有点像一个队列。)
Sink: 从Channel中读取并移除Event, 将Event传递到FlowPipeline中的下一个Agent(如果有的话)(Sink从Channel收集数据,运行在一个独立线程。)
flume一个简单的小应用
flume安装:
- 创建采集目录
- #mkdir –p /home/smp/cin/flume
- 上传flume压缩包到 /home下
- 解压flume压缩包
- #tar –zxvf flume-1.6.tar.gz
- 修改flume配置文件
- #cd /home/flume-1.6/conf
- #vi flume-env.sh
- 修改JAVA_HOME路径:
- export JAVA_HOME=/usr/java/jdk1.7.0_79
- 修改flume内存大小
- export JAVA_OPTS="-Xms8000m -Xmx8000m -Dcom.sun.management.jmxremote -XX:+CMSClassUnloadingEnabled -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:-CMSConcurrentMTEnabled -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled -XX:PermSize=512m -XX:MaxPermSize=512m"
- 保存修改
- 上传kafka.conf文件
- 上传flume的采集程序的配置文件kafka.conf到conf目录下 :/home/flume-1.6/conf
- 执行命令启动程序
- #cd /home/flume-1.6
- #nohup bin/flume-ng agent --conf conf/ --conf-file conf/kafka.conf --name agent1 -Dflume.root.logger=INFO,console > logs/kafkasink-log 2>&1 &
或者执行
#nohup /home/flume-1.6/bin/flume-ng agent --conf /home/flume-1.6/conf/ --conf-file /home/flume-1.6/conf/kafka.conf --name agent1 -Dflume.root.logger=INFO,console > /home/flume-1.6/logs/kafkasink-log 2>&1 &
- 查看log是否报错
- # tail -100 /home/flume-1.6/logs/kafkasink-log
-
- 注:如果没有报错,说明启动成功。
flume:在Hadoop上的应用,将数据写入hdfs中
创建一个文件:
agent1.channels = ch2
agent1.sources = avro-source1
agent1.sinks = shdfs
# channel
agent1.channels.ch2.type = memory
# source
agent1.sources.avro-source1.channels = ch2
agent1.sources.avro-source1.type = exec
agent1.sources.avro-source1.command= tail -f /usr/lib/flume-ng/conf/test.txt
# sink
agent1.sinks.shdfs.channel = ch2
agent1.sinks.shdfs.type = hdfs
agent1.sinks.shdfs.hdfs.path = hdfs://quickstart.cloudera:8020/user/callLog/stat_date=%Y%m%d
agent1.sinks.shdfs.hdfs.inUsePrefix = .
agent1.sinks.shdfs.hdfs.rollSize = 64000000
agent1.sinks.shdfs.hdfs.filePrefix = CallLog-%H-%{hostname}
agent1.sinks.shdfs.hdfs.fileType = DataStream
agent1.sinks.shdfs.hdfs.rollInterval = 3600
agent1.sinks.shdfs.hdfs.writeFormat = Text
(注意自己创建的test.txt的位置,和hadoop端口的位置,查看信息:hadoop/etc/hadoop/core-site.xml)
在终端执行:/usr/lib/flume-ng/bin/flume-ng agent --conf/usr/lib/flume-ng/conf/ --conf-file/usr/lib/flume-ng/conf/flume1 --name agent1 -Dflume.root.longer=INFO,console
(详解:/usr/lib/flume-ng/bin/flume-ng:是flume-ng的目录 /usr/lib/flume-ng/conf/ :是test.txt的目录 usr/lib/flume-ng/conf/flume1:是配置文件的位置, name agent1:运行单位的名字)
-------海翁失鸥