玩过大数据的人,肯定都遇到过小文件问题。这也是玩大数据,必须跨过去的一个坎,要不然,大数据玩不转。

一,怎么定义小文件

hadoop1,默认存储64M。hadoop2,hadoop3默认是128M,当然这些都是可调的。那问题来了,多小的文件算小呢,1M,10M,100M?个人认为,应当是以设置的默认存储块为基准来判定。

那么问题又来了:如果默认存储128M,那么100M算小文件吗?120M算小文件吗?

其实这个问题,很难回答,不同的人有不同的回答。个人觉得,小文件的解决是有一个范围值 ,并且是自己设定的范围值,每个人都不一样。从小到大,越是接近默认存储块,小文件解决的就是越好,反之越差。

二,小文件是怎么产生的?

1,hadoop设计之初是为了OLAP用的,后来越来越多的人,希望hadoop能朝着OLTP的方向发展,并产生了很多工具,例如spark,flink等。实时性要求越高,小文件就会越多。当然这也根量也有关系,量越大,小文件越少,小文件问题越小。

2,在离线计算时,如果没有设置reduce tasks,每个reduce都会生成一个独立的文件。这也会导致小文件的增多。

3,直接copy文件到hdfs,而导致的小文件。

三,为什么小文件是问题?

举个例子:

现在有100怀水,每杯水500ml,而给你装水的工具是N多个水桶,每个水桶容量是5L,现在要利用这些桶把水运到另外一个地方去。并且运一桶水消耗的资源根运一杯水消耗的一样。怎么运最节省资源。

这不就是小学的数学应用题吗?只要小学毕业了,就知道怎么去运水。

四,怎么解决小问题

官方给了三个解决方案:

1,Hadoop Archive

2,Sequence File

3,CombineFileInputFormat

而这三个方案,我没有用,关键是不知道,怎么用,哈哈。

我的解决办法:

1,利用hdfs命令,用appendToFile合并文件,或者getmerge合并文件到本地,然后在传hdfs。配合bash操作,还是可行的。该方案局限性较大。

json,txt试过,可以这样合。parquet肯定不行。orc没试,估计也不行。

数据量不大的话,这种处理方案,还是不错。可以做为补漏方案。

2,利用flume。flume从kafka中,消费数据到hdfs中,设置好rollSize和rollInterval,还是一个不错的方案。该方案也是有局限性的,

一般来说flume获取的数据都ETL前的数据,或者说都是源数据。源数据是要清洗的,清洗的过程中,要洗掉多少数据其实是不可控的。

如果量比较小,并且实时性要求比较高的话,这种方案是不合适的。

3,利用hive的分桶表。设置分桶的数量,可以控制小文件的。该方案也有局限性

如果量很大的情况下,为了接近我们设置默认存储值。就要不断的调整分桶数量。

4,通过程序的方式来合并。例如:spark streaming 准实时的生成了很多小文件,我们可以通过每隔一段时间,把新增的数据,进行数据清洗和合并。如果是json,txt格式,还要用appendToFile,进行补漏。

5,利用hbase,小文件交给hbase的mapfile。

推荐,方法4和方法5,这二种办法也是我现在用的方法。

