Flume
简介
-
Flume提供分布式,可靠的,对大数据量的日志进行高效的收集,聚集,移动的服务,只能运行unix环境
-
基于流式架构,容错性强
-
flume,kafka用来实时进行数据收集,spark,storm用来实时处理数据,impala用来实时查询
Flume角色
一个flume任务为一个agent
**Source:**用于采集数据,Source 产生数据流的地方,同时source会将产生的数据流 传输到Channel
**Channe:**用于桥接sources和sinks类似于队列
**Sink:**从Channel收集数据,将数据写到目标源(可以是下一个Source,HDFS,HBase,控制台)
**Event:**传输单元,flume数据传输的基本单元,以事件的形式将数据从源头送至目的地
传输流程
source监控某个文件或数据流,数据源产生新的数据,拿到数据后,将数据封装到Event中,并put到channel后commit提交,channel队列先进先出,sink去channel队列中拉取数据,然后写到HDFS中
数据传输70M/s以下是可靠的,20w-50w左右qps有效的
使用yum自定义安装
[root@note03 conf]# cat /etc/yum.conf
[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=0
keepcahe=0 yum安装源文件,安装结束删除安装包,设置为1时,安装不删除源文件
cachedir:下载文件的目录
配置文件说明
a1表示一个agent的别名
起别名的作用:实例化
class Source{
}
Source s1 = new Source();
Channel c1 = new Channel();
文件配置
a1.sources = r1
a1.sinks = k1
a1.channels = c1
a1.sources.r1.type
数据源类型
a1.sources.r1.bind
数据源ip
a1.sources.r1.port
数据源的端口
a1.sinks.k1.type
sink的类型 logger日志 hdfs
a1.sources.r1.channels = c1
Source和channel绑定一个source绑定多个channel
a1.sinks.k1.channel = c1
sink和channel绑定,channel没有s,因为一个channel只能绑定一个sink
Flume的部署以及使用
安装Telnet
文件配置:
flume-env.sh 配置JAVA_HOME
案例一:监控端口数据
目标:Flume 监控一端 Console,另一端 Console 发送消息,使被监控端实时显示。
# 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-ng agent : 脚本 命令
–conf conf :配置文件类型
–name 这次agent的名称是什么 a1
–conf-file 配置文件的目录
-Dflume.root.loggerINFO,console:java的命令 loggerINFO的日志级别 console:控制台 输出
案例二:实时读取本地文件到HDFS上
// apache-flume-1.6.0-bin 版本jar包非必须
拷贝 Hadoop 相关 jar 到 到 Flume 的 lib 下
找jar包
[root@note03 hadoop-2.6.5]# find ./ -name "hadoop-auth*"
./share/hadoop/tools/lib/hadoop-auth-2.6.5.jar
./share/hadoop/httpfs/tomcat/webapps/webhdfs/WEB-INF/lib/hadoop-auth-2.6.5.jar
./share/hadoop/kms/tomcat/webapps/kms/WEB-INF/lib/hadoop-auth-2.6.5.jar
./share/hadoop/common/lib/hadoop-auth-2.6.5.jar
拷贝
cp -a ./share/hadoop/tools/lib/hadoop-auth-2.6.5.jar /opt/module/apache-flume-1.6.0-bin/lib/
tail -f 查询实时文件出错了,不会重新查看
-F 查询实时文件出错了,会重新查看
联想java执行linux脚本
Runtime().getXXX.exec("cat ....")
避免集群内部脚本不一致
/bin/bash -c cat xxx.txt
hdfs.rollInterval 时间 配置文件的合并大小 大小为秒,根据实时业务计算,实时的每秒数据量大小 尽量配置127M
hdfs.rollSize 滚动文件大小
hdfs.rollCount 数据的个数
hdfs.batchSize 缓存文件的大小个数
hdfs-minBlockReplicas:flume的备份数,因为hdfs本身具有备份功能,所以设置为0