`
brandNewUser
  • 浏览: 453109 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

hadoop集群调优-hadoop settings and MapReduce

阅读更多

Hadoop Settings

由于Hadoop节点的系统配置,一些hadoop的设置可以减少运行系统中的瓶颈。首先,提高Java运行时的堆内存容量,也要和系统中的整体内存容量相关;其次,保持hadoop中派生的task数量与处理器数量相关。

 

一个比较好的规则是一个Reducer或两个Mapper分配一个处理器;如果系统拥有足够多的内存容量,设置Java堆的最大大小为1GB或更大。此外,还需要注意的是一个任务要有3Java虚拟机在运行,所以必要还要至少保留每个任务3GB的内存,

 

Hard Drive scaling

Hadoop DataNode中的硬盘数量能够提高读写性能,将数据放到更多的硬盘中能够允许hadoop从多个HDFS数据块中读取更多的数据。Hadoop的工作量就像是RAID控制器一样,能够同时从多个地址中读取数据,可以提高整体的性能。从基本测试的执行结果来看,更多的磁盘数量能够显著提高hadoop的读写性能,直到存储的总线达到饱和状态。在我们的每个DataNode中,都添加了12块硬盘。从下图中可以看出,从4块硬盘开始,直到加入第12块硬盘,整体的执行时间减少了大约79%



 

 

Hadoop File System Compression

Hadoop中启用压缩可以通过减少网络和磁盘IO来提高集群的性能,同样还可以降低HDFS中的磁盘使用率,但是这部分提升是以CPU处理时间的提高为代价的,需要考虑到CPUIO之间的权衡问题。

 

Hadoop提供了对中间map执行结果,map输入数据和reduce输出数据的压缩支持,同时还支持应用级别的压缩,比如Java Job本身,支持的压缩方法包括:Deflate, gzip, bzip2LZO。每种方法都有其优缺点。

 

MapReduce输出的数据在整个计算过程中都会进行中间存储,map输出的中间结果只能被reducer看到(通过HTTP服务的方式下载)。因为mapreduce端的可能并不在同一台机器,同一个进程中,压缩数据能够节省网络带宽和磁盘I/O

 

LZO通常情况下不是处理器敏感的算法,花费大约20%40%CPU处理能力,能够留给在系统中运行的其他Hadoop任务足够的CPU资源;而且LZO是可Split的,将比较大的文件拆分成可管理的块。当使用压缩时,建议使用可SplitIndex整个文件的算法,否则本地化文件的不支持可能导致MapReduce应用非常低效。使用压缩相比于未压缩能够减少大概20%的执行时间。

 

 

 

 

HDFS Block Size

更改默认的HDFS块大小在两个方面提高Hadoop集群的性能。首先,它能够比最佳地匹配硬件驱动attach的控制器,提升硬件驱动器和存储控制器。其次,HDFS的块大小会影响单个MapReduce Job的任务数量,在文件总大小固定的情况下,提高HDFS的块大小会减少MapReduceTask数量。



 

 

MapReduce

MapReduce比起HDFS设置,要更加复杂,需要了解所有的MapReduce配置参数,才能做到提高性能。

 

HadoopMapReduce过程图如下所示:

 

 

 

 

 

MapReduce Process

 

MapReduce的任务由两阶段组成,Map阶段和Reduce阶段。

 

Map阶段会将任务和数据分发到集群的数据节点中,大部分的Map任务都可以在对应的DataNode上被创建。为了能够在Map阶段达到最大的性能,需要有效利用DataNodes上的所有处理器核心。

 

InputSplits决定了MapReduce进程在DataNodes中被创建的数量。每个Map进程使用map方法处理输入数据,将其按照数据进行分组,根据Partition策略写到Map端的本地磁盘中,以便于Reducer能够拿来进行map输出。

 

Map执行时,对于一个给定的Key,如果Partition到特定的Reducer,则这个Reducer需要能够看到所有的Map上这个Key对应的结果,并通过HTTP的方式获得这些中间结果数据。在Reducer方法被执行之前,首先在Reducer端执行数据的排序合并操作。

 

如果能够保持Map阶段和Reduce阶段都在同一个节点,就可以最小化传输的数据,并加速执行时间。



 

 

Map Process

Map阶段是从InputSplit开始,当Map阶段执行进程的map方法将中间结果数据写入到本地磁盘中时,它使用的一个内存缓冲区,通过io.sort.mb来控制缓冲区的大小(默认100M,一般不够用),这部分内存是要占用Map端执行的虚拟机内存的。

 

另外一个与io.sort.mb设置共存的参数是io.sort.record.percent,这个代表内存缓冲区用于元数据的百分比(相对于记录的本身信息),默认值为.05,表示百分之五。如果内存缓冲区的空间已经使用超过80%后(在参数io.sort.spill.percent),就会新启动一个线程用户将数据缓冲至本地磁盘中,但并不耽误map方法继续向内存缓冲区写入操作。

 

如果Map阶段的输出数据非常大,频繁的文件spill就会导致map阶段执行时间的变长。适当地增大内存缓冲区,使得map操作能够都在内存中完成能够节省大部分时间,这都是因为如果spill次数太多,会在磁盘中大量执行磁盘归并的操作,将不同的小文件合并成一个文件。



 

 

Reduce Process

Reduce阶段是由5个步骤组成,copy, shuffle, merge, sortreduceCopy阶段ReducerMap阶段的中间结果从TaskTracker(执行Map对应的DataNode)中拷贝过来(通过网络,HTTP),存放到本地磁盘或是内存中。这个过程中两个参数起作用,mapreduce.tasktracker.http.threadsmapred.reduce.parallel.copies。第一个参数指的是TaskTracker中用于在集群中提供传输DataNodespartition data服务的线程数量,默认40;第二个参数指的是在copyshuffle阶段Reducer进行拷贝数据的线程数量,默认为5

 

Map处理完的数据被拷贝到Reducer的内存中,其内存数量被两个参数所控制——mapred.job.shuffle.input.buffer.percent(默认0.70)和mapred.child.java.opts-Xmx200)。增大Reducer端的Java堆内存,提升至1G,如果内存比较充裕的化可以提升得更高,这样就可以使得copyshufflemerge三部分操作都在内存中,这样就可以提高MapReduce的性能。如果copyshufflemerge三部分操作仍然溢出至磁盘中,可以更改参数mapred.job.shuffle.merge.percent(默认0.66),类似于之前map端的溢出百分比,这决定了Reducecopyshufflemerge的记录数溢出百分比。

 

io.sort.factor,这个参数决定了Map 阶段输出流一次能够合并的文件数量,这取决于Reducer处理merged文件的速度。增大这个参数能够将merged文件移动到Reducer更快。

 

更改参数mapred.job.reduce.input.buffer.percent(默认0.0)能够将merged文件放到内存中,以提高处理速度,需要说明的是,这部分内存也来源于Reducer阶段的Java虚拟机,如果Reduce阶段不是太耗内存,可以将所有中间处理结果都放到内存中。



 

 

 

 

Summary

 

通过设置在Hadoop框架中的这些优化策略,我们可以发现最终会得到大概38%的执行时间降低百分比。更改这些同时也会对其他造成一些有益的影响,比如由于进行了压缩,降低HDFS的磁盘占用率,支持更大的Hadoop工作负载。

  • 大小: 66.1 KB
  • 大小: 72.4 KB
  • 大小: 139.8 KB
  • 大小: 197.3 KB
  • 大小: 146.9 KB
  • 大小: 171 KB
  • 大小: 106.8 KB
分享到:
评论

相关推荐

    eclipse-hadoop3x-master.zip

    5. **运行和测试配置**:Eclipse的工作空间配置文件,可能包括Hadoop集群的连接信息和测试用例。 6. **文档**:可能包含README文件或其他文档,指导用户如何导入和使用该项目。 7. **设置文件**:如`settings.xml`...

    HadoopIntellijIDEAPlugin-hadoop3.0.0-alpha2

    标签“IntellijIdea”、“hadoop”、“plugin”进一步明确了这个插件的特性,它主要服务于使用IntelliJ IDEA的Hadoop开发者,提供与Hadoop相关的功能和便利,如可能包括HDFS的文件操作支持、MapReduce任务调试、YARN...

    Windows下Eclispe远程开发Mapreduce程序

    `hadoop-eclipse-plugin-2.6.0.jar`是一个Eclipse插件,它使得Eclipse可以直接与Hadoop集群交互,方便地开发和调试MapReduce程序。这个插件需要被放置在Eclipse的plugins目录下,即`${MyEclispe_HOME} /plugins`。 ...

    Windows-hadoop-3.1.0.7z

    【标题】"Windows-hadoop-3.1.0.7z" 提供的是Hadoop 3.1.0版本在Windows环境下的配置和使用指南,主要用于在Windows 10操作系统中,通过集成开发环境IntelliJ IDEA(简称IDEA)和构建工具Maven来与Hadoop集群交互。...

    maven仓库中关于Hadoop的一些依赖

    Hadoop MapReduce Client则包含运行MapReduce任务所需的客户端API,而YARN(Yet Another Resource Negotiator)是Hadoop的资源管理系统,负责调度和分配集群资源。 除此之外,Hive是基于Hadoop的数据仓库工具,可以...

    hadoop3.2.zip

    - 在Windows上启动Hadoop的本地模式(Non-Distributed Mode)可以直接运行`hadoop jar hadoop-mapreduce-examples.jar`,如运行WordCount示例。 - 要运行分布式模式(Distributed Mode,HDFS和YARN),则需要设置...

    hadoop源码编译.doc|hadoop源码编译.doc

    在深入探讨Hadoop源码编译的过程中,我们首先需要了解Hadoop是什么以及它的重要性。...通过源码编译,我们可以更深入地理解和控制Hadoop的工作方式,这对于开发、优化和调试Hadoop集群是非常有价值的。

    可运行的Hadoop1 MapReduce Eclipse项目

    在IT行业中,大数据处理是一项关键任务,而Hadoop MapReduce是实现这一目标的重要工具。本文将深入探讨"可运行的Hadoop1 MapReduce Eclipse项目"的相关知识点,包括Hadoop的基本概念、MapReduce的工作原理以及如何在...

    hadoop-2.7.7.zip

    Hadoop是Apache软件基金会开发的一个开源分布式计算框架,它允许在大规模集群上高效处理和存储大量数据。Hadoop-2.7.7是Hadoop的一个重要版本,它提供了许多改进和修复,使得大数据处理更加稳定和高效。在这个版本中...

    运行hadoop jar

    标题 "运行hadoop jar" 涉及到的是在...总结来说,"运行hadoop jar"是一个关键步骤,它涵盖了从编写Java代码到在Hadoop集群上执行分布式计算的完整流程。理解并熟练掌握这一过程对于开发和维护Hadoop应用至关重要。

    将hadoop与java的编译器idea相连

    1. **到mvnrepository下载,添加四个依赖**:这些依赖通常包括`hadoop-client`、`hadoop-mapreduce-client-core`等。具体版本号需根据实际使用的Hadoop版本确定。 ```xml <groupId>org.apache.hadoop ...

    大数据离线分析系统,基于hadoop的hive以及sqoop的安装和配置

    这些步骤是确保Hadoop集群稳定性和容错性的基础。 接下来是Hive的安装。Hive提供了对PB级数据的SQL查询能力,使得非程序员也能轻松进行大数据分析。在安装过程中,需要下载Hive的发行版,配置Hadoop的相关路径,如...

    hadoop idea插件

    Hadoop Idea插件是专门为开发者设计的,旨在提供在Idea中直接操作和管理Hadoop集群的功能,类似于Eclipse中的HDFS插件,使得开发和调试Hadoop应用程序更为便捷。 安装Hadoop Idea插件的过程如下: 1. 打开IntelliJ...

    配置MapReduce环境.pdf

    在Eclipse中编写好WordCount程序后,可以通过Maven构建项目生成jar包,然后将这个jar包提交到本地运行的Hadoop集群执行。在Hadoop环境中,你可以使用`hadoop jar`命令来提交和运行MapReduce任务。 总结一下,配置...

    cloud_book-example

    5. `webapps`:在Hadoop环境中,这个目录可能用于存放Web应用程序,例如监控Hadoop集群状态的Web界面,或者与Hadoop作业交互的REST API服务。 6. `lib`:依赖库目录,包含运行Hadoop MapReduce任务所需的所有外部库...

    ambari admin guide

    在Hadoop集群管理中,有时会因为硬件故障、维护需求或是资源优化的目的而需要将某些从节点(Slave Nodes)从集群中移除。这一过程被称为“退役从节点”,在操作过程中必须遵循一定的步骤来确保数据的完整性与集群的...

    基于Hadoop和Django开发的用户画像系统.zip

    例如,NumPy和Pandas库可以用于数据预处理和分析,Matplotlib和Seaborn用于数据可视化,而requests库可以帮助与Hadoop集群通信。 在【压缩包子文件的文件名称列表】中,"Huaxiang-master"可能是一个项目源代码仓库...

    MyWordCount.zip

    7. `src`:源代码目录,其中可能有Java源文件,如WordCount的mapper和reducer类,以及可能的主程序类,它们负责提交MapReduce作业到Hadoop集群。 总结,"MyWordCount.zip" 提供了一个完整的Hadoop MapReduce ...

    ceph官网文档pdf版

    - 包括配置 Hadoop 以便支持 CephFS、执行 MapReduce 任务等内容。 - **Libcephfs (JavaDoc)** - 提供了 Java 开发者使用 Libcephfs 的文档。 - 包括类库结构、函数签名等信息。 - **cephfs-journal-tool** - ...

    linux下maven环境搭建.doc|linux下maven环境搭建.doc

    - **运行和测试**:使用`mvn package`打包项目,然后在Hadoop集群上运行。 通过以上步骤,你可以在Linux环境下成功搭建Maven,为Hadoop项目的开发提供便利。Maven的自动化特性可以帮助开发者高效地管理复杂的依赖...

Global site tag (gtag.js) - Google Analytics