`

Hadoop参数设置调优

阅读更多
JobConf.setNumMapTasks(n)是有意义的,结合block size会具体影响到map任务的个数,详见FileInputFormat.getSplits源码。假设没有设置mapred.min.split.size,缺省为1的情况下,针对每个文件会按照min (totalsize[所有文件总大小]/mapnum[jobconf设置的mapnum], blocksize)为大小来拆分,并不是说文件小于block size就不去拆分。


2.http://hadoop.hadoopor.com/thread-238-1-1.html
不知道你是要提高整个集群的map/reduce任务数,还是单个节点可并行运行的map/reduce任务数?对于前者是一般只设置reduce任务数,而map任务数是由Splits个数决定的; 对于后者,是可以在配置中设置的,分别为:mapred.tasktracker.map.tasks.maximum
mapred.tasktracker.reduce.tasks.maximum

另外,还有个参数mapred.jobtracker.taskScheduler.maxRunningTasksPerJob,用来控制一个job最大并行tasks数,这个是指在集群最大并行数。

3.我的理解:具体看FileInputFormat.java的代码
map tasks的个数只要是看splitSize,一个文件根据splitSize分成多少份就有多少个map tasks。而splitSize的计算(看FileInputFormat的源码):splitSize = Math.max(minSize, Math.min(maxSize, blockSize));而
minSize = Math.max(getFormatMinSplitSize(), getMinSplitSize(job));即是某种格式的文件的最小分割size(如看源码sequenceFile是2000)和整个job配置的最小分割size(即mapred-default.xml中mapred.min.split.size的值)之间的较大的那个
maxSize是mapred.max.split.size(mapred-default.xml中竟然没有,我试了一下,在mapred-site.xml中配置覆盖也没有用,具体用法参照http://osdir.com/ml/mahout-user.lucene.apache.org/2010-01/msg00231.html用参数配置: hadoop jar /root/mahout-core-0.2.job org.apache.mahout.clustering.lda.LDADriver -Dmapred.max.split.size=900...),如果不配置,默认值是long类型的最大值。(mapred.max.split.size不推荐配置(试))
blockSize是即hdfs-default.xml中dfs.block.size的值,可在hdf-site.xml中覆盖.这个值必须是512的倍数,如果想要数量更多的map的tasks的个数,可以把dfs.block.size设得小一点,512,1024等等,反正上面的公式保证了即使你这个blocksize设得比某种格式的文件的最小分割size要小,最后还是选者这种格式的最小分割size,如果blocksize比它大,则选用blocksize作为splitSize的大小.

总结:如果想要多一点的map tasks,(1)可以设置dfs.block.size小一点,sequenceFile推荐2048。。。(试)在eclipse运行时,dfs.block.size是由eclipse中mapreduce的设置(dfs.block.size)生效的,而不是hadoop的conf中的配置文件,但是如果用终端hadoop jar命令跑的话,应该是由hadoop的conf中的配置文件决定生效的
(2)推荐: 可以分成多个sequenceFile来作为输入(把上层目录作为输入路径即可,上层目录下包括的必为清一色的sequenceFile),输入路径 "./"或指定上层目录文件名

reduce task的个数:
可通过job.setNumReduceTasks(n);设定。多个reduce task的话就会有多个reduce结果,part-r-00000, part-r-00001, ...part-r-0000n



增加task的数量,一方面增加了系统的开销,另一方面增加了负载平衡和减小了任务失败的代价;
map task的数量即mapred.map.tasks的参数值,用户不能直接设置这个参数。Input Split的大小,决定了一个Job拥有多少个map。默认input split的大小是64M(与dfs.block.size的默认值相同)。然而,如果输入的数据量巨大,那么默认的64M的block会有几万甚至几十万的Map Task,集群的网络传输会很大,最严重的是给Job Tracker的调度、队列、内存都会带来很大压力。mapred.min.split.size这个配置项决定了每个 Input Split的最小值,用户可以修改这个参数,从而改变map task的数量。
一个恰当的map并行度是大约每个节点10-100个map,且最好每个map的执行时间至少一分钟。
reduce task的数量由mapred.reduce.tasks这个参数设定,默认值是1。
合适的reduce task数量是0.95或者0.75*( nodes * mapred.tasktracker.reduce.tasks.maximum), 其中,mapred.tasktracker.tasks.reduce.maximum的数量一般设置为各节点cpu core数量,即能同时计算的slot数量。对于0.95,当map结束时,所有的reduce能够立即启动;对于1.75,较快的节点结束第一轮reduce后,可以开始第二轮的reduce任务,从而提高负载均衡


由Hive来执行相关的查询
hadoop中默认的mapred.tasktracker.map.tasks.maximum设置是2
也即:每一个tasktracker同时运行的map任务数为2
照此默认设置,查询80天某用户的操作日志,耗时5mins, 45sec
经过测试,发现将mapred.tasktracker.map.tasks.maximum设置为节点的cpu cores数目或者数目减1比较合适
此时的运行效率最高,大概花费3mins, 25sec
我们现在的机器都是8核的,所以最终配置如下:

    mapred.tasktracker.map.tasks.maximum
    8
    The maximum number of map tasks that will be run
    simultaneously by a task tracker.
  
而对于mapred.map.tasks(每个job的map任务数)值,hadoop默认值也为2
可以在执行hive前,通过set mapred.map.tasks=24来设定
但由于使用hive,会操作多个input文件,所以hive默认会把map的任务数设置成输入的文件数目
即使你通过set设置了数目,也不起作用…
分享到:
评论

相关推荐

    五分钟学大数据-Hadoop企业级调优手册1

    【标题】:“五分钟学大数据-Hadoop企业级调优手册1” ...综上所述,Hadoop企业级调优涵盖了从基础参数配置到集群性能测试、扩展与维护的全方位流程,旨在最大化HDFS的性能和稳定性,为企业的大数据应用提供有力支撑。

    Hadoop参数调优

    Hadoop参数调优 Hadoop参数调优是指通过调整Hadoop配置文件中的各个参数来达到性能优化的目的。...Hadoop参数调优需要根据实际情况进行调整,需要考虑到集群的硬件特性和实际需求,通过实验和测试来获得最合适的设置。

    hadoop作业调优参数整理及原理

    Hadoop作业调优是提升大数据处理效率的关键环节,通过对Hadoop MapReduce框架中的参数进行精细调整,可以显著改善作业的性能。以下是对标题和描述中涉及的参数及原理的详细说明: 1. **MapTask运行内部原理** - **...

    hadoop 配置项的调优

    【Hadoop配置项调优详解】 Hadoop作为一个分布式计算框架,其性能往往受到配置参数的影响。通过对Hadoop的配置项进行调优,可以显著提升系统的效率和稳定性。以下是一些关键配置项及其对系统性能的影响: 1. **dfs...

    大数据技术之Hadoop(生产调优手册)V3.3.pdf

    2. **Hadoop 2.x系列配置**:在Hadoop 2.x版本中,可以通过编辑`hadoop-env.sh`文件中的`HADOOP_NAMENODE_OPTS`变量来设置NameNode的最大堆内存(`-Xmx`参数)。 3. **Hadoop 3.x系列配置**:Hadoop 3.x版本中,...

    Hive及Hadoop作业调优

    1. 配置参数调优:合理配置Hadoop和Hive的参数是调优的一个重要步骤。这包括了控制Map任务的数量、合理设置Reduce任务的数量、压缩中间数据以及减少磁盘IO。配置参数调优的目的是提高数据处理的效率和速度,降低不必...

    hadoop调优指南 hadoop调优指南

    ### Hadoop调优指南 Hadoop作为一种分布式计算框架,在大数据处理领域扮演着极其重要的角色。为了充分发挥Hadoop的性能优势,进行合理的系统调优是非常必要的。本文将基于提供的标题、描述、标签以及部分内容,深入...

    Hadoop开发、运维和调优实战考试资料.pdf

    7. 在Hadoop配置中,通过编辑hdfs-site.xml文件可以设置名称节点的相关参数,如要使用的名称节点。 8. dfs.data.dir属性用于指定数据节点上存放数据的目录,而不是元数据。 9. 修改NameNode的Web监控端口可以通过...

    Hadoop调优之调度算法详解一

    在进行Hadoop调优时,除了选择和配置调度器,还需要关注其他因素,如MapReduce参数调整、数据本地性优化、磁盘I/O优化等。只有综合考虑这些方面,才能实现Hadoop集群的最佳性能。同时,持续监控和分析系统性能,及时...

    Hadoop企业优化常用的调优参数.docx

    本文将详细讨论Hadoop调优的关键参数,分为资源相关参数、Shuffle性能优化参数以及容错相关参数。 1. **资源相关参数**: - `mapreduce.map.memory.mb` 和 `mapreduce.reduce.memory.mb` 分别设定MapTask和Reduce...

    基于Hadoop的电商大数据平台性能调优.zip

    4. Hadoop配置参数调优: - 修改`hdfs-site.xml`和`mapred-site.xml`中的各种配置参数,如`io.sort.mb`、`mapreduce.reduce.shuffle.parallelcopies`等,以适应特定场景的性能需求。 5. 数据预处理和格式化: - ...

    hadoop配置相关的好书

    了解如何设置和优化Secondary NameNode的配置可以提高整个Hadoop集群的效率。 "jobtracker"是Hadoop MapReduce旧版中的任务调度器和资源管理器,负责作业的提交、监控和调度。每个MapReduce作业被分解为多个map任务...

    hadoop、habse、yarn、MapReduce调优等总结的集合调优.docx

    `core-site.xml`用于设置Hadoop的一些通用参数,如命名空间的默认值、I/O设置等。`hdfs-site.xml`则用来配置HDFS的具体参数,包括副本数量、块大小、NameNode和DataNode的相关设置。`mapred-site.xml`则是针对...

    Hadoop In Action 中文版

    这包括设置环境变量、配置HDFS和MapReduce参数、启动和停止Hadoop服务等。 6. **Hadoop编程** 书中会详细介绍如何编写MapReduce程序,包括Java API的使用以及使用其他语言如Python、Perl的接口。此外,还会涉及...

    IT面试-Hadoop总结-云计算

    三、Hadoop参数调优 1. JVM参数调优:JVM(Java Virtual Machine)是Hadoop的运行环境,可以通过调整JVM参数来提高Hadoop的性能。 2. Map/Reduce Slots调优:Map/Reduce Slots是Hadoop中的并发度参数,通过调整这个...

    hadoop 64位下载 centos6.5环境编译

    根据实际需求,可能需要对Hadoop进行性能调优,比如调整内存分配、磁盘I/O、网络设置等。同时,定期进行数据检查和备份,以防止数据丢失。 以上就是关于在CentOS 6.5环境下编译和安装64位Hadoop的基本流程和关键...

Global site tag (gtag.js) - Google Analytics