需求背景

每天产生3T(约2.5W个gz压缩文件)的DPI日志文件,因存储等各种问题,需要尽可能的节约存储。日志文件中有26个字段,根据业务需求需要提取6个字段。


解决方法

  1. 通过shell脚本
  2. 通过MR程序(推荐,本篇不做论述)

结论: 经验证得出的结论shell脚本大约5~10S处理一个文件,比较慢,对于这样大量且分散的情况,不推荐,但可以提供一个思路。
根据实际情况处理步骤包括:从hdfs获取文件到本地存储,解压gz文件,通过awk逐行扫描获取所需字段,重定向到文本文件,删除解压后的文件以便节省空间。


粗略Shell实现

#!/bin/sh
##############################
## 名称: PickDataFromHdfs
## 描述:
## 参数: 日期 [20160104]
## 日期: 2016-01-04
###############################外部参数
day_id=$1
echo $day_id#统计
curtime=`date +%Y%m%d%H%M%S`#将目录保存到文件
echo "Get File List begin:$curtime"
DIR="/home/hadoop/netlog/source/${day_id}"
hadoop fs -ls ${DIR}|awk '{print $8}' > fileList.txt# 第一行数据为空,删掉
sed -i  '1d' fileList.txt
echo "the first line is empty ,delte it successfully"#本地存储目录
LOCAL_DIR="/home/zte/DPI_DATA_EXTRA/dpi_data_temp"
#循环遍历,提取所需数据
cat  /home/zte/DPI_DATA_EXTRA/fileList.txt | while read line
doecho "*****************$line  beigin  ${curtime}*****************"#获取hdfs文件  copyToLocal  get都可以hadoop fs -get $line  $LOCAL_DIRecho "${line}    is moved  to   ${LOCAL_DIR} successfully"#解压(未解压待验证)cd $LOCAL_DIRFileGZ=`ls  $LOCAL_DIR`#gunzip gunzip $FileGZ#逐行提取所需字段File=`ls  $LOCAL_DIR`echo "decompress file name :$File"awk -F'|' '{print $1,$8,$11,$16,$25,$26}'  ${File} >>/home/zte/DPI_DATA_EXTRA/dpi_data_extra/picked_data.txtecho " ${File}  data picked finished"#节省空间 删除原始文件rm -rf ${File} echo "${File} is deleted successfully"# 文件上传到hive TODOend=`date +%Y%m%d%H%M%S`echo "+++++++++++++the Job   finishes , ${end}++++++++++++++++++++++++++"echo "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
done

截取:
/home/hadoop/netlog/source/20151229/2015122907591300361017015.txt.gz
获取2015122907591300361017015:

 awk -F / '{print $7}' fileList.txt|cut -d. -f1 

Shell遍历hadoop目录的批量操作相关推荐

  1. Ruby和SHELL中如何遍历指定目录的文件

    在工作中我们有在Ruby和SHELL中如何遍历指定目录的文件的需求,这个应该如何来实现呢?网上的方法也非常之多,我们可以拿来参考参考,如下边的traverse.rb文件内容所示: #!/usr/bin ...

  2. 如何遍历给定目录中的文件?

    本文翻译自:How can I iterate over files in a given directory? I need to iterate through all .asm files in ...

  3. 路径遍历(目录遍历)

    一.简介 路径遍历攻击也称为目录遍历,旨在,访问存储在web根文件夹之外的文件和目录.通过操纵带有"点-斜线(-)"序列及其变化的文件或使用绝对路径来引用文件的变量,来访问存储在文 ...

  4. linux shell 获取表,bash - 如何获取shell脚本中目录中的文件列表?

    bash - 如何获取shell脚本中目录中的文件列表? 我试图使用shell脚本获取目录的内容. 我的脚本是: for entry in `ls $search_dir`; do echo $ent ...

  5. shell访问php文件夹,Shell获取某目录下所有文件夹的名称

    Shell获取某目录下所有文件夹的名称以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Shell获取某目录下所有文件夹的 ...

  6. 【工具类】遍历扫描目录下全部文件并列出

    package test20140715;import java.io.File;import org.junit.Test; /*** 遍历扫描目录下全部文件并列出* @author fushihu ...

  7. c++ 遍历多级目录

    参考:https://blog.csdn.net/sazass/article/details/100163264 TraverseDirectory可以遍历多级目录 getFiles不能遍历多级目录 ...

  8. php遍历指定目录中的内容2

    输出文件是否可读写,可执行,并同时输出创建时间,修改时间,访问时间 //2.遍历指定目录中的内容 if ($arr['file']) {$arrbyte = array("Byte" ...

  9. 目录遍历漏洞:入侵检测php程序中的目录遍历漏洞,目录浏览(目录遍历)漏洞

    目录浏览(目录遍历)漏洞 来源:信管网 2019年08月26日 [所有评论] 目录浏览漏洞属于目录遍历漏洞的一种 目录浏览(目录遍历)漏洞 目录浏览漏洞是由于网站存在配置缺陷,导致网站目录可以被任意浏 ...

最新文章

  1. 在Ubuntu 14.04 64bit上安装epub阅读器Sigil 0.8.2
  2. SpringMVC中的拦截器
  3. 香港深水埗一街道新春气氛浓厚
  4. queueing 优化_网站加载性能
  5. 前端学习(481):html得编码问题
  6. MySQL小问题:cant connect to MYSQL server on localhost
  7. python 自动化办公 uibot_【插件开发】使用 Python 扩展 UiBot 的功能
  8. MTK 驱动(73)--- Kernel Backtrace 无法显示出具体的地址.
  9. Oracle 10g 用户数及价格
  10. js table多层嵌套_只会console.log?8个高效调试js的console方法
  11. cisco防火墙(Cisco防火墙型号asa)
  12. 【机器学习|数学基础】Mathematics for Machine Learning系列之矩阵理论(15):矩阵的范数
  13. linux系统svn安装教程,Linux下SVN安装配置
  14. LM2596降压DCDC芯片
  15. ARM、单片机、stm32、51单片机、和开发板的概念、区别及包含关系
  16. 智能呼叫系统之客户互动中心
  17. GM7150,振芯科技,视频解码器,CVBS转BT656/601,QFN32,替换TVP5150/CJC5150
  18. 关于冒险岛,8090的不二游戏
  19. 简单粗暴识别工作室Android识别模拟器
  20. python--中文分词与词云制作--入门笔记(附停用词库及Mac字体资源)

热门文章

  1. visual studio 2019配置OnnxRuntime+推理+vgg16
  2. 为什么batchnormalize 有效
  3. xgboost防止过拟合
  4. keras cnn 代码详解
  5. ttlink无线打印服务器固件,TTLINK TT-180U1打印机服务器 TCP/IP添加打印机的教程
  6. NLP-基础知识-005(专家系统)
  7. pytorch笔记:pytorch的乘法
  8. pytorch实现简易分类模型
  9. LDA主题模型——gensim实战
  10. python复制俩文件夹相同文件_Python比较文件夹比另一同名文件夹多出的文件并复制出来的方法...