hdfs合并块_hdfs 小文件合并 问题相关推荐

  1. HDFS的API操作-小文件的合并

    小文件合并 由于 Hadoop 擅长存储大文件,因为大文件的元数据信息比较少,如果 Hadoop 集群当中有大量的小文件,那么每个小文件都需要维护一份元数据信息,会大大的增加集群管理元数据的内存压力, ...

  2. Hadoop HDFS 小文件合并

    HDFS的小文件合并 由于Hadoop擅长存储大文件,因为大文件的元数据信息比较少,如果Hadoop集群当中有大量的小文件,那么每个小文件都需要维护一份元数据信息,会大大的增加集群管理元数据的内存压力 ...

  3. 大数据教程(10.6)自定义inputFormat(小文件合并)

    2019独角兽企业重金招聘Python工程师标准>>> 上一篇文章分析了运营商流量日志解析增强的实现,至此,mapreduce的组件中除了inputFormat全都自定义写过了!博主 ...

  4. HIVE优化系列(1)-- 自动合并输出的小文件

    小文件的缺陷我们就不说了,直接进入到正题. HIVE自动合并输出的小文件的主要优化手段为: set hive.merge.mapfiles = true:在只有map的作业结束时合并小文件, set ...

  5. MapReduce处理小文件合并

    一:小文件合并几种方式: 1. 在数据采集的时候,客户端就将小文件或小批数据合成大文件再上传HDFS 2. 在业务处理之前,在HDFS上使用mapreduce程序对小文件进行合并 3. 在mapred ...

  6. MapReduce将小文件合并成大文件,并设置每个切片的大小的案例

    测试代码: package cn.toto.bigdata.combinefile;import java.io.IOException;import org.apache.hadoop.conf.C ...

  7. 关于hive on spark的distribute by和group by使用以及小文件合并问题

    欢迎关注交流微信公众号:小满锅 问题导言 最近在使用hive时,发现一些任务的因为使用mapreduce的缘故,跑的太慢了,才几十个G的数据就经常跑一个多小时,于是有了切换spark的想法. 但是刚刚 ...

  8. spark 实现HDFS小文件合并

    一.首先使用sparksql读取需要合并的数据.当然有两种情况, 一种是读取全部数据,即需要合并所有小文件. 第二种是合并部分数据,比如只查询某一天的数据,只合并某一个天分区下的小文件. val df ...

  9. Flink从入门到精通100篇(十五)-Flink SQL FileSystem Connector 分区提交与自定义小文件合并策略 ​

    前言 本文先通过源码简单过一下分区提交机制的两个要素--即触发(trigger)和策略(policy)的实现,然后用合并小文件的实例说一下自定义分区提交策略的方法. PartitionCommitTr ...

最新文章

  1. iOS开发 解决UITapGestureRecognizer手势与UITableView的点击事件的冲突
  2. 十个你需要在 PHP 7 中避免的坑
  3. 定位的坐标原点HTML,html 定位
  4. 将RGB转换成ToWin32值
  5. MYSQL学习(一) - 数据结构
  6. ce能修改mc服务器吗,CE怎么修改DNF私服的装备。
  7. win10打开无线网卡服务器,win10打不开无线网卡
  8. java map failed_java.lang.OutOfMemoryError:Map failed总结
  9. blender建模制作课堂笔记
  10. PNG格式图片怎么弄
  11. matlab地震频谱分析,《基于MATLAB的地震数据的分析》.doc
  12. 《开源安全运维平台-OSSIM最佳实践》将于2015年底出版
  13. lesson5: C++11
  14. 历年计算机一级笔试考试真题及答案解析,全国计算机等级考试上机考题全真笔试历年题...
  15. Java Swing写简单计算器以及拓展贷款计算器(等额本息和等额本金计算可以单独拿出来用)
  16. ROS系统MoveIt玩转双臂机器人系列(三)--利用controller控制实际机器人
  17. 代码详解设计模式--观察者模式
  18. php两个字符串公共,C++_C语言求两个字符串的最长公共子串,本文实例讲述了C语言求两个字 - phpStudy...
  19. 逍遥情缘服务器维护没通告,【维护公告】2月2日中午12:00维护公告
  20. MPI矩阵向量乘法代码《并行程序设计导论》

热门文章

  1. ASP.NET MVC项目 解决session失效
  2. 【转载】css3 content 生成内容
  3. java实现Hbase中的查询(一)Filter方式
  4. .NET源码反编译和加密
  5. linux远程传文件scp和sftp详解
  6. html批量翻译 github,英文单词短语批量翻译工具WordListTranslator
  7. c++冒泡排序代码_数据结构和算法必知必会的50个代码实现
  8. linux删除文件退出,在Linux中用于在移动或删除文件时使`tail -f`退出的bash脚本
  9. 摘要注释_论文摘要怎么写,小编来帮你
  10. android 支付宝和微信支付封装,Android支付宝和微信支付集成