hdfs日志上传脚本(二)

简介:
写了一个从服务器上拉日志的脚本, 从多台服务器上拉日志,日志名称是相同的,且每天有两个日志文件生成,如每台服务器上都有如下两个文件:ok_2011-04-24_24H.rar,ok_2011-04-24_12H.rar。显然不能把所有日志放到同一目录中进行处理,而且要同时解压两个文件后才能进行下一步处理,我想到了使用awk打印出相应命令,然后再执行。
 
  1. #!/bin/bash 
  2. #2011-04-25 by qinshan.li 
  3. #download the track log 
  4. DIR="22 33 45 46 47 135 136 137" 
  5. DAY=$(/bin/date +%F) 
  6. #DAY=$(echo $1) 
  7.  
  8. for P in $DIR; do 
  9.   [[ -d "/lzo/jiaxing/track/$P" ]] || /bin/mkdir -p /lzo/jiaxing/track/$P 
  10.   MULU=/lzo/jiaxing/track/$P 
  11.  
  12. #Download the rar files. 
  13.   /usr/bin/wget -nc -r --exclude-directories=tmplog -nd -np -A "ok_${DAY}_*.rar" -P $MULU http://10.10.17.66:8003/"$P"/track/ 
  14.  
  15. #Create directory to save the decompressed rar files. 
  16.   n=$(/bin/ls $MULU/*.rar 2>/dev/null |/usr/bin/wc -l) 
  17.   if [[ "$n" != "0" ]]
  18. then 
  19.   [[ -d $MULU/$DAY ]] || /bin/mkdir -p $MULU/$DAY 
  20.  
  21.   /usr/bin/find $MULU -name "*${DAY}*.rar" |/bin/awk '{printf "/usr/local/bin/rar e %s %s/%s\n",$1,"'$MULU'","'$DAY'"}' |/bin/sh >/dev/null 
  22.   if [[ "$?" = "0" ]]
  23. then 
  24.   if /bin/cat $MULU/$DAY/*.* >>$MULU/66_icast_"$P"_"$DAY".txt
  25. then
  26.     if /usr/local/bin/lzop -U -9 $MULU/66_icast_"$P"_"$DAY".txt 
  27.     then 
  28. if /usr/local/bin/lzop -t $MULU/66_icast_"$P"_"$DAY".txt.lzo 
  29.       then 
  30.       ~/hadoop-0.20.2-CDH3B4/bin/hadoop fs -moveFromLocal $MULU/66_icast_"$P"_"$DAY".txt.lzo /log/source/iCast_iFocus_track 
  31.         if [[ "$?" = "0" ]]
  32. then 
  33.         rm -rf $MULU/*  >/dev/null 2>&1
  34.         fi 
  35.        fi 
  36.       fi 
  37.     fi 
  38.     fi 
  39.   fi 
  40. done 
   这个脚本没有再使用wget的-N参数,因为同事告诉我,这里的日志虽然是以HTTP方式提供,但时间戳标记是关闭的,所以-N参数是没有用的。
   添加了-nc参数,wget会忽略已经下载过的文件,当然,这可能会导致一个问题,就是该文件在上次下载后已经更新,但wget仍然会忽略它,不过这种情况非常少见。
   这次也没有再使用awk的substr函数来提取字段,是因为这次R 目录长度不同,不如直接使用$MULU和$DAY方便。要说明的是,$MULU这个变量,原来写的是$PATH,但是后来在执行hadoop的fs命令进行上传操作时,报了错误,它把$PATH变量解释成了环境变量的$PATH!看来,在设置自定义变量时要慎之又慎啊!

本文转自 li_qinshan 51CTO博客,原文链接:http://blog.51cto.com/share/554160
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
18天前
|
Linux Shell
Linux手动清理Linux脚本日志定时清理日志和log文件执行表达式
Linux手动清理Linux脚本日志定时清理日志和log文件执行表达式
72 1
|
3月前
|
存储
优秀开源日志平台GrayLog5.0一键安装脚本
优秀开源日志平台GrayLog5.0一键安装脚本
89 0
|
5月前
|
关系型数据库 MySQL Shell
如何用shell脚本获取mysql的binlog日志
如何用shell脚本获取mysql的binlog日志
63 1
|
4月前
|
Kubernetes Shell Linux
linux|shell脚本|有趣的知识---格式化输出日志和脚本调试方法以及kubernetes集群核心服务重启和集群证书备份脚本
linux|shell脚本|有趣的知识---格式化输出日志和脚本调试方法以及kubernetes集群核心服务重启和集群证书备份脚本
58 0
|
2月前
|
Java Shell Perl
使用shell脚本给日志文件瘦身
使用shell脚本给日志文件瘦身
|
3月前
|
Linux Shell
开源日志平台GrayLog5.1.10 CentOS7一键安装脚本
开源日志平台GrayLog5.1.10 CentOS7一键安装脚本
96 0
|
3月前
|
Linux
开源日志平台GrayLog5.1.7 CentOS7一键安装脚本
开源日志平台GrayLog5.1.7 CentOS7一键安装脚本
81 1
|
3月前
开源日志平台GrayLog5.1.2一键安装脚本
开源日志平台GrayLog5.1.2一键安装脚本
48 0
|
9月前
|
Linux Shell Docker
chatgpt Linux 定时任务 清理rancher pod启动服务的日志文件 脚本
chatgpt Linux 定时任务 清理rancher pod启动服务的日志文件 脚本
|
5月前
|
应用服务中间件 Shell 网络安全
用shell脚本获取Nginx日志
用shell脚本获取Nginx日志
58 1