当前位置: 首页 > news >正文

Shell定时上传日志到HDFS

Shell定时上传日志到HDFS

  • 一、任务需求
  • 二、实现思路
  • 三、具体实现流程
    • 3.1 规划文件上传目录
    • 3.2 开发 shell 脚本
    • 3.3 授予 shell 可执行权限
    • 3.4 手动执行查看
    • 3.4 定时执行 shell 脚本

一、任务需求

公司在线服务器每天都会产生网站运行日志,为了避免志文件过大,日志文件需按照群,后期再使用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 ] ;thenecho 'directory is exist'
else$hadoop_home/hdfs dfs -mkdir -p  $hdfs_root_dir
fi#第一步:将原始目录访问日志移动到待上传目录
ls $log_src_dir | while read logName
doif [[ "$logName" == access.log.* ]]; thensuffix=`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."$suffixfi
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_文件内容,上传至hdfscat $log_unupload_dir$logName"_Ready_" |while read logNamedo$hadoop_home/hdfs dfs -put $logName $hdfs_root_dirdone    #将准备上传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

http://www.lryc.cn/news/417474.html

相关文章:

  • 前端day3-表格
  • 多进程系列:一个进程对应一个函数
  • 数据清洗与预处理:确保数据质量的关键步骤
  • 《PostgreSQL 数据库在国内的发展前景》
  • LVS部署DR集群
  • 《Linux运维总结:etcd 3.5.15集群数据备份与恢复》
  • 我在杭州的Day30_进程间通信(IPC)——20240805
  • FFmpeg推流
  • 【Rust光年纪】简化文件操作流程:深度剖析多款文件系统操作库
  • FFmpeg实现文件夹多视频合并
  • [设备] 关于手机设备中几种传感器的研究
  • C#通过Modbus读取温度和湿度
  • 海量数据处理商用短链接生成器平台 - 9
  • 从困境到突破,EasyMR 集群迁移助力大数据底座信创国产化
  • 【Mysql】第十二章 视图特性(概念+使用)
  • 【颠覆数据处理的利器】全面解读Apache Flink实时大数据处理的引擎-上篇
  • 【C++】C++11(可变参数模板、lambda表达式、包装器)
  • 矩阵获客时代,云微客让你一个人成就一支队伍
  • 浅谈基础的图算法——Tarjan求强联通分量算法(c++)
  • 【Godot4自学手册】第四十四节用着色器(shader)实现溶解效果
  • 【画流程图工具】
  • Revit二次开发选择过滤器,SelectionFilter
  • 【Linux】进程概念—环境变量
  • 第十二章 Spring MVC 框架扩展和SSM框架整合(2023版本IDEA)
  • js中的全局函数有这些
  • Android SurfaceFlinger——重绘闪烁处理(四十六)
  • 罗马数字转整数 C++
  • Day20_2--介绍同步加载和异步加载
  • sftp做成一个池子
  • 全网最全-Netty从入门到精通