Hadoop之小文件处理与调优经验

HDFS上每个文件都要在namenode上建立一个索引,这个索引的大小约为150byte,这样当小文件比较多的时候,就会产生很多的索引文件,一方面会大量占用namenode的内存空间,另一方面就是索引文件过大是的索引速度变慢。

解决的方式:

  1:Hadoop本身提供了一些文件压缩的方案

2:从系统层面改变现有HDFS存在的问题,其实主要还是小文件的合并,然后建立比较快速的索引。

Hadoop自带小文件解决方案

1:Hadoop Archive:

是一个高效地将小文件放入HDFS块中的文件存档工具,它能够将多个小文件打包成一个HAR文件,这样在减

少namenode内存使用的同时。

2:Sequence file:

sequence file由一系列的二进制key/value组成,如果为key小文件名,value为文件内容,则可以将大批

小文件合并成一个大文件。

3:CombineFileInputFormat:

CombineFileInputFormat是一种新的inputformat,用于将多个文件合并成一个单独的split,另外,它会

考虑数据的存储位置。

小文件优化(实战经验)

 

开启Jvm重用对Job影响:hadoop集群机器配置:三台Ubnutu虚拟机,内存512M

文件数 文件大小 JVM重用 耗时 Jobid

4815 7.54 GB Y 32mins, 5sec job_201206161018_0004

4815 7.54 GB N 58mins, 49sec job_201206161018_0014

结论:对于大量小文件Job,开启JVM重用减少45%运行时间

一个map运行一个jvm,重用的话,在一个map在jvm上运行完毕后,jvm继续运行其他jvm

参数mapred.reduce.parallel.copies

任务时间 mapred.reduce.parallel.copies

54mins, 21sec 5(默认值)

48mins, 30sec 20

通过配置参数mapred.reduce.parallel.copies可以提升12%性能

优化项 优化方法 可以减少Job时间

Jvm重用 开启jvm重用 45%

mapred.reduce.parallel.copies 默认值为5,优化值20 12%

解释mapred.reduce.parallel.copies:

Reduce task在做shuffle时,实际上就是从不同的已经完成的map上去下载属于自己这个reduce的部分数据,

由于map通常有许多个,所以对一个reduce来说,下载也可以是并行的从多个map下载,这个并行度是可以调

整的,调整参数为:mapred.reduce.parallel.copies(default 5)。默认情况下,每个只会有5个并行的下

载线程在从map下数据,如果一个时间段内job完成的map有100个或者更多,那么reduce也最多只能 同时下载

5个map的数据,所以这个参数比较适合map很多并且完成的比较快的job的情况下调大,有利于reduce更快的

获取属于自己部分的数据。

原文地址:https://www.cnblogs.com/grasser/p/9265923.html

时间: 2025-01-02 10:14:38

Hadoop之小文件处理与调优经验的相关文章

Hadoop作业性能指标及參数调优实例 (二)Hadoop作业性能调优7个建议

作者:Shu, Alison Hadoop作业性能调优的两种场景: 一.用户观察到作业性能差,主动寻求帮助. (一)eBayEagle作业性能分析器 1. Hadoop作业性能异常指标 2. Hadoop作业性能调优7个建议 (二)其他參数调优方法 二.Hadoop集群报告异常,发现个别作业导致集群事故. 一.用户观察到作业性能差,主动寻求帮助. (一)eBay Eagle作业性能分析器 对一般作业性能调优.eBay Eagle[i]的作业性能分析器已经能满足用户大部分需求. eBayEagle

JVM调优经验分享

前言 一.JVM调优知识背景简介 二.JVM调优参数简介 三.JVM调优目标 四.JVM调优经验 结束语 <br/> 本次分享探讨的JVM调优是指server端运行的JVM调优,适应版本为[1.6– 1.7], 不涉及最新的1.8版本. 假设线程池.连接池.程序代码等都已经做过优化,效果(系统吞吐量.响应性能)仍然不理想,我们就可以考虑JVM调优了. <br/> 一. JVM调优知识背景简介 1.堆与栈的概念 堆和栈是程序运行的关键:栈是运行时的单位,而堆是存储的单位. 栈解决程序

