影响MapReduce性能的几个因素
Hadoop MapReduce性能优化
影响MapReduce输入数据处理时间的因素很多。其中之一是实现map和reduce函数时使用的算法。其他外部因素也可能影响MapReduce性能。根据我们的经验和观察,可能影响MapReduce的主要因素有以下几个。
- 硬件(或者资源)因素,如CPU时钟、磁盘I/O、网络带宽和内存大小。
- 底层存储系统。
- 输入数据、分拣(shuffle)数据以及输出数据的大小,这与作业的运行时间紧密相关。
- 作业算法(或者程序),如map、reduce、partition、combine和compress。有些算法很难在MapReduce中概念化,或者在MapReduce中效率可能会降低。
运行map任务时,shuffle子任务的中间输出存储在内存缓冲区中,用以减少磁盘I/O。输出的大小可能会超过内存缓冲区而造成溢出,因此需要spill子阶段把数据刷新到本地文件系统。这个子阶段也会影响MapReduce性能,它经常采用多线程技术实现,以便使磁盘I/O利用率最大化并缩减作业的运行时间。
MapReduce编程模型允许用户使用自己的map和reduce函数指定数据转换逻辑。本模型并不限定map函数产生的中间对在交由reduce函数处理前如何被分组。因此,归并排序(merge-sort)算法被用作默认的分类算法。然而,归并排序算法并非总是最高效的,尤其是对分析型任务(如聚合和等值连接)而言,这类任务并不关心中间键的顺序。
提示.tif对于MapReduce编程模型来说,分组(grouping)/划分(partitioning)是一个串行的任务。这就意味着在reduce任务可以运行之前,框架需要等待所有map任务完成。
想要深入学习归并排序算法,请参考http://en.wikipedia.org/wiki/Merge_sort。
MapReduce性能是以map和reduce的运行时间为基础的。这是因为典型环境下集群节点数目和节点插槽数目这类参数是不可修改的。
其他可能对MapReduce性能构成潜在影响的因素具体如下。
- I/O模式:也就是从存储系统获取数据的方式。从底层存储系统读取数据有以下两种模式。
直接I/O:通过硬件控制器把数据从本地硬盘缓存中直接读到内存,因而不需要进程间通信成本。
流式I/O:通过特定进程间通信手段,如TCP/IP和JDBC,从其他正在运行进程(典型情况是存储系统进程)读取数据。
从提高性能的角度看,使用直接I/O比流式I/O更高效。
- 输入数据解析:是指从存储系统获取数据时,从原始数据到键值对的转换过程。数据解析过程的目标是把原始数据按照原来的格式解码,并转换为可供Java等编程语言处理的数据对象。
输入数据可以解码为(Java或者其他语言)对象,这样当对象实例创建后,对象内容可以改变,典型的情况是使用对对象实例的引用(这样的对象叫做可变对象),输入数据也可以解码为一经创建其内容就不可改变的对象(叫做不可变对象)。在上百万条记录的情况下,不可变对象的解码过程会明显比可变对象的解码过程慢,这是因为在前者解码过程中产生了大量不可变对象。因此,这会导致系统性能的降低。 - 输入数据存储:当MapReduce获取数据并进行进一步处理时,所在的存储系统必须保证高速访问和数据可用性(如HDFS和HBase)。如果选用的不是那些推荐的与MapReduce一起使用的存储文件系统,那么输入数据的访问会潜在地影响MapReduce性能。
使用Hadoop框架时,许多因素可能会影响整个系统的性能和作业的运行时间。这些因素可能是Hadoop MapReduce引擎的一部分,也可能是引擎之外的。
Hadoop配置参数通常会影响并发运行的任务数,并决定作业的运行时间,因为Hadoop集群被建立且作业开始执行后,其他因素就不可改变了。如果Hadoop框架配置不当,可能无法充分利用集群资源,并因此影响MapReduce作业性能。这是因为大量的配置参数控制着Hadoop框架的行为。
一项Hadoop作业经常由许多实现不同算法的子模块组成,这些子模块要么以串行方式连接,要么以并行方式连接。如果Hadoop框架配置不当,可能会影响内部任务完成的协作方式。所有这类参数(将在第2章讨论)设置的影响都依赖于map和reduce函数的代码、集群资源,当然还有输入数据。
MapReduce作业的性能也可能受Hadoop集群节点数的影响,以及受所有节点中运行map和reduce任务的可用资源的影响。每个节点的容量决定了一个节点可以执行的mapper和recducer任务的数量。因此,如果节点资源利用不充分或者过度利用,都会直接影响MapReduce任务的性能。
影响MapReduce性能的几个因素的更多相关文章
- 影响HTTP性能的常见因素
影响HTTP性能的常见因素 我们这里讨论HTTP性能是建立在一个最简单模型之上就是单台服务器的HTTP性能,当然对于大规模负载均衡集群也适用毕竟这种集群也是由多个HTTTP服务器的个体所组成.另外我们 ...
- mysql中影响数据库性能的因素讲解
mysql中影响数据库性能的因素讲解 在本篇文章中我们给大家讲述了mysql中影响性能的因素以及相关知识点内容,有兴趣的朋友参考下 关于数据库性能的故事 面试时多多少少会讲到数据库上的事情,“你对数据 ...
- ch6 影响 MySQLServer 性能的相关因素
第6章影响 MySQLServer 性能的相关因素 前言: 大部分人都一致认为一个数据库应用系统(这里的数据库应用系统概指所有使用数据库的系统)的性能瓶颈最容易出现在数据的操作方面,而数据库应用系统的 ...
- [大牛翻译系列]Hadoop(15)MapReduce 性能调优:优化MapReduce的用户JAVA代码
6.4.5 优化MapReduce用户JAVA代码 MapReduce执行代码的方式和普通JAVA应用不同.这是由于MapReduce框架为了能够高效地处理海量数据,需要成百万次调用map和reduc ...
- [大牛翻译系列]Hadoop(11)MapReduce 性能调优:诊断一般性能瓶颈
6.2.4 任务一般性能问题 这部分将介绍那些对map和reduce任务都有影响的性能问题. 技术37 作业竞争和调度器限制 即便map任务和reduce任务都进行了调优,但整个作业仍然会因为环境原因 ...
- 提高mapreduce性能的七点建议
Cloudera提供给客户的服务内容之一就是调整和优化MapReduce job执行性能.MapReduce和HDFS组成一个复杂的分布式系统,并且它们运行着各式各样用户的代码,这样导致没有一个快速有 ...
- mapreduce性能提升2
mapreduce性能提升2mapreduce性能提升2mapreduce性能提升2
- 影响pogo pin连接器使用寿命的因素
精细化.安装简易化及使用寿命长是现在数码电子产品的趋势发展,pogo pin连接器体积小而且弹簧伸缩式设计,可以更好的缩小数码电子产品的尺寸并且连接安装更加的简单方便,因此pogo pin连接器得到了 ...
- [转帖]超能课堂(210) 笔记本中常说的PL1、PL2到底如何影响CPU性能?
超能课堂(210)笔记本中常说的PL1.PL2到底如何影响CPU性能? https://www.expreview.com/71943.html 本文约 4070 字,需 7 分钟阅读 (切换至标准版 ...
随机推荐
- 转载 .Net多线程编程—并发集合 https://www.cnblogs.com/hdwgxz/p/6258014.html
集合 1 为什么使用并发集合? 原因主要有以下几点: System.Collections和System.Collections.Generic名称空间中所提供的经典列表.集合和数组都不是线程安全的, ...
- day14 Python百分号字符串拼接
拼接 # -*- coding:utf8 -*- #%s字符串,%d数字msg = '%s am %s my %s is %s'% (2,"charon","pluto& ...
- Spring容器IOC解析及简单实现(转)
文章转自http://blog.csdn.net/liushuijinger/article/details/35978965
- linux调度器源码分析 - 初始化(二)
本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 引言 上期文章linux调度器源码分析 - 概述(一)已经把调度器相关的数据结构介绍了一遍,本篇着重通过代码说明 ...
- Intel Digital Innovation Industry Summit(2018.08.17)
时间:2018.08.17地点:北京金隅喜来登大酒店
- fastjson tojson部分规则
fastjson 作为java 目前最快速,最轻便 json对象,与json 字符串转换 第三方包,阿里巴巴提供. 对象转json规则 转json字符串 列 JSONObject.toJSON(ne ...
- 面试2——java基础1
1.int和Integer的区别 1.Integer是int的包装类,int则是java的一种基本数据类型 2.Integer变量必须实例化后才能使用,而int变量不需要 3.Integer实际是对象 ...
- Js基础---红宝书读书日记(1)-------基本类型和引用类型
JS的变量可能包含两种不同数据类型的值,基本类型和引用类型; 基本类型是指简单的数据段,引用类型是指可能由多个值构成的对象; JS高级程序设计第三章介绍了变量分为 5种简单数据类型(string/nu ...
- 自己动手写把”锁”---LockSupport深入浅出
本篇是<自己动手写把"锁">系列技术铺垫的最后一个知识点.本篇主要讲解LockSupport工具类,它用来实现线程的挂起和唤醒. LockSupport是Java6引入 ...
- Linux Namespace : IPC
IPC namespace 用来隔离 System V IPC 对象和 POSIX message queues.其中 System V IPC 对象包含共享内存.信号量和消息队列,笔者在<Sy ...