大数据-Hadoop小文件问题解决方案

HDFS中小文件是指文件size小于HDFS上block(dfs block size)大小的文件。大量的小文件会给Hadoop的扩展性和性能带来严重的影响。

HDFS中小文件是指文件size小于HDFS上block

大小的文件。大量的小文件会给Hadoop的扩展性和性能带来严重的影响。

在这里还是要推荐下我自己建的大数据学习交流群:716581014,群里都是学大数据开发的,如果你正在学习大数据

,小编欢迎你加入,大家都是软件开发党,不定期分享干货(只有大数据软件开发相关的),包括我自己整理的一份

2018最新的大数据进阶资料和高级开发教程,欢迎进阶中和进想深入大数据的小伙伴加入。

小文件是如何产生的?

动态分区插入数据,产生大量的小文件,从而导致map数量剧增

reduce数量越多,小文件也越多,reduce的个数和输出文件个数一致

数据源本身就是大量的小文件

小文件问题的影响

从Mapreduce的角度看,一个文件会启动一个map,所以小文件越多,map也越多,一个map启动一个jvm去执行,所以这些任务的初始化,启动,执行会浪费大量的资源,严重的影响性能。

从HDFS角度看,HDFS中文件元信息(位置,大小,分块等)保存在NameNode的内存中,每个对象大约占用150字节,如果小文件过多,会占用大量内存,直接影响NameNode的性能;HDFS读写小文件也会更加耗时,因为每次都需要从NameNode获取元信息,并与对应的DataNode建立连接。

如何解决小文件问题

输入合并,在Map前合并小文件

输出合并,在输出结果的时候合并小文件

控制reduce个数来实现减少小文件个数

配置Map输入合并

可以通过在输入mapper的之前将是输入合并,以减少map的个数。

配置Hive输出结果合并

Hadoop Archive(HAR)

Hadoop Archive是一种特殊的归档格式,Hadoop Archive映射到文件系统目录,一个HAR是以扩展名.har结尾 ,一个HAR目录包含元数据(以_index和_masterindex的形式)和data(part-*)文件。_index文件包含文件名称,这些文件是归档的一部分,并且包含这些文件在归档中的位置。

Hadoop Archive是一个高效地将小文件放入HDFS块中的文件存档工具,它能将多个小文件打包成一个HAR文件,这样在减少NameNode内存使用的同时,仍然允许对文件进行透明的访问。

使用hadoop命令进行文件归档

可以通过设置

参数来指定HAR的大小。

在Hive中进行归档处理

Hive支持将已存的分区转换为HAR,从而使得分区下的文件数目大大减少。但是从HAR读数据需要额外的开销,因此查询归档下数据可能会变慢。

如果不是分区表,可以创建成外部表,使用har://协议来指定路径。

SequenceFile

控制reducer个数

为了提升MR的运算速度,可以通过增加reducer的个数,Hive也会做类似的优化,Reducer数量等于源数据量除以

所配置的量(默认是1G)。Reducer的数量决定了结果文件的数量。所以在合适的情况下控制reducer的数量,可以实现减少小文件数量。

reducer决定因素:

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏散尽浮华

Redis Cluster日常操作命令梳理

在之前的一篇文章已经介绍了Redis Cluster及其部署,下面说下Redis Cluster日常操作命令: 一、以下命令是Redis Cluster集群所独...

2169
来自专栏数据和云

数据恢复:一则强行关库引发的蝴蝶效应

李真旭(Roger) ACOUG 核心专家,Oracle ACE,云和恩墨技术专家 这是某网友的维护的一套数据库,据说是正常重启之后就无法启动数据库了。那么我们...

3027
来自专栏Spark学习技巧

重磅:Flume1-7结合kafka讲解

本文主要是将flume监控目录,文件,kafka Source,kafka sink,hdfs sink这几种生产中我们常用的flume+kafka+hadoo...

3737
来自专栏cloudskyme

hadoop使用(五)

第1章 引言 1.1 编写目的 对关于hadoop的文档及资料进行进一步的整理。 1.2 相关网站    毋庸置疑 http://hadoop.apache.o...

3145
来自专栏王小雷

超详细讲解Sqoop2应用与实践

摘要:超详细讲解Sqoop2应用与实践,从hdfs上的数据导入到postgreSQL中,再从postgreSQL数据库导入到hdfs上。详细讲解创建link和创...

34210
来自专栏乐沙弥的世界

数据泵IMPDP 导入工具的使用

数据的导入导出时数据库经常处理的作业之一,Oracle 提供了IMP和IMPDP以及SQL*Loader等工具来完成数据的导入工作,其中IMP服务于早期的9i...

471
来自专栏云知识学习

TKE中的KUBE-DNS 副本数调整

今天处理一个问题,cvm 是一个2c的cvm节点,1.10.5k8s版本,在1.10.5版本中,kube-dns的副本数默认是两个

1162
来自专栏杨建荣的学习笔记

关于视图和存储过程的权限问题探究 (r9笔记第87天)

今天在处理一个工单的时候发现了一个奇怪的现象,开发同学需要创建一个存储过程,目前的架构类似这样的形式 ? 数据库中存在一个属主用户,表,存储过程等对象...

34010
来自专栏乐沙弥的世界

Oracle 闪回区(Oracle Flash recovery area)

    Oracle闪回区已经有了好几载的岁月了,在10g的时候就被推出一直延续到现在。Oracle闪回区是为RMAN准备的,尽管抛开它我们可以同样完成数据库备...

471
来自专栏鬼谷君

mysql 5.7主从安装和配置

1014

扫码关注云+社区