1.root账号先在namenode节点上配置一个定时任务,将fsimage定时传到其他客户机上进行操作

whereis hadoop命令确定安装目录,然后去配置文件找到namenode节点(data-93 emr-header-1)

0 1 * * * sh /root/fsimage.sh 每晚一点将fsimage文件发送到集群其他机器上,fsimage.sh如下

  1. #!/bin/bash
  2. TARGET_HOST=192.168.11.130
  3. SCP_PORT=
  4. IMAGE_DIR=/mnt/disk1/hdfs/name/current
  5. TARGET_DIR=/data/hdfs
  6. DAY=`date +%Y%m%d`
  7. echo "day=$DAY"
  8.  
  9. cd $IMAGE_DIR
  10. fsname=`ls fsimage* | head -`
  11. echo $fsname
  12.  
  13. scp -P $SCP_PORT $fsname ${TARGET_HOST}:${TARGET_DIR}/fsimage.${DAY}
  14.  
  15. echo "done"

脚本在/mnt/disk1/hdfs/name/current下执行【scp -P 58422 fsimage_0000000007741688997 192.168.11.130:/data/hdfs/fsimage.20190920】,将namenode上的fsimage镜像文件传递到data130(192.168.11.130)上的文件夹里

2.切换账号gobblin,在data-130的机子上配置crontab 任务,每天2点执行分析脚本

small_file_analysis.sh如下

  1. #!/bin/bash
  2. source /etc/profile
  3.  
  4. basepath=$(cd `dirname $`; pwd)
  5. cd $basepath
  6. IMAGE_DIR="/data/hdfs"
  7. IMAGE_PREFIX="fsimage"
  8.  
  9. # . 解析日期
  10. cur_date="`date +%Y%m%d`"
  11. cur_month="`date +%Y%m`"
  12. cur_day="`date +%d`"
  13. echo "cur month = $cur_month"
  14. echo "cur day = $cur_day"
  15. echo "cur date = $cur_date"
  16. IMAGE_NAME=$IMAGE_PREFIX.$cur_date
  17. echo "fsimage name is $IMAGE_NAME"
  18.  
  19. # . 解析 fsimage 镜像文件,生成txt 文件
  20. export HADOOP_HEAPSIZE=
  21. hdfs oiv -i $IMAGE_NAME -o $IMAGE_NAME.txt -p Delimited
  22.  
  23. # . 将 txt 文件load进 hive 表中
  24. hive -e "load data local inpath '$IMAGE_DIR/$IMAGE_NAME.txt' overwrite into table dataplatform.fsimage partition (month='$cur_month',day='$cur_day');"
  25.  
  26. # . sql
  27. hive -hivevar CUR_MONTH=$cur_month -hivevar CUR_DAY=$cur_day -f small_file_analysis.hql
  28.  
  29. rm -f fsimage*
  30. echo "done"

脚本逻辑很简单:使用image分析工具iov将image转为txt格式的文件,然后将文件导入hive 表(dataplatform.fsimage),再通过hive命令执行sql,将sql查询结果插入分析结果表(dataplatform.small_file_report_day),最后删除fsimage开头的2个文件即可

注意:export HADOOP_HEAPSIZE=10240 要加上,不然会报堆内存溢出

设置堆内存大小之后执行:

