Hadoop09:【案例】之定时上传数据到HDFS脚本

一、需求分析:

在实际工作中会有定时上传数据到HDFS的需求,我们有一个web项目每天都会产生日志文件,日志文件的格式为access_2020_01_01.log这种格式的,每天产生一个,我们需要每天凌晨将昨天生成的日志文件上传至HDFS上,按天分目录存储,HDFS上的目录格式为20200101

二、 思路:

针对这个需求,我们需要开发一个shell脚本,方便定时调度执行

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

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

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

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

第五步:配置crontab任务

三、脚本如下

脚本路径

mkdir -p /data/shell
cd /data/shell
vi uploadLogData.sh

内容如下:

#!/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}

四、进行测试

1、生成测试数据

注意,文件名称中的日期根据昨天的日期命名

cd /data/log
vi access_2022_02_28.log

log1
log2
log3

2、执行脚本

cd /data/shell/
sh -x uploadLogData.sh

Hadoop09:【案例】之定时上传数据到HDFS脚本_第1张图片

3、检查是否上传成功

hdfs dfs -ls /

Hadoop09:【案例】之定时上传数据到HDFS脚本_第2张图片

4、注意

如果想要指定日期上传数据,可以通过在脚本后面传递参数实现
首先创建测试数据

vi access_2022_02_01.log

log1
log2
log3

执行脚本

cd /data/shell
sh -x uploadData.sh 2022_02_01

Hadoop09:【案例】之定时上传数据到HDFS脚本_第3张图片

五、创建定时任务

crontab -e

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

Hadoop09:【案例】之定时上传数据到HDFS脚本_第4张图片
检查一下定时任务

crontab -l

在这里插入图片描述

你可能感兴趣的:(hadoop,hdfs,hadoop)