为了方便理解Flume如何实时监控Hivelog日志信息到Hdfs上面,先贴一张图供大家理解。
1,首先创建复合条件的flume配置文件,然后开启监控功能,flume会实时的监控Hive的日志文件,不断读取更新的日志文件到Hdfs文件系统。
第一步:既然Flume想要输出数据到Hdfs文件系统,必然会依赖Hadoop相关的jar包,所以我们首先把Flume依赖的jar包导入flume安装目录下的lib文件夹内,下面是依赖的jar包文件。
commons-configuration-1.6.jar、
hadoop-auth-2.7.2.jar、
hadoop-common-2.7.2.jar、
hadoop-hdfs-2.7.2.jar、
commons-io-2.4.jar、
htrace-core-3.1.0-incubating.jar
拷贝到/opt/module/flume/lib文件夹下
第二步:创建配置文件,此处创建的配置文件尽量在Flume下面建立一个文件夹放进去,应为后面需要用到创建的配置文件夹路径,以防丢失。
Notes:注:要想读取Linux系统中的文件,就得按照Linux命令的规则执行命令。由于Hive日志在Linux系统中所以读取文件的类型选择:exec即execute执行的意思。表示执行Linux命令来读取文件。
# Name the components on this agent
a2.sources = r2
a2.sinks = k2
a2.channels = c2
# Describe/configure the source
a2.sources.r2.type = exec//表明执行linusx命令来读取文件
a2.sources.r2.command = tail -F /opt/module/hive/logs/hive.log//此处是hive日志文件的路径
a2.sources.r2.shell = /bin/bash -c
# Describe the sink
a2.sinks.k2.type = hdfs
a2.sinks.k2.hdfs.path = hdfs://hadoop102:9000/flume/%Y%m%d/%H
#上传文件的前缀
a2.sinks.k2.hdfs.filePrefix = logs-
#是否按照时间滚动文件夹
a2.sinks.k2.hdfs.round = true
#多少时间单位创建一个新的文件夹
a2.sinks.k2.hdfs.roundValue = 1
#重新定义时间单位
a2.sinks.k2.hdfs.roundUnit = hour
#是否使用本地时间戳
a2.sinks.k2.hdfs.useLocalTimeStamp = true
#积攒多少个Event才flush到HDFS一次
a2.sinks.k2.hdfs.batchSize = 1000
#设置文件类型,可支持压缩
a2.sinks.k2.hdfs.fileType = DataStream
#多久生成一个新的文件
a2.sinks.k2.hdfs.rollInterval = 60
#设置每个文件的滚动大小
a2.sinks.k2.hdfs.rollSize = 134217700
#文件的滚动与Event数量无关
a2.sinks.k2.hdfs.rollCount = 0
# Use a channel which buffers events in memory
a2.channels.c2.type = memory
a2.channels.c2.capacity = 1000
a2.channels.c2.transactionCapacity = 100
# Bind the source and sink to the channel
a2.sources.r2.channels = c2
a2.sinks.k2.channel = c2
第三步:执行监控的配置文件
bin/flume-ng agent -c conf/ -n a2 -f /opt/module/flume-1.7.0/job/flume-hive-hdfs.conf
//命令说明:-c代表配置文件,-n代表agent进程的名字,-f代表配置文件所在的目录,
//注意:根据自己的配置文件所在的目录做相应的修改
第四步:第三步我们已经启动了Flume,下面我们在开启hive进程即可,现在查看我们的Hdfs文件系统上面,是不是多出来了一个名字叫做flume的文件夹呢?这个文件夹就是我们在配置文件里面配置过的文件夹,当然也可以做相应的修改,点击进去就可以查看到Hive输出的日志文件了。
尖叫提示:在启动的时候要先启动flume进程,然后在启动Hive进程,否则有可能看不到输出的日志文件,只有先让flume监听log文件夹,文件夹内已有文件,他才会输出到Hdfs文件系统。