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

Hadoop的JVM重用

阅读更多

Hadoop中有个参数是mapred.job.reuse.jvm.num.tasks(hadoop2 为:mapreduce.job.jvm.numtasks),默认是1,表示一个JVM上最多可以顺序执行的task数目(属于同一个Job)是1。也就是说一个task启一个JVM。

 

 

比如我配的是每个slave节点最多同时运行8个map和8个reduce。那么在map阶段,slave节点会启动最多8个JVM用于map。如下:

 

root@slave1:~# jps

28291 Child

28290 Child

28281 Child

28293 Child

28277 Child

1487 DataNode

28298 Child

28273 Child

28272 Child

1636 TaskTracker

28799 Jps

 

root@slave1:~# ps -e | grep java

 1487 ?        00:53:26 java

TaskTracker

 1636 ?        00:12:42 java

DataNode

28272 ?        00:00:35 java

Child

28273 ?        00:00:35 java

Child

28277 ?        00:00:36 java

Child

28281 ?        00:00:36 java

Child

28290 ?        00:00:36 java

Child

28291 ?        00:00:37 java

Child

28293 ?        00:00:36 java

Child

28298 ?        00:00:36 java

Child

其中前两个是固定的进程。

 

为每个task启动一个新的JVM将耗时1秒左右,对于运行时间较长(比如1分钟以上)的job影响不大,但如果都是时间很短的task,那么频繁启停JVM会有开销。

 

如果我们想使用JVM重用技术来提高性能,那么可以将mapred.job.reuse.jvm.num.tasks设置成大于1的数。这表示属于同一job的顺序执行的task可以共享一个JVM,也就是说第二轮的map可以重用前一轮的JVM,而不是第一轮结束后关闭JVM,第二轮再启动新的JVM。

 

那么最多一个JVM能顺序执行多少个task才关闭呢?这个值就是mapred.job.reuse.jvm.num.tasks。如果设置成-1,那么只要是同一个job的task(无所谓多少个),都可以按顺序在一个JVM上连续执行。

 

如果task属于不同的job,那么JVM重用机制无效,不同job的task需要不同的JVM来运行。

 

注意:

JVM重用技术不是指同一Job的两个或两个以上的task可以同时运行于同一JVM上,而是排队按顺序执行。

一个tasktracker最多可以同时运行的task数目由mapred.tasktracker.map.tasks.maximummapred.tasktracker.reduce.tasks.maximum

决定,并且这两个参数在mapred-site.xml中设置。其他方法,如在JobClient端通过命令行

-Dmapred.tasktracker.map.tasks.maximum=number或者conf.set("mapred.tasktracker.map.tasks.maximum","number")设置都是无效的。

 

附《Hadoop权威指南》上的介绍:

 

Task JVM Reuse

Hadoop runs tasks in their own Java Virtual Machine to isolate them from other running tasks. The overhead of starting a new JVM for each task can take around a second, which for jobs that run for a minute or so is insignificant. However, jobs that have a large number of very short-lived tasks (these are usually map tasks), or that have lengthy initialization, can see performance gains when the JVM is reused for subsequent tasks.

 

With task JVM reuse enabled, tasks do not run concurrently in a single JVM. The JVM runs tasks sequentially. Tasktrackers can, however, run more than one task at a time, but this is always done in separate JVMs. The properties for controlling the tasktrackers number of map task slots and reduce task slots are discussed in “Memory” on page 269.

The property for controlling task JVM reuse is mapred.job.reuse.jvm.num.tasks: it specifies the maximum number of tasks to run for a given job for each JVM launched; the default is 1 (see Table 6-4). Tasks from different jobs are always run in separate JVMs. If the property is set to –1, there is no limit to the number of tasks from the same job that may share a JVM. The methodsetNumTasksToExecutePerJvm() on JobConf can also be used to configure this property.

 

Tasks that are CPU-bound may also benefit from task JVM reuse by taking advantage of runtime optimizations applied by the HotSpot JVM. After running for a while, the HotSpot JVM builds up enough information to detect performance-critical sections in the code and dynamically translates the Java byte codes of these hot spots into native machine code. This works well for long-running processes, but JVMs that run for seconds or a few minutes may not gain the full benefit of HotSpot. In these cases, it is worth enabling task JVM reuse.

 

Another place where a shared JVM is useful is for sharing state between the tasks of a job. By storing reference data in a static field, tasks get rapid access to the shared data.

分享到:
评论

