flume操作
启动flume项目
[root@master flume]# ./bin/flume-ng agent -c ./conf/ -n flume项目的名称 -f flume项目的路径
flume项目配置信息
基本配置
#指定项目名为a1,source名为s1,channel名为c1,sink名为k1
a1.sources=s1
a1.channels=c1
a1.sinks=k1
#配置sources(数据源)
a1.sources.s1.type=netcat
a1.sources.s1.bind=master
a1.sources.s1.port=7777
#配置sinks(下沉位置)
a1.sinks.k1.type=logger
#配置channels(管道)
a1.channels.c1.type=memory
a1.channels.c1.capacity=1000
a1.channels.c1.transactionCapacity=100
#将source、channel、sink相连接
a1.sources.s1.channels=c1
a1.sinks.k1.channel=c1
source配置项
类型:netcat:
# 数据源为netcat端口
a1.sources.s1.type=netcat
a1.sources.s1.bind=master # 主机名或ip地址
a1.sources.s1.port=7777 # 端口号
exec:
# 数据源为监听文件
a1.sources.s1.type=exec
a1.sources.s1.command= tail -F /opt/upload/a.txt # 指定文件路径
spooldir:
# 数据源为监听文件夹(新文件)
a1.sources.s1.type=spooldir
a1.sources.s1.spoolDir=/opt/upload # 指定文件夹路径
# 以下为可选
a1.sources.s1.fileHeader=true # 开启头信息
a1.sources.s1.fileSuffix=.COMPLETED # 给已监听到的文件加后缀名
a1.sources.s1.ignorePattern=([^ ]*\.tmp) # 不对后缀名为.tmp的文件操作
channel配置项
memory:
a1.channels.c1.type=memory
a1.channels.c1.capacity=1000
a1.channels.c1.transactioncapacity=100
file:
a1.channels.c1.type = file
a1.channels.c1.checkpointDir = /opt/upload/checkpoint
a1.channels.c1.dataDirs = /opt/upload/data
sink配置项
logger:
a1.sinks.k1.type=logger
hdfs:
a1.sinks.k1.type=hdfs
a1.sinks.k1.hdfs.path=hdfs://master:9000/flume/event/%Y%m%d/%H
a1.sinks.k1.hdfs.filePerfix=flume- # 给上传的文件加前缀
# 设置文件滚动,不要产生大量小文件
a1.sinks.k1.hdfs.rollInterval=10 # 按照时间滚动文件,为0时不按照时间滚动
a1.sinks.k1.hdfs.rollSize=134217728 # 文件大小多大时滚动(单位:字节)
a1.sinks.k1.hdfs.rollCount=0 # 写入文件的时间数达到多少时滚动(一般设为0)
# 设置文件夹滚动
a1.sinks.k1.hdfs.round=true # 是否按照时间滚动文件夹,一般为true
a1.sinks.k1.hdfs.roundValue=1 # 设置多少时间单位创建一个新的文件夹
a1.sinks.k1.hdfs.roundUnit=hour # 重新定义时间单位second/minute/hour)
# 设置时间戳属性
a1.sinks.k1.hdfs.useLocalTimeStamp=True # 是否使用本地时间戳,默认False
# 防止乱码
a1.sinks.k1.hdfs.fileType=DataStream
kafka:
a1.sinks.k1.type=org.apache.flume.sink.kafka.KafkaSink#这是一个大K和一个大的S
a1.sinks.k1.topic=myTopic # 指定topic
# 创建生产者
a1.sinks.k1.brokerList=master:9092,slave1:9092,slave2:9092
a1.sinks.k1.kafka.producer.acks=1
a1.sinks.k1.kafka.producer.linger.ms=1
a1.sinks.k1.kafka.flumeBatchSize=20
avro类型
source为avro时:
接收Avro Sink发送来的数据
a1.sources.s1.type=avro
a1.sources.s1.bind=0.0.0.0 # ip地址,0.0.0.0绑定所有机器
a1.sources.s1.port=6666 # 本机接收端口
sink为avro时:
将本机数据由avro压缩发送到另一台机器
a1.sinks.k1.type=avro
a1.sinks.k1.hostname = master # 发送的IP地址
a1.sinks.k1.port=6666 # 发送端口
flume与kafka如何结合使用
编写好flume代码,
例:
从master的44444端口传入数据,传入hsx的主题里面,就可以消费了
顺序流程,运行flume,打开消费者,打开[port]的端口
a1.sources=r1
a1.sinks=k1
a1.channels=c1
#sources
a1.sources.r1.type=netcat
a1.sources.r1.bind=master
a1.sources.r1.port=44444
#sinks k1
a1.sinks.k1.type=org.apache.flume.sink.kafka.KafkaSink
a1.sinks.k1.topic=hsx
a1.sinks.k1.brokerList=master:9092,slave1:9092,slave2:9092
a1.sinks.k1.kafka.producer.acks=1
a1.sinks.k1.kafka.producer.linger.ms=1
a1.sinks.k1.kafka.flumeBatchSize=20
#sinks k2
#a1.sinks.k1.type=logger
#channels c1
a1.channels.c1.type=memory
#link
a1.sources.r1.channels=c1
a1.sinks.k1.channel=c1
~