如何将数据定时传到hdfs中?用一个简单的脚本来实现

假设日志文件:

access_2024_06_03.log

HDFS中的目录格式为:

20240603

总共分为五个步骤

第一步:我们需要获取到昨天的日志文件的名称

#获取昨天日期
yesterday=`date +%Y_%m_%d --date="1 days ago"`
#拼接日志文件的路径信息
logPath=/data/log/access_${yesterday}.log

日志文件我们在/data/log/目录里创建

第二步:在HDFS上面使用昨天的日期创建目录

#将日期字符串中的_去掉,并且拼接成hdfs路径
hdfsPath=/log/${yesterday//_/}
#在hdfs上创建目录
hdfs dfs -mkdir -p ${hdfsPath}

第三步:将昨天的日志文件上传到刚创建的HDFS目录中

hdfs dfs -put ${logPath} ${hdfsPath}

第四步:要考虑脚本重跑,补数据的情况

#这里我们尝试从命令行参数中获取昨天日期
yesterday=$1
#如果命令行参数为空字符串
if["$yesterday"=" "]
then
#如果为空,则使用date命令生成前一天的日期
	yesterday=`date+%Y_%m_%d --date="1 days ago"`
fi

第五步:配置crontab任务

在每天的凌晨1点自动上传

我设置的是每天一点执行

完整脚本如下

#获取昨天日期
yesterday=$1
if[" $yesterday"="" ]
then
	yesterday=`date +%Y_%m_%d --date="1 days ago"`
fi
#拼接日志文件路径信息
logPath=/data/log/access_${yesterday}.log
#将日期字符串中的_去掉,并且拼接成hdfs路径
hdfsPath=/log/${yesterday//_/}
#在hdfs上面创建目录
hdfs dfs -mkdir -p ${hdfsPath}
#将 数据上传到hdfs的指定目录
hdfs dfs -put ${logPath} ${hdfsPath}

运行效果如下:

上传指定日期的数据到hdfs中

全部评论

相关推荐

点赞 评论 收藏
分享
04-17 18:32
门头沟学院 Java
野猪不是猪🐗:他跟你一个学校,你要是进来之后待遇比他好,他受得了?
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务