Flume框架的学习使用
Flume简介
- Flume提供一个分布式的,可靠的,对大数据量的日志进行高效收集、聚集、移动的服务。
- Flume基于流失架构,容错性强,也很灵活简单
- Flume,kafka用来实时进行数据收集,Spark,Storm用来实时处理数据,impala用来实时查询数据。
Flume角色
Source
用于采集数据,Source是产生数据流的地方,同时Source会将产生的数据流传输到Channel。
Channel
用于桥接Source和Sink,类似于一个队列。
Sink
从Channel中收集数据,将数据写到目标源(可以是下一个Source,也可以是HDFS或者HBASE)
Event
传输单元,Flume数据传输的基本单元,以事件的形式从源头传递到目的地。
Flume传输过程
Source监控某个文件或者数据流,数据源产生新的数据,拿到该数据之后,将数据封装到一个event中,并put到Channel后commit提交,channel队列先进先出,sink去channel队列中拉去数据,然后写出到下个源。
Flume部署及使用
文件配置
上传压缩包,解压,配置文件:flume-env.sh
export JAVA_HOME=/home/admin/modules/jdk1.8.0_121
案例
监控端口数据
目标:Flume 监控一端 Console,另一端 Console 发送消息,使被监控端实时显示。
- 安装 telnet (为了从某个端口中输出数据)
$ sudo rpm -ivh xinetd-2.3.14-40.el6.x86_64.rpm
$ sudo rpm -ivh telnet-0.17-48.el6.x86_64.rpm
$ sudo rpm -ivh telnet-server-0.17-48.el6.x86_64.rpm
创建 Flume Agent 配置文件 flume-telnet.conf(详细配置见官网)
# Name the components on this agent
a1.sources = r1
a1.sinks = k1
a1.channels = c1
# Describe/configure the source
a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 44444
# Describe the sink
a1.sinks.k1.type = logger
# Use a channel which buffers events in memory
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
# Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
判断 44444 端口是否被占用
$ netstat -tunlp | grep 44444
先开启 flume 先听端口
$ bin/flume-ng agent --conf conf/ --name a1 --conf-file job/flume-telnet.conf
-Dflume.root.logger==INFO,console
使用 telnet 工具向本机的 44444
$ telnet localhost 44444
实时读取本地文件到HDFS
目标:实时监控 hive 日志,并上传到 HDFS 中
由于flume需要操作Hadoop的API,需要拷贝jar包到Flume的lib目录下:
$ cp share/hadoop/common/lib/hadoop-auth-2.5.0-cdh5.3.6.jar ./lib/
$ cp share/hadoop/common/lib/commons-configuration-1.6.jar ./lib/
$ cp share/hadoop/mapreduce1/lib/hadoop-hdfs-2.5.0-cdh5.3.6.jar ./lib/
$ cp share/hadoop/common/hadoop-common-2.5.0-cdh5.3.6.jar ./lib/
$ cp ./share/hadoop/hdfs/lib/htrace-core-3.1.0-incubating.jar ./lib/
$ cp ./share/hadoop/hdfs/lib/commons-io-2.4.jar ./lib/
最后两个 jar 为 1.99 版本 flume 必须引用的 jar
创建 flume-hdfs.conf
# Name the components on this agent
a2.sources = r2
a2.sinks = k2
a2.channels = c2
# Describe/configure the source
a2.sources.r2.type = exec
a2.sources.r2.command = tail -F /home/admin/modules/apache-hive-1.2.2-bin/hive.log
a2.sources.r2.shell = /bin/bash -c
# Describe the sink
a2.sinks.k2.type = hdfs
a2.sinks.k2.hdfs.path = hdfs://linux01:8020/flume/%Y%