flume传数据到hdfs

背景:flume可以实时的收集文件并传到hdfs上,它是一个高可靠的,分布式的海量日志采集、聚合和传输的系统。它可实现流式处理。自动故障转移。

1.首先安装好flume,因为是flume用java写的,所以要配置下jdk

2.运行时只要写好配置文件,agent.conf,然后用命令运行就行了

flume有三个组件source、channel、sink在agent.conf里需要配置好这3个组件。他们的作用如下所所示

flume传数据到hdfs_第1张图片

channel是一个队列,可以收集多个source,但是只能连接一个sink,当数据过大时就保证了它的高可用性。

flume传数据到hdfs_第2张图片

3.写agent.conf文件(在flume目录下的conf目录下有一个,样本flume-conf.properties.template,可作参考修改)

vi agent.conf   (内容如下)

#定义3个组件的名称(仅仅是个名称,与下方的名称相对应)

agent.sources = source1

agent.channels = channel1

agent.sinks = sink1

#定义sources

agent.sources.source1.type = spooldir             #spooldir的方式可实时监控目录下的文件,还有很多其它方式

agent.sources.source1.spoolDir=/opt/data/jiang    #要监控的目录

agent.sources.source1.ignorePattern=^(.)*\\.txt$    #只监控.txt的文件(可换其它后缀)

# 定义channels

agent.channels.channel1.type = file    #存放格式

agent.channels.channel1.checkpointDir = /opt/data/checkpoint     #channel的存放目录

agent.channels.channel1.dataDirs = /opt/data/checkpoint/data

#定义sink

agent.sinks.sink1.type = hdfs     #放到hdfs上

#这里的%Y%m%d 是日期变量。可生成不同时间戳的目录

agent.sinks.sink1.hdfs.path = hdfs://192.168.1.1:8020/user/jiang/flume/data/%Y%m%d       

agent.sinks.sink1.hdfs.fileType = DataStream

agent.sinks.sink1.hdfs.writeFormat = Text

agent.sinks.sink1.hdfs.batchSize = 10

#用时间变量的话,这个必须设置成true

 agent.sinks.sink1.hdfs.useLocalTimeStamp = true

#对应 source 和 sink到channel

agent.sources.source1.channels =channel1

agent.sinks.sink1.channel = channel1

4.执行agent.conf的命令

flume-ng agent 

--conf conf                      #配置文件的目录

--conf-file agent.conf   #文件名字

--name agent             #agent的名字,跟上边对应

-Dflume.root.logger=INFO,console

你可能感兴趣的:(hadoop)