山西中小学网站建设,网站和域名都注册怎么连接成网址,镇江平台搭建,涟水县住房和城乡建设局网站Shell定时上传日志到HDFS 一、任务需求二、实现思路三、具体实现流程3.1 规划文件上传目录3.2 开发 shell 脚本3.3 授予 shell 可执行权限3.4 手动执行查看3.4 定时执行 shell 脚本 一、任务需求
公司在线服务器每天都会产生网站运行日志#xff0c;为了避免志文件过大#… 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 规划文件上传目录
原始日志存放目录
[roothadoop1 hadoop]# mkdir -p /usr/local/hadoop/data/tomcat/log/待传日志存放目录
[roothadoop1 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日志存放路径
curDaydate %Y%m%d
curHourdate -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.* ]]; thensuffixdate %Y_%m_%d_%H_%M_%S#将原始目录文件移动到待上传目录mv $log_src_dir$logName $log_unupload_dir#将待上传文件路径写入文件logUploadPath中echo $log_unupload_dir$logName $log_unupload_dirlogUploadPath.$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 可执行权限
[roothadoop1 bin]# chmod ux uploadAccessLogToHDFS.sh 3.4 手动执行查看
[roothadoop1 bin]# ./uploadAccessLog2HDFS.sh 3.4 定时执行 shell 脚本
[roothadoop1 bin]# crontab -e添加内容如下所示
5 * * * * /usr/locl/shell/bin/uploadLog2HDFS.sh