0%

HDFS 处理小文件方法

Hadoop 中处理小文件


前言

HDFS 随着使用时间会存在小文件现象,这里将网上调研的处理方法收集一下

解决此问题的方法主要为两个方面

  1. 从源头解决小文件问题,此方法需要业务方配合解决

  2. 合并平台上已有的小文件。因此更多工作是围绕第二种个方法来做的,有多种方法,比如HAR 归档啊,利用Hive针对parquet 文件格式合并、Ozone 小文件利器。

HAR 把历史数据进行归档,读取它还多了一层索引查找,比较鸡肋,不怎么好用。Ozone 目前技术较新,对Hadoop 有版本要求,需要Hadoop 3.x 版本。因此平常更多是利用 Hive 来针对 parquet 文件格式合并

处理方法

什么是小文件?小文件是怎么来的?可以参阅如何在Hadoop中处理小文件

利用 HAR 方法处理小文件可以参阅0508-如何使用Hadoop的Archive处理小文件

利用 Hive 方法处理小文件可以参阅如何在Hadoop中处理小文件-续0704-5.16.2-如何使用Hive合并小文件

利用 Impala 方法处理小文件可以参阅如何使用Impala合并小文件

利用 Ozone 来解决Hadoop小文件利器Ozone

在有赞使用 SparkSQL 中提到存在小文件现象,采用社区 SPARK-24940方式处理,借助 SQL hint 的方式合并小文件。参阅Spark SQL 查询中 Coalesce 和 Repartition 暗示(Hint)

利用 Spark 处理小文件跟 Spark SQL 也是差不多的,通过 Spark 的 coalesce() 方法和 repartition() 方法,设置并行个数可以通过输入文件的总大小和期望输出文件的大小进行预计算而得。

小文件寻找

知道处理方法后,问题就是如何寻找小文件,最先之前是利用haddop fs -count <path>人工肉眼寻找

高级操作还是得借用 HDFS 的元数据 FsImage 来分析,感兴趣可以自行参阅下方博客


参考链接