如何将数据定时传到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中