开发者学堂课程【数据湖 JindoFS + OSS 实操干货36讲:对 Hive 数仓表进行高效小文件合并】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/833/detail/13982
对 Hive 数仓表进行高效小文件合并
内容介绍
一、背景介绍
二、主要功能
一、背景介绍
(1)小文件如何产生
l 动态分区插入数据,产生大的小文件,从而导致 map 数剧增。
l reduce 数量越多,小文件也越多(r educe 的个数和输出文件是对应的)。
l 数据源本身就包含大量的小文件。
(2)小文件带来的问题
l 小文件会开很多 map, 一个 map 开一个 JVM 去执行,所以这些任务的初始化,启动,执行会浪费大量的资源,严重影响性能。
l 小文件会给底层文件系统带来很大压力,如在在 HDFS 中,每个小文件对象约占150byte,如果小文件过多会占用大量内存。这样 NameNode 内存容量严重制约了集群的扩展
(3)小文件解决方案
l 从小文件产生的途经就可以从源头上控制小文件数量
l 使用 Sequencefile 作 为表存储格式,不要用 textfile,在一定程度上可以减少小文件。
l 减少 reduce 的 数量(可以使用参数进行控制)。
l 少用动态分区,用时记得按 distribute by 分区。
l 对于已有的小文件,我们可以通过以下几种方案解决
l 通过参数进行调节,设置 map/reduce 端的相关参数。
l 重建表,建表时减少 reduce 数量。
l 使用 hadoop archive 命令把小文件进行归档。
二、主要功能
(1)JindoTable
l JindoTable 提供表或分区级别的热度统计、存储分层和表文件优化的功能,常见命令如下:
l -accessStat/-leastUseStat
l -cache/-uncache/-archive/-unarchive/-archiveTable/-unarchiveTable/ -status
l -optimize
l -showTable/-showPartition/-listTables
l -dumpmc
l -moveTo
(2)Hive 数仓表小文件合并
l Jindo table- -showTable/-showPartition -t -p
l 显示表格或者分区的状态,如果表文件过小会提示文件过小
l Jindo table - optimize 优化表存储层的数据组织