Hadoop与JVM重用对应的参数是mapred.job.reuse.jvm.num.tasks,默认是1,表示一个JVM上最多可以顺序执行的task数目(属于同一个Job)是1。也就是说一个task启一个JVM。
比如在集群中配置每个slave节点最多同时运行16个map和2个reduce。那么在map阶段,slave节点会启动最多16个JVM用于map。如下:
dm@slave01:/usr/local/hadoop/conf$ jps
4883 Child
4924 Child
4680 Child
4622 Child
4743 Child
4838 Child
4719 Child
4650 Child
4649 Child
5299 Jps
32296 TaskTracker
4663 Child
4767 Child
4897 Child
4794 Child
4878 Child
4698 Child
4633 Child
32049 DataNode
dm@slave01:/usr/local/hadoop/conf$ ps -e | grep java
12597 ? 00:00:02 java
12624 ? 00:00:02 java
12646 ? 00:00:02 java
12661 ? 00:00:02 java
12695 ? 00:00:01 java
12707 ? 00:00:02 java
12710 ? 00:00:02 java
12715 ? 00:00:02 java
12741 ? 00:00:02 java
12787 ? 00:00:01 java
12818 ? 00:00:01 java
12823 ? 00:00:02 java
12831 ? 00:00:01 java
12870 ? 00:00:01 java
12895 ? 00:00:01 java
12922 ? 00:00:01 java
32049 ? 00:00:38 java
32296 ? 00:00:14 java
其中前两个是固定的进程。
为每个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.maximum和mapred.tasktracker.reduce.tasks.maximum
决定,并且这两个参数在mapred-site.xml中设置。其他方法,如在JobClient端通过命令行-Dmapred.tasktracker.map.tasks.maximum=number或者conf.set("mapred.tasktracker.map.tasks.maximum","number")设置都是无效的。
mapred.tasktracker.map.tasks.maximum和mapred.tasktracker.reduce.tasks.maximum的设置可参考:
分享到:
相关推荐
此外,跳过环记录、JVM重用等优化技术也被提及,旨在提高资源利用率和处理效率。任务执行环境包括了子主题1和子主题2,虽然在给出的内容中没有具体说明,但可以推测涉及任务调度、资源管理等高级特性。 Hadoop I/O...
- **mapred.map.tasks**和**mapred.reduce.tasks**:这两个参数分别用于设置Mapper和Reducer的数量。适当调整可以平衡集群资源的使用,提高作业并行度。 5. **Split大小** - **mapred.max.split.size**和**mapred...
2. **Task并行度**:合理设置Map和Reduce任务数量,以充分利用集群资源,避免过载或资源浪费。 3. **内存调优**:根据数据规模和计算需求调整MapReduce的内存参数,防止内存溢出。 4. **Compressio编码**:使用压缩...
本章还详细介绍了Shuffle和排序过程、任务执行环境、推测执行、输出提交器、任务JVM重用和跳过不良记录。 第七章讨论了MapReduce类型和格式,介绍了默认的MapReduce作业类型、输入和输出格式(包括文本、二进制、...
4. **推测执行和JVM重用**:这两种优化策略可以提高MapReduce的性能,通过预测任务可能的延迟并提前启动新的任务实例,以及复用已存在的JVM进程,减少资源浪费。 5. **Hadoop均衡器**:用于调整集群中数据的分布,...
重用JVM 跳过坏记录 任务执行环境 第7章 MapReduce的类型与格式 MapReduce的类型 默认的MapReduce作业 输入格式 输入分片与记录 文本输入 二进制输入 多种输入 数据库输入(和输出) 输出格式...
重用JVM 跳过坏记录 任务执行环境 第7章 MapReduce的类型与格式 MapReduce的类型 默认的MapReduce作业 输入格式 输入分片与记录 文本输入 二进制输入 多种输入 数据库输入(和输出) 输出格式 文本输出 二进制输出 ...
JVM重用是指在同一个Java虚拟机实例中重复使用Map或Reduce任务,而不是为每个任务启动新的JVM实例。这可以显著减少任务启动的时间,从而提高性能。 **优化建议**: - 启用JVM重用:设置**mapreduce.job.jvm....
- **重用JVM**:减少JVM启动开销,提高效率。 ### 安全性和监控 Hadoop支持安全模式,提供fsck工具进行文件系统检查,以及各种守护进程的配置管理,便于日常维护和监控。 ### 应用场景 Hadoop不仅适用于搜索引擎...
它主要由两个主要阶段组成:Map阶段和Reduce阶段,同时依赖于Hadoop的HDFS(Hadoop Distributed File System)作为底层数据存储系统。 HDFS是Hadoop的核心组件之一,它是一种分布式文件系统,能够将大型数据集分布...
905.2.2 基于DistributedCache的复制联结 985.2.3 半联结:map侧过滤后在reduce侧联结 1015.3 创建一个Bloom filter 1025.3.1 Bloom filter做了什么 1025.3.2 实现一个Bloom filter 1045.3.3 Hadoop 0.20以上版本的...
- **重用JVM**:优化资源利用率,避免频繁创建和销毁JVM实例。 - **IDS(Input Descriptor Set)**:MapReduce作业的输入描述符。 - **输入格式和输出格式**:自定义数据输入和输出的类。 - **计数器**:跟踪...
- **启用JVM重用** **1.2.5 Shuffle及优化** **Shuffle过程**: - Map阶段 - Reduce阶段 - IO传输 **优化建议**: - **Map阶段**: - **增大环形缓冲区大小**。 - **增大溢写比例**。 - **减少溢写文件合并...
+ 开启 JVM 重用 5. Shuffle 及优化: * Shuffle 过程:Map -> Shuffle -> Reduce * 优化方法: + 增大环形缓冲区大小 + 增大环形缓冲区溢写的比例 + 减少对溢写文件的 merge 次数 + 采用 Combiner 提前...
- 优化Map和Reduce任务的数量。 - 合理分配内存资源。 ##### 12.7.2 确定Job基线 - 确定Job的基线配置对于后续的性能调优至关重要。基线配置应包括但不限于: - 默认的Map和Reduce任务数量。 - 默认的内存和CPU...
- 启用JVM重用。 - 并行化处理。 - **Hive底层MapReduce优化**: - 设置合理的Map数。 - 设置合理的Reduce数。 #### 第三部分:Hive高级知识 - **Hive文件格式**: - **常见文件格式**: TextFile、...
- JVM重用的原理与设置; - Mapper/Reducer数量的合理设定; - 压缩技术与分布式缓存的应用; - 多job间共享中间结果集的技巧; - 执行计划的深入分析; - 几种Join方式(ReduceJoin、MapJoin、SMBJoin)的...