日志文件:access_2020_01_01.log HDFS中的目录格式为:20200101

想要完成定时上传日志到HDFS的功能,我们需要开发shell脚本实现,使用Linxu的crontab功能定时执行。

  1. 我们需要获取到昨天的日志文件的名称
  2. 在HDFS上面使用昨天的日期创建目录
  3. 将昨天的日志文件上传到刚创建的HDFS目录中
  4. 要考虑脚本重跑,补数据的情况
  5. 配置crontab任务
#!/bin/bash
# 获取昨天日期字符串
yesterday=$1
if [ "$yesterday" = "" ]
then
	yesterday=`date +%Y_%m_%d --date="1 days ago"`
fi

# 拼接日志文件路径信息
logPath=/data/log/access_${yesterday}.log

# 将日期中的_去掉
hdfsPath=/log/${yesterday//_/}
# 在hdfs上创建目录
hdfs dfs -mkdir -p ${hdfsPath}
# 将数据上传到hdfs的指定目录中
hdfs dfs -put ${logPath} #{hdfsPath}

最后配置crontab定时任务,每天凌晨1点执行,>> /data/shell/uploadLogData.log是保存错误日志

0 1 * * * root sh /data/shell/uploadLogData.sh >> /data/shell/uploadLogData.log