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

Map/Reduce Task JVM 堆大小设置优化

阅读更多
前一阵子发现用户提交的hive query和hadoop job会导致集群的load非常高,经查看配置,发现很多用户擅自将mapred.child.java.opts设置的非常大,比如-Xmx4096m(我们默认设置是-Xmx1024m),  导致了tasktracker上内存资源耗尽,进而开始不断swap磁盘上数据,load飙升
TaskTracker在spawn一个map/reduce task jvm的时候,会根据用户JobConf里面的值设定jvm的参数,然后写入一个taskjvm.sh文件中,然后调用linux命令"bin/bash -c taskjvm.sh"来执行task,
mapred.child.java.opts就是设定jvm的参数之一,在新版本中已经标注Deprecateded,取而代之的是区分Map task和Reduce task的jvm opts,mapred.map.child.java.opts和mapred.reduce.child.java.opts(默认值为-Xmx200m)
当用户在不设该值情况下,会以最大1G jvm heap size启动task,有可能导致OutOfMemory,所以最简单的做法就是设大参数,并且由于这个值不是final,所以用户在自己的mapred-site.xml中可以覆盖默认值。但是如果很多用户都无限度设置的话,high load问题就来了。
其实在构造JVM Args的过程中,是有另外一个admin参数可以覆盖用户端设置的mapreduce.admin.map.child.java.opts, mapreduce.admin.reduce.child.java.opts
经测试,如果相同的jvm arg如果写在后面,比如"-Xmx4000m -Xmx1000m",后面的会覆盖前面的,“-Xmx1000m”会最终生效,通过这种方式,我们就可以有限度的控制heap size了
最终在mapred-site.xml中加上
<property>  
      <name>mapreduce.admin.map.child.java.opts</name>  
      <value>-Xmx1024m</value>  
</property>  
<property>  
      <name>mapreduce.admin.reduce.child.java.opts</name>  
      <value>-Xmx1536m</value>  
</property>


构造child java opts的call stack:



不过这种方式只是限定了task的jvm heap最大限制,如果用户hive query优化不够好还是会抛出OOM,其实是把问题抛给了用户,
接下来还要和用户一起看下到底是哪些query会占用如此大memory,看看有没有进一步优化的空间

转自:http://tech.ddvip.com/2013-10/1381314271203741.html
分享到:
评论

