linux本地日志文件定时上传至HDFS
背景
项目中需要定时将本地文件上传至HDFS系统,按时间进行分目录存放,即每月1号生成一个月的目录,然后将这个月每天的数据存放在此目录下
实现逻辑: 通过判断当天日期,如果为本月一号,即先生成一个月的文件,然后再将数据存放在此目录下,如果不是当月1号,则直接把数据put到该目录下
export PATH =/opt/soft/hadoop-2.7.7/bin DAY=`date +%d` #获取当天日期 date=$(date -d "yesterday" +%Y%m%d) #获取昨日日期 if [ $DAY -eq 1 ] #判断是否为1号,不等于直接 -eq 改为<> then /opt/soft/hadoop-2.7.7/bin/hdfs dfs -mkdir /flume/data/logs/`date +%Y%m` #新建目录 /opt/soft/hadoop-2.7.7/bin/hdfs dfs -mkdir /flume/data/logs/`date +%Y%m`/`date +%Y%m%d` /opt/soft/hadoop-2.7.7/bin/hadoop dfs -put /opt/data/wfbmall/16/history/wfbmall_${date}.log /flume/data/logs/`date +%Y%m`/wfbmall_${date}.log #put本地文件 echo today first day of this month else /opt/soft/hadoop-2.7.7/bin/hdfs dfs -mkdir /flume/data/logs/`date +%Y%m`/`date +%Y%m%d` #date=$(date -d "yesterday" +%Y%m%d) /opt/soft/hadoop-2.7.7/bin/hadoop dfs -put /opt/data/wfbmall/16/history/wfbmall_${date}.log /flume/data/logs/`date +%Y%m`/wfbmall_${date}.log #直接put本地目录 echo ${date} echo today is not first day of this month fi