相关推荐

    大数据云计算技术 Hadoop运维笔记(共21页).pptx

    解决方案包括移除Spring,开启JVM重用,使用LZO压缩,增加reduce并行复制线程数。 - 事故三:DataNode大面积故障。原因是交换机模块故障和DN内存不足。解决策略是升级到CDH3u4并增大DN内存至2GB。 6. **压缩与...

    Hadoop权威指南 第二版(中文版)

     重用JVM  跳过坏记录  任务执行环境 第7章 MapReduce的类型与格式  MapReduce的类型  默认的MapReduce作业  输入格式  输入分片与记录  文本输入  二进制输入  多种输入  数据库输入(和输出)  输出格式...

    hadoop 权威指南(第三版)英文版

    本章还详细介绍了Shuffle和排序过程、任务执行环境、推测执行、输出提交器、任务JVM重用和跳过不良记录。 第七章讨论了MapReduce类型和格式,介绍了默认的MapReduce作业类型、输入和输出格式(包括文本、二进制、...

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

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

    Hadoop权威指南(中文版)2015上传.rar

    重用JVM 跳过坏记录 任务执行环境 第7章 MapReduce的类型与格式 MapReduce的类型 默认的MapReduce作业 输入格式 输入分片与记录 文本输入 二进制输入 多种输入 数据库输入(和输出) 输出格式 文本输出 二进制输出 ...

    大数据技术分享 Hadoop关于处理大量小文件的问题和解决方法 共3页.pdf

    - **JVM重用机制**:通过设置`mapred.job.reuse.jvm.num.tasks`属性,可以在一个JVM中运行多个Map任务,以减少JVM的启动次数,从而节省资源。 - **优点**:减少JVM启动的开销,提高资源利用率。 **2. ...

    Hadoop-MindMap 技术全解

    此外,跳过环记录、JVM重用等优化技术也被提及,旨在提高资源利用率和处理效率。任务执行环境包括了子主题1和子主题2,虽然在给出的内容中没有具体说明,但可以推测涉及任务调度、资源管理等高级特性。 Hadoop I/O...

    通用大数据存储和分析处理平台-Hadoop.pdf

    4. **推测执行和JVM重用**:这两种优化策略可以提高MapReduce的性能,通过预测任务可能的延迟并提前启动新的任务实例,以及复用已存在的JVM进程,减少资源浪费。 5. **Hadoop均衡器**:用于调整集群中数据的分布,...

    Hadoop关于处理大量小文件的问题和解决方法.docx

    例如,通过设置`mapred.job.reuse.jvm.num.tasks`属性,可以在同一个JVM中重用Map Task,以减少JVM的启动开销。此外,MultiFileInputSplit可以让一个Map Task处理多个输入split,进一步提高效率。 小文件产生的原因...

    Hadoop实战

    1286.3 性能调优 1296.3.1 通过combiner来减少网络流量 1296.3.2 减少输入数据量 1296.3.3 使用压缩 1296.3.4 重用JVM 1326.3.5 根据猜测执行来运行 1326.3.6 代码重构与算法重写 1336.4 小结 134第7章 细则手册 ...

    解决jvmjava.net.BindException: Address already in use: JVM_Bind异常

    3. **操作系统限制**:在某些操作系统中,如Windows,可能会有端口重用的延迟,即使原始进程已经结束,端口也可能在一段时间内不可用。 ### 解决方案 1. **检查并结束占用端口的进程**:你可以使用任务管理器...

    通用大数据存储和分析处理平台-Hadoop.docx

    - **重用JVM**:减少JVM启动开销,提高效率。 ### 安全性和监控 Hadoop支持安全模式,提供fsck工具进行文件系统检查,以及各种守护进程的配置管理,便于日常维护和监控。 ### 应用场景 Hadoop不仅适用于搜索引擎...

    Hive Hadoop Spark优化

    4. **JVM调优**:调整JVM参数,如堆大小、垃圾收集器类型等,以适应大数据处理的需要。 总结来说,Hive、Hadoop和Spark的优化涵盖了元数据、分区、内存、计算任务调度、网络传输、数据持久化等多个方面。通过这些...

    通用大数据存储与分析处理平台_Hadoop.docx

    - **重用JVM**:优化资源利用率,避免频繁创建和销毁JVM实例。 - **IDS(Input Descriptor Set)**:MapReduce作业的输入描述符。 - **输入格式和输出格式**:自定义数据输入和输出的类。 - **计数器**:跟踪...

    hive工作调优小结

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

    大数据-互联网大厂面试真题附含答案高频面试题.pdf

    + 开启 JVM 重用 5. Shuffle 及优化: * Shuffle 过程:Map -> Shuffle -> Reduce * 优化方法: + 增大环形缓冲区大小 + 增大环形缓冲区溢写的比例 + 减少对溢写文件的 merge 次数 + 采用 Combiner 提前...

    Mapreduce体系

    此外,通过重用已经初始化好的JVM,可以避免频繁的JVM启动带来的开销,提高效率。用户可以配置单个JVM上能运行的最大任务数量,以平衡资源利用和任务并发。 在运行过程中,Hadoop系统可能会遇到DataNode上的block...

Global site tag (gtag.js) - Google Analytics