相关推荐

    HiveSQL优化手册

    2. **合理设置Map/Reduce Task数量** - **减少Map数量**:通过小文件合并或调整JVM重用次数来减少Map数量,降低资源浪费。JVM重用可以使得JVM实例在同一个Job中重复使用,通常设置为10-20次,具体数值需根据实际...

    23、hadoop集群中yarn运行mapreduce的内存、CPU分配调度计算与优化

    - `yarn.app.mapreduce.am.command-opts`: AM的Java选项,例如JVM堆大小。 - `mapreduce.map.memory.mb` 和 `mapreduce.reduce.memory.mb`: 分别为Map任务和Reduce任务分配的内存。 - `mapreduce.map.java.opts` 和 ...

    hive工作调优小结

    - 启用JVM重用:设置**mapreduce.job.jvm.numtasks**,该参数指定单个JVM实例可以运行的Map或Reduce任务的数量。 - 根据作业的具体情况调整JVM重用策略。 综上所述,通过对Hive作业的各个阶段进行细致的调优,可以...

    Hadoop学习总结之五:Hadoop的运行痕迹

    - DataNode, TaskTracker, Map 和 Reduce 的 Task JVM 在 datanode01, datanode02, datanode03 上运行 - **数据备份**: - 每个文件有三份副本 - **数据存储路径**: - HDFS 及 Map-Reduce 数据存储在 `/data/...

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

    - **mapreduce.task.jvm.numtasks**:设置每个JVM执行的任务数量,重用JVM可以减少启动时间,但过多可能导致内存不足。 7. **Reduce侧优化** - **io.sort.factor**和**io.sort.mb**:在Reduce阶段同样适用,调整...

    hadoop 2.9.0 mapred-default.xml 属性集

    设置子进程的JVM参数,例如堆大小。 32. mapred.child.env 设置子进程的环境变量。 33. mapreduce.admin.user.env 定义管理员用户的环境。 34. yarn.app.mapreduce.am.log.level 定义ApplicationMaster的日志级别...

    【Spark调优篇03】Spark之Shuffle调优1

    在Shuffle过程中,reduce端的缓冲区大小决定了每次可以从map端拉取的数据量。增大这个值(如通过`spark.reducer.maxSizeInFlight`参数设置)可以减少网络传输的次数,进而提高效率。默认值为48MB,可以根据实际情况...

    Hadoop 参数配置优化.docx

    默认未设置,用于限制reduce阶段合并map输出的内存使用。建议根据硬件资源调整,例如设置为200MB。 4. **io.sort.factor**: 默认值为10,表示排序时并行处理的流数量。可以增加此值以提高排序性能,例如设置为...

    大数据企业级调优的完整过程:9.1 Fetch抓取;9.2 本地模式;9.3 表的优化;9.4 数据倾斜;9.5 并行执行

    JVM重用能减少启动JVM的开销,通过设置`hive.mapred.reduce.tasks.speculative.execution`为false,可以避免不必要的任务推测执行,提高JVM利用率。 **9.8 推测执行** 虽然在某些场景下可以提高效率,但在大数据...

    hadoop提交作业分析.doc

    在启动Hadoop作业时,可以通过设置环境变量`HADOOP_HEAPSIZE`来自定义JVM的堆大小。 2. **HADOOP_OPTS**: 这个变量包含了一组特定于Hadoop的Java选项,可能包括安全、日志、调试等相关的配置。在实际运行时,这些...

    Hive Hadoop Spark优化

    2. **Task并行度**:合理设置Map和Reduce任务数量,以充分利用集群资源,避免过载或资源浪费。 3. **内存调优**:根据数据规模和计算需求调整MapReduce的内存参数,防止内存溢出。 4. **Compressio编码**:使用压缩...

    大数据各类性能调优

    - 优化Map和Reduce任务的数量。 - 合理分配内存资源。 ##### 12.7.2 确定Job基线 - 确定Job的基线配置对于后续的性能调优至关重要。基线配置应包括但不限于: - 默认的Map和Reduce任务数量。 - 默认的内存和CPU...

    hadoop调优指南 hadoop调优指南

    - **mapreduce.map.java.opts** 和 **mapreduce.reduce.java.opts**:控制Java虚拟机(JVM)的堆内存大小。 - **dfs.blocksize**:定义HDFS中的块大小,默认为128MB或256MB。对于大文件,增大块大小可以减少元数据...

    hadoop 配置项的调优

    3. **mapred.child.java.opts**:该配置用于设定JVM进程的最大堆内存。由于reduce任务通常需要更大的内存,因此合理设置此参数可避免内存溢出,但也不能设置得过大,否则可能增加GC开销。 4. **Input Split的大小**...

    Hadoop集群测试报告.pdf

    - `mapreduce.map.java.opts` 和 `mapreduce.reduce.java.opts`: 定义了Map任务和Reduce任务的JVM初始堆大小。 - `mapreduce.task.io.sort.mb` 和 `mapreduce.task.io.sort.factor`: 控制排序阶段使用的内存以及...

    06-大数据技术之面试题复习1.6带答案.pdf

    - **减少溢写次数**:可以通过调整`mapreduce.task.io.sort.mb`(默认100M)和`mapreduce.map.sort.spill.percent`(默认80%)来增加环形缓冲区大小和溢出阈值,从而减少溢写次数。 - **异常重试**:通过设置`...

    Hadoop C++ 扩展

    4. **Reduce Task Execution**:Reduce任务也由C++子进程执行,它们读取经过Shuffle后的中间结果,并进行聚合处理,最终输出结果。 ##### 2.3 消息序列 在HCE框架中,为了实现Java与C++之间的交互,设计了一套消息...

    大数据技术之高频面试题8.0.8(1)(1).docx

    - **合理设置Map和Reduce数量**。 - **设置Map、Reduce共存**。 - **规避使用Reduce**。 - **增加Reduce端并行性**。 - **增大Reduce端内存大小**。 - **IO传输**: - **采用数据压缩方法**来提高传输效率。

    sparkcore相关实例

    同时,它引入了堆外内存(Off-Heap)存储,以处理超过JVM堆大小的数据。 9. **故障恢复**: Spark Core通过检查点和血统(Lineage)来实现容错。如果Executor失败,Spark可以通过重新计算丢失的任务来恢复状态,...

    hadoop源码分析

    TaskTracker作为工作节点,负责接收和执行JobTracker分配的任务,包括MapTask和ReduceTask。JvmManager则管理TaskTracker上的JVM实例,以优化资源利用率。 理解Hadoop源码有助于我们更深入地了解其内部工作机制,...

Global site tag (gtag.js) - Google Analytics