博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
shell脚本监控Flume输出到HDFS上文件合法性
阅读量:5265 次
发布时间:2019-06-14

本文共 1377 字,大约阅读时间需要 4 分钟。

在使用flume中发现由于网络、HDFS等其它原因,使得经过Flume收集到HDFS上得日志有一些异常,表现为:

1、有未关闭的文件:以tmp(默认)结尾的文件。加入存到HDFS上得文件应该是gz压缩文件,以tmp为结尾的文件就无法使用;

2、有大小为0的文件,比如gz压缩文件大小为0,我们单独拿下这个文件解压发现是无限循环压缩的。。。这个也不能直接用来跑mapreduce

目前发现上述两种情况,其它还暂未发现。至于出现上述情况还没明确原因,且这两种情况都会影响hive、MapReduce的正常执行,2的话直接failed,1的话有可能丢失对应的数据。

针对2直接删掉就行;1中的情况我们发现直接去掉tmp后缀是可以的。为此编写了一个shell脚本,定时检查HDFS上得文件发现1就去掉tmp后缀,发现2就删除文件,脚本如下:

1 #!/bin/sh 2  3 cd `dirname $0` 4  5 date=`date -d "1 day ago" +%Y/%m/%d` 6 echo " date is ${date}" 7 HADOOP_HOME=/usr/lib/hadoop-0.20-mapreduce/ 8 dataDir=/data/*/ 9 echo "dir is ${dataDir}"10 echo "check hdfs file is crrect?"11 12 IFS=$'\n';for name in `${HADOOP_HOME}/bin/hadoop fs -ls ${dataDir}${date}`13 do14     size=`echo "${name}" | awk '{print $5}'`15     fileAllName=`echo "${name}" | awk '{print $8}'`16     fileNameNoTmp=`echo ${fileAllName%.tmp*}`17     tmp=`echo ${fileAllName#*.gz}`18     if [ "${size}" == "0" ];then19         echo "${fileAllName} 's size is ${size} ..... delete it!"20         ${HADOOP_HOME}/bin/hadoop fs -rmr ${fileAllName}21     fi22     if [ "${tmp}" == ".tmp" ];then23         ${HADOOP_HOME}/bin/hadoop fs -mv ${fileAllName} ${fileNameNoTmp}24         echo "${fileAllName} has changed to ${fileNameNoTmp}......."25     fi26 done

注:上述的地8行,hdfs支持正则的。上述的HDFS目录是:/data/*/2014/12/08这样的,大伙可以根据自己的需要修改

可以使用crontab 定时检查一下。

转载于:https://www.cnblogs.com/lxf20061900/p/4157305.html

你可能感兴趣的文章
springboot + mybatis
查看>>
awk 统计
查看>>
CSS min-height 属性
查看>>
SDN第一次作业
查看>>
模板设计模式的应用
查看>>
【井字游戏】做一款回忆童年的游戏
查看>>
高性能的异步爬虫
查看>>
数据结构(二):栈
查看>>
实训第五天
查看>>
平台维护流程
查看>>
SQL (FMDB)
查看>>
2012暑期川西旅游之总结
查看>>
Linux发行版的排行
查看>>
宾得镜头大全与发展史
查看>>
spread+wackamole打造全新高可用+负载均衡
查看>>
sql语句中的left join,right join,inner join的区别
查看>>
Xcode 快捷键及代码格式化
查看>>
12010 解密QQ号(队列)
查看>>
javascript performence
查看>>
Docker简明教程(以安装wget程序为例)
查看>>