在配置Flume采集Hive日志数据时,我们会遇到这种问题,明明在Linux命令行上成功运行Flume指令,但是当我们查看HDFS文件系统时却发现并没有相关的文件被创建和写入。
其实造成这种现象的原因主要是以下两点:
1、没有为hive指明日志存储路径或在hive-flume-hdfs.conf中没有设置正确的日志索引
2、执行的flume语句不规范
以下就是对该问题的解决
1.hive日志文件存放位置不当
首先打开文件夹
cd /usr/local/hive/conf
通常hive的日志配置文件存放在log4j.properties或hive- log4j.properties中
查看该文件vim log4j.properties
此配置项即为hive日志存放路径,记住该路径后面要用!!!
如果没有该文件或该内容可自行创建
cd /usr/local/hive
mkdir logs
vim hive.log
cd /usr/local/hive/conf/log4j.properties
粘贴如下内容
log4j.rootLogger=WARN, RF
# 配置 RollingFileAppender
log4j.appender.RF=org.apache.log4j.RollingFileAppender
log4j.appender.RF.File=/usr/local/hive/logs/hive.log
log4j.appender.RF.MaxFileSize=10MB
log4j.appender.RF.MaxBackupIndex=10
log4j.appender.RF.layout=org.apache.log4j.PatternLayout
log4j.appender.RF.layout.ConversionPattern=%d{ISO8601} %-5p [%t] %c: %m%n
检验配置是否生效
开启hadoop集群,如果已经开启请关闭后重启
start-all.sh
开启hive,并查看日志文件
hive
show databases;
create database test;
exit;
cat /usr/local/hive/logs/hive.log
出现类似以上内容即为正常
以上都是对hive中没有明确定义hive日志位置的解决,但是即使我们明确配置了hive的日志文件位置却依然无法解决问题。
2.flume相关文件配置不当
下面我们就需要对hive-flume-hdfs.conf文件进行配置
cd /usr/local/flume/conf
vim hive-flume-hdfs.conf
这个路径因人而异,要记住,后面要用
文件内容如下
a2.sources=r2
a2.sinks=k2
a2.channels=c2
a2.sources.r2.type = exec
a2.sources.r2.command = tail -F /var/log/mariadb/mariadb.log
a2.sources.r2.shell = /bin/bash -c
a2.channels.c2.type = memory
a2.channels.c2.capacity = 1000
a2.channels.c2.transactionCapacity= 100
a2.sinks.k2.type= hdfs
a2.sinks.k2.hdfs.path = hdfs://master: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 = 100
#⽂件格式
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
a2.sources.r2.channels = c2
a2.sinks.k2.channel = c2
这个位置需要大家更改成我们原先设置hive日志文件储存的路径。
3.操作指令不当
到这里,我们已经基本完成对相关错误的修改,但是在我们实际运行时,可能会由于输入指令不规范,导致flume集群没有正常开启,导致我们使用flume采集hive日志时遇到问题。
如果是按照以上步骤配置的话,推荐指令如下:
cd /usr/local/flume/bin/
./flume-ng agent --conf ../conf/ --name a2 --conf-file ../conf/hive-flume-hdfs.conf
另外开启新终端,开启hive连接服务
hiveserver2
然后打开hive,进行一些基础操作指令
随后进入HDFS网页,即可查看到相关目录