small_file_analysis.hql 如下:

  1. set mapreduce.job.queuename=root.production.gobblin;
  2. set mapreduce.job.name=small_file_analysis;
  3. set hive.exec.parallel=true;
  4. set hive.exec.parallel.thread.number=4;
  5. set mapreduce.map.memory.mb=1024;
  6. set mapreduce.reduce.memory.mb=1024;
  7.  
  8. INSERT OVERWRITE TABLE dataplatform.small_file_report_day PARTITION (month='${CUR_MONTH}', day='${CUR_DAY}')
  9. SELECT b.path as path, b.total_num as total_num FROM (
  10. SELECT path, total_num, root_path
  11. FROM
  12. (
  13. SELECT
  14. SUBSTRING_INDEX(path, '/', 4) AS path,
  15. COUNT(1) AS total_num,
  16. SUBSTRING_INDEX(path, '/', 2) AS root_path
  17. FROM
  18. dataplatform.fsimage
  19. WHERE
  20. file_size < 1048576
  21. AND month='${CUR_MONTH}' AND day='${CUR_DAY}'
  22. AND SUBSTRING_INDEX(path, '/', 2) in ('/warehouse', '/tmp')
  23. GROUP BY SUBSTRING_INDEX(path, '/', 4),SUBSTRING_INDEX(path, '/', 2)
  24. UNION
  25. SELECT
  26. SUBSTRING_INDEX(path, '/', 5) AS path,
  27. COUNT(1) as total_num,
  28. SUBSTRING_INDEX(path, '/', 3) AS root_path
  29. FROM
  30. dataplatform.fsimage
  31. WHERE
  32. file_size < 1048576
  33. AND month='${CUR_MONTH}' AND day='${CUR_DAY}'
  34. AND SUBSTRING_INDEX(path, '/', 3) = '/gobblin/source'
  35. GROUP BY SUBSTRING_INDEX(path, '/', 5),SUBSTRING_INDEX(path, '/', 3)
  36. ) a

dataplatform.fsimage建表语句

  1. CREATE TABLE `fsimage`(
  2. `path` string,
  3. `block_num` int,
  4. `create_time` string,
  5. `update_time` string,
  6. `block_size` bigint,
  7. `unknown1` int,
  8. `file_size` bigint,
  9. `unknown2` int,
  10. `unknown3` int,
  11. `permission` string,
  12. `user` string,
  13. `group` string)
  14. PARTITIONED BY (
  15. `month` string,
  16. `day` string)
  17. ROW FORMAT SERDE
  18. 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
  19. WITH SERDEPROPERTIES (
  20. 'field.delim'='\t',
  21. 'serialization.format'='\t')
  22. STORED AS INPUTFORMAT
  23. 'org.apache.hadoop.mapred.TextInputFormat'
  24. OUTPUTFORMAT
  25. 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
  26. LOCATION
  27. 'hdfs://emr-cluster/warehouse/dataplatform.db/fsimage'

dataplatform.small_file_report_day建表语句:

  1. CREATE TABLE `dataplatform.small_file_report_day`(
  2. `path` string,
  3. `total_num` bigint)
  4. PARTITIONED BY (
  5. `month` string,
  6. `day` string)
  7. ROW FORMAT SERDE
  8. 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
  9. STORED AS INPUTFORMAT
  10. 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
  11. OUTPUTFORMAT
  12. 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
  13. LOCATION
  14. 'hdfs://emr-cluster/warehouse/dataplatform.db/small_file_report_day'
  15. TBLPROPERTIES
  16. 'parquet.compression'='SNAPPY'

【大数据】SmallFile-Analysis-Script的更多相关文章

  1. 杂记- 3W互联网的圈子,大数据敏捷BI与微软BI的前端痛点

    开篇介绍 上周末参加了一次永洪科技在中关村 3W 咖啡举行的一次线下沙龙活动 - 关于它们的产品大数据敏捷 BI 工具的介绍.由此活动,我想到了三个话题 - 3W 互联网的圈子,永洪科技的大数据敏捷 ...

  2. 一篇文章看懂TPCx-BB(大数据基准测试工具)源码

    TPCx-BB是大数据基准测试工具,它通过模拟零售商的30个应用场景,执行30个查询来衡量基于Hadoop的大数据系统的包括硬件和软件的性能.其中一些场景还用到了机器学习算法(聚类.线性回归等).为了 ...

  3. PayPal高级工程总监:读完这100篇论文 就能成大数据高手(附论文下载)

    100 open source Big Data architecture papers for data professionals. 读完这100篇论文 就能成大数据高手 作者 白宁超 2016年 ...

  4. jquery.datatable.js与CI整合 异步加载(大数据量处理)

    http://blog.csdn.net/kingsix7/article/details/38928685 1.CI 控制器添加方法 $this->show_fields_array=arra ...

  5. Azure HDInsight 和 Spark 大数据实战(一)

    What is HDInsight? Microsoft Azure HDInsight 是基于 Hortonoworks Data Platform (HDP) 的 Hadoop 集群,包括Stor ...

  6. Ambari——大数据平台的搭建利器

    转载自http://www.ibm.com/developerworks/cn/opensource/os-cn-bigdata-ambari/ 扩展 Ambari 管理一个自定义的 Service ...

  7. (原创)大数据时代:基于微软案例数据库数据挖掘知识点总结(Microsoft 决策树分析算法)

    随着大数据时代的到来,数据挖掘的重要性就变得显而易见,几种作为最低层的简单的数据挖掘算法,现在利用微软数据案例库做一个简要总结. 应用场景介绍 其实数据挖掘应用的场景无处不在,很多的环境都会应用到数据 ...

  8. WebService - 怎样提高WebService性能 大数据量网络传输处理

    直接返回DataSet对象 返回DataSet对象用Binary序列化后的字节数组 返回DataSetSurrogate对象用Binary序列化后的字节数组 返回DataSetSurrogate对象用 ...

  9. 爱上MVC3~MVC+ZTree大数据异步树加载

    回到目录 理论部分: MVC+ZTree:指在.net MVC环境下进行开发,ZTree是一个jquery的树插件 大数据:一般我们系统中,有一些表结构属于树型的,如分类,地域,菜单,网站导航等等,而 ...

  10. PayPal 高级工程总监:读完这 100 篇文献,就能成大数据高手

    原文地址 开源(Open Source)对大数据影响,有二:一方面,在大数据技术变革之路上,开源在众人之力和众人之智推动下,摧枯拉朽,吐故纳新,扮演着非常重要的推动作用:另一方面,开源也给大数据技术构 ...

随机推荐

  1. 在过滤器中获取在web.xml配置的初始化参数

    在过滤器中获取在web.xml配置的初始化参数   例如 <filter> <filter-name>cross-origin</filter-name> < ...

  2. SringCloud学习成长之路 八 消息总线

    Spring Cloud Bus 将分布式的节点用轻量的消息代理连接起来.它可以用于广播配置文件的更改或者服务之间的通讯,也可以用于监控.本文要讲述的是用Spring Cloud Bus实现通知微服务 ...

  3. django模板---过滤器

    过滤器 通过django的过滤器可以在无须编码的情况下完成一些基本工作,比如字母的大小写转换.日期转换.获取字符串的长度.过滤器要放到标签的标识符后面,中间用竖杠(|)分隔, 如下面的过滤器把name ...

  4. js动态改变iframe的高度

    js动态改变iframe的高度的写法 〈iframe id="docDetail" width="100%"  height="200"   ...

  5. 【CUDA开发】论CUDA和LAV解码器是否真的实用

    先说配置,我电脑E3V3+GTX780TI视频就一个普通的720P AVC1编码MP4视频,实时检测软件是CPU-Z和GPU-Z,AIDA64[全默认设置]全部用ptoplayer默认播放时候,播放3 ...

  6. tab页签

    <div class="fl" id="newsBox"> <div class="tab1 grayBar"> & ...

  7. python-继承之多继承

    class BaseRequest(): pass class RequestHandler(BaseRequest): def serve_forever(self): print('Request ...

  8. zookeeper 操作命令

    简介 查阅了网上相关资料,介绍zookeeper客户端命令并不是非常全面,大多数都是简单介绍ls.get.set.delete.stat这几个简单命令的,下面我把help中的所有命令简单介绍一下以供参 ...

  9. Redis 常用命令学习三:哈希类型命令

    1.赋值与取值命令 127.0.0.1:6379> hset stu name qiao (integer) 1 127.0.0.1:6379> hset stu sex man (int ...

  10. PAT甲级 树 相关题_C++题解

    树 目录 <算法笔记>重点摘要 1004 Counting Leaves (30) 1053 Path of Equal Weight (30) 1079 Total Sales of S ...