Flume学习之安装和使用

简介:

Flume是Clouder提供的分布式日志采集系统。支持在日志系统中定制各类数据发送方,用于收集数据。

核心概念:

Agent:使用 JVM 运行 Flume。每台机器运行一个 Agent,但是可以在一个 Agent 中包含多个 Sources 和 Sinks。

Client:生产数据,运行在一个独立的线程中。

Source:从Client收集数据,传递给Channel。

Channel:连接Sources和Sinks

Sink:从Channel收集数据,运行在一个独立线程中。

Events:可以是日志记录、Avro对象等。

安装:

下载安装包:http://www.apache.org/dyn/closer.lua/flume/1.7.0/

我下载的是:http://www.apache.org/dyn/closer.lua/flume/1.7.0/apache-flume-1.7.0-bin.tar.gz

上传至Linux服务器,并解压

cd apache-flume-1.7.0-bin/conf/
#复制一份模板
cp flume-env.sh.template flume-env.sh
#打开配置文件
vim flume-env.sh

Flume学习之安装和使用_第1张图片

#配置环境变量
vim /home/lpp/.bash_profile

Flume学习之安装和使用_第2张图片

source /home/lpp/.bash_porfile
#验证是否配置成功
flume-ng version
#出现版本号就是成功

#具体实现
#该案例是,使用 Avro Source 接收外部数据源,Logger 作为 Sink,即通过 Avro RPC 调用,将数据缓存在 Channel 中,然后通过 Logger 打印出调用发送的数据。
#flume-conf.properties.template 是一个agent配置文件的模板,可以进行查看。我是自己创建的一个
touch avro.conf
#如下是内容
#agent1是agent的名字,可以是随便起,但是要保持一致,agent1.XXXX=别名,这相当于给所有的组件起的别名
agent1.sources = avro_source1
agent1.channels = memory_ch1
agent1.sinks = log_sink1

#设置sources类型
agent1.sources.avro_source1.type = avro
agent1.sources.avro_source1.channels = memory_ch1

#  使用avro的source需要说明被监听的主机IP和端口号
#  监听的主机名或IP地址。0.0.0.0 代表所有不清楚的主机和目的网络,即表示整个网络,也就是网络中的所有主机。
agent1.sources.avro_source1.bind=0.0.0.0
#  监听端口号
agent1.sources.avro_source1.port=4141

#  Logger Sink 记录 INFO 级别的日志,一般用于调试。

agent1.sinks.log_sink1.type = logger
agent1.sinks.log_sink1.channel = memory_ch1

## Use a channel which buffers events inmemory,channel为内存的一块空间

agent1.channels.memory_ch1.type = memory

#  Capacity为最大容量,transCapacity为Channel每次提交的Event的最大数量,Capacity>= transCapacity

agent1.channels.memory_ch1.capacity=1000
agent1.channels.memory_ch1.transactionCapacity=100
#内容到这里就结束了,保存退出就好了。


#启动Flume Agent
flume-ng agent -n agent1 -c conf -f conf/avro.conf -Dflume.root.logger=INFO,console
#-n:指定 agent 名字为 agent1,需要与 avro.conf 中设置的一致
#-c:指定配置文件目录为 conf
#-f:指定配置文件目录为 conf
#-D...:指定 DEBUG 模式在 console 输出 INFO 信息

#运行成功后,不要关闭当前的进程,打开另一个终端,也就是模仿client端
echo "hello shiny" > /home/lpp/Desktop/test/avro.txt

flume-ng avro-client -c conf -H 0.0.0.0 -p 4141 -F /home/lpp/Desktop/test/avro.txt
#可以在Agent端看到以下的界面

另一个实例:

监听一个指定的目录,即只要应用程序向这个指定的目录中添加新的文件,Source 组件就可以获取到该信息,并解析该文件的内容,然后写入到 Channel,最后上传到 HDFS 上。写入完成后,标记该文件已完成或者删除该文件。

Spool 监测配置的目录下新增的文件,并将文件中的数据读取出来。需要注意两点:

(1) 拷贝到 Spool 目录下的文件不可以再打开编辑;

(2) Spool 目录下不可包含相应的子目录。

先创建你要监听的目录:

mkdir /home/lpp/flumedata/

在conf/目录下创建:

touch spooldir.conf
#内容如下:
#同上
agent1.sources = spool_source1
agent1.channels = memory_ch1
agent1.sinks = hdfs_sink1



agent1.sources.spool_source1.type = spooldir
# 配置目录 source,监控目录的变化(目录必须提前创建好),要求文件名必须唯一,否则 Flume 报错
agent1.sources.spool_source1.spoolDir=/home/lpp/flumedata

# 配置往memory_ch1传输数据
agent1.sources.spool_source1.channels = memory_ch1
# 是否在 Event 的 Header 中添加文件名,boolean 类型,默认为 false
agent1.sources.spool_source1.basenameHeader = true

# 若是 Event 中有了Header(basenameHeader配置为true)时,Event 的 Header 会存储文件名的信息,默认的 key 为basename,value 为文件的名字(不含目录部分),即 basename=文件名
agent1.sources.spool_source1.basenameHeaderKey = basename

## Describe the sink
agent1.sinks.hdfs_sink1.type = hdfs
# 数据存放在HDFS上的目录:/flumedata/日期
agent1.sinks.hdfs_sink1.hdfs.path=hdfs://hadoop01:9000/flumedata/%Y-%m-%d

# 前缀名用上传之前的文件名
agent1.sinks.hdfs_sink1.hdfs.filePrefix = %{basename}

# 数据流格式,默认为sequenceFile,但里面的内容无法直接打开浏览
agent1.sinks.hdfs_sink1.hdfs.fileType=DataStream

# 文件写入格式包括 Text
agent1.sinks.hdfs_sink1.writeFormat=TEXT

# 按时间滚动文件,单位秒,默认30秒, 0不滚动
agent1.sinks.hdfs_sink1.hdfs.rollInterval=0
# 按文件大小滚动文件,单位字节,10M=10485760B
agent1.sinks.hdfs_sink1.hdfs.rollSize=10485760
# 当events个数达到该数量时,将临时文件滚动成目标文件,默认是10,0为不基于消息个数
agent1.sinks.hdfs_sink1.hdfs.rollCount=0

# 超时后关闭无效文件,0 为禁止自动关闭闲置的文件
agent1.sinks.hdfs_sink1.hdfs.idleTimeout=60
# HDFS Sink 是否使用当地的时间,默认为false
agent1.sinks.hdfs_sink1.hdfs.useLocalTimeStamp=true
# 配置从memory_ch1接收数据
agent1.sinks.hdfs_sink1.channel = memory_ch1

## Use a channel which buffers events inmemory,channel为内存的一块空间
agent1.channels.memory_ch1.type = memory

agent1.channels.memory_ch1.capacity=1000
agent1.channels.memory_ch1.transactionCapacity=100
#内容到这里就结束了

启动Flume Agent

flume-ng agent -n agent1 -c conf -f conf/spooldir.conf -Dflume.root.logger=INFO,console

在监控目录中上传文件,最好》10M

cp rating.json /home/lpp/flumedata/

在web UI界面上可以看到
Flume学习之安装和使用_第3张图片

在执行过程中可以看到XXX.tmp,这是未执行完。我们可以看到最后一个文件的大小没有10M,这和我们设置的配置文件,我们设置的是10M就滚动文件,但是也设置了超时后关闭无效文件,如果不设置,最后一个文件就是永远会是XXX.tmp文件了。文件名raing.json.XXX和我们设置的前缀名是相关的。

你可能感兴趣的:(hadoop)