Shell定时上传日志到HDFS

一、任务需求

公司在线服务器每天都会产生网站运行日志,为了避免志文件过大,日志文件需按照群,后期再使用MapReduce计每小时进行回滚,现在要求每小时定时上传日志文件到算框架定时处理日志文件。

二、实现思路

在线服务器每小时滚动生成的访问日志文件名称为access.log,历史访问日志文件以时间为后缀精确到小时名称为access.log.2021-10-27-10。当前access.log会继续写入访问日志等待日志回滚,历史访问日志access.log.2021-10-27-10满足上传条件,可以先移动到待上传区间,然后再将待上传区间的文件上传至HDFS集群

三、具体实现流程

3.1 规划文件上传目录

  • 原始日志存放目录
[root@hadoop1 hadoop]# mkdir -p /usr/local/hadoop/data/tomcat/log/

在这里插入图片描述

  • 待传日志存放目录
[root@hadoop1 hadoop]# mkdir -p /usr/local/hadoop/data/unupload/log/

在这里插入图片描述

3.2 开发 shell 脚本

#!/bin/bash
#使得环境变量生效
source ~/.bashrc
#hadoop根目录
hadoop_home=/usr/local/hadoop/bin
#原始目录
log_src_dir=/usr/local/hadoop/data/tomcat/logs/
#待传目录
log_unupload_dir=/usr/local/hadoop/data/unupload/logs/
#hdfs日志存放路径
curDay=`date +%Y%m%d`
curHour=`date -d "1 hour ago" +"%H"`
hdfs_root_dir=/warehouse/web/ods/o_web_access_log_d/$curDay/$curHour/
#测试hdfs目录是否存在
$hadoop_home/hdfs dfs -test -e $hdfs_root_dir
if [ $? -eq 0 ] ;then
	echo 'directory is exist'
else
	$hadoop_home/hdfs dfs -mkdir -p  $hdfs_root_dir
fi

#第一步:将原始目录访问日志移动到待上传目录
ls $log_src_dir | while read logName
do
    if [[ "$logName" == access.log.* ]]; then
		suffix=`date +%Y_%m_%d_%H_%M_%S`
        #将原始目录文件移动到待上传目录
        mv $log_src_dir$logName $log_unupload_dir
        #将待上传文件路径写入文件logUploadPath中
        echo $log_unupload_dir"$logName" >> $log_unupload_dir"logUploadPath."$suffix
    fi
done
#第二步:将待上传目录中的访问日志上传至HDFS
ls $log_unupload_dir | grep logUploadPath |grep -v "_Ready_" | grep -v "_Done_" | while read logName
do
    #将待上传logUploadPath文件更名为logUploadPath_Ready_
    mv $log_unupload_dir$logName $log_unupload_dir$logName"_Ready_"
    #循环将logUploadPath_Ready_文件内容,上传至hdfs
    cat $log_unupload_dir$logName"_Ready_" |while read logName
    do
        $hadoop_home/hdfs dfs -put $logName $hdfs_root_dir
    done    
	#将准备上传logUploadPath_Ready_文件名,改为logUploadPath_Done_
    mv $log_unupload_dir$logName"_Ready_"  $log_unupload_dir$logName"_Done_"
done

3.3 授予 shell 可执行权限

[root@hadoop1 bin]# chmod u+x uploadAccessLogToHDFS.sh 

在这里插入图片描述

3.4 手动执行查看

[root@hadoop1 bin]# ./uploadAccessLog2HDFS.sh 

在这里插入图片描述

3.4 定时执行 shell 脚本

[root@hadoop1 bin]# crontab -e

添加内容如下所示:

5 * * * * /usr/locl/shell/bin/uploadLog2HDFS.sh

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

slb190623

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值