MySQL数据库调优经验

?RDS for MySQL 由亚洲唯一WebScaleSQL团队维护内核源码,结合阿里巴巴多年MySQL数据库调优经验,从数据库源码层及数据库参数进行了性能优化,在相近规格配置下,RDS for MySQL性能值能达到自建数据库性能的3倍以上. RDS for MySQL针对通用的场景,在内核做了一系列的优化: 1. 改进了InnoDB redo组提交功能,多线程并发写入的情况下能有10%以上的速度提升. 2. 优化锁,对一些会引起串行化的大锁进行了拆分,能够有效避免长时间的读锁等待,提升数据

GC浅析之三-性能调优经验总结

性能调优经验总结 问题的出现: 在日常环境下,以某server 为例,该机器的每秒的访问量均值在368左右,最大访问量在913.对外提供服务的表现为每两三个小时就有秒级别的时间客户端请求超时,在访问量增大的情况下用户请求超时频率明显增多. 现象的直接分析: 通过监控GC发现该现象,GC中比较频繁的出现promotion failed和concurrent mode failure.由于promotion failed产生的直接原因为在发送YGC时,old区因为碎片.可用空间不够,造成无法晋升对象

Hadoop对小文件的解决方案

小文件指的是那些size比HDFS的block size(默认64M)小的多的文件.任何一个文件,目录和block,在HDFS中都会被表示为一个object存储在namenode的内存中, 每一个object占用150 bytes的内存空间.所以,如果有10million个文件, 每一个文件对应一个block,那么就将要消耗namenode 3G的内存来保存这些block的信息.如果规模再大一些,那么将会超出现阶段计算机硬件所能满足的极限. 控制小文件的方法有: 1.应用程序自己控制 2.arc

Hadoop的小文件解决方案

小文件指的是那些size比HDFS的block size(默认64M)小的多的文件.任何一个文件,目录和block,在HDFS中都会被表示为一个object存储在namenode的内存中,每一个object占用150bytes的内存空间.所以,如果有10million(一千万)个文件,每一个文件对应一个block,那么就将要消耗namenode3G的内存来保存这些block的信息,如果规模再大一些,那么将会超出现阶段计算机硬件所能满足的极限. 相同大小下,小文件越多,对namenode造成的内存

[Hadoop]大量小文件问题及解决方案

1. HDFS上的小文件问题 小文件是指文件大小明显小于HDFS上块(block)大小(默认64MB)的文件.如果存储小文件,必定会有大量这样的小文件,否则你也不会使用Hadoop(If you're storing small files, then you probably have lots of them (otherwise you wouldn't turn to Hadoop)),这样的文件给hadoop的扩展性和性能带来严重问题.当一个文件的大小小于HDFS的块大小(默认64MB

Hadoop合并小文件的几种方法

1.Hadoop HAR 将众多小文件打包成一个大文件进行存储,并且打包后原来的文件仍然可以通过Map-Reduce进行操作,打包后的文件由索引和存储两大部分组成: 缺点: 一旦创建就不能修改,也不支持追加操作,还不支持文档压缩,当有新文件进来以后,需要重新打包. 2.SequeuesFile 适用于非文体格式,可作小文件容器,并可压缩: 3.CombineFileInputFormat 将多个文件合并成一个split作为输入,减少map输入与HDFS块的耦合: 4.Java代码实现,使用HDF

Linux 开启最大文件描述符 调优

开启最大文件数 系统可以开启的最大文件描述符(可同时开启最多的文件数),最大开启65535,可根据需求进行调优. 查看系统当前可开启最大文件描述符数 ulimit -n [[email protected] ~]# ulimit -n 65535 输出 修改最大文件描述符数 # 在limits.conf文件内添加如下行"*"标识用户,*为所有用户,可改为用户名. echo -ne " * soft nofile 65535 * hard nofile 65535 "