MapReduce优化----map和reduce的槽数的设定

1、修改mapreduce中map和reduce的槽数 
因为hadoop 的集群所有机器不可能完全硬件配置一样,那么不同节点机器负载也不一样,不同节点上并发的最大map
和reduce数量也不一样。
可以先试验下将每台tasktracker的map槽数调整到合适的数量,使得其能执行最大map数量。
在对应节点机器上修改mapred-site.xml文件,添加如下参数:默认参数为2:
在对应的节点机器上修改mapreduce-sit.xml文件,添加参数如下:
<property>
<name>mapred.tasktracker.map.tasks.maximum</name>
<value>2</value>
<description>The maximum number of map tasks that will be run
simultaneously by a task tracker.
</description>
</property>
<property>
<name>mapred.tasktracker.reduce.tasks.maximum</name>
<value>2</value>
<description>The maximum number of reduce tasks that will be run
simultaneously by a task tracker.
</description>
</property>
还有多种参数的设置:mapreduce的优化,hdfs的优化,hbase的优化
hbase的优化见 http://jiajun.iteye.com/category/99897?show_full=true
### 合理设置 Hive 中 Map Reduce 的最佳实践 在 Hive 中,合理设置 Map Reduce量对于任务性能至关重要。以下是关于如何根据据量集群资源进行优化的具体说明: #### 1. **Map 的设置** Map 的主要决定因素包括输入文件的量、大小以及集群中块的大小。以下是一些关键点: - 输入文件的总个会影响 Map 。如果存在大量小文件(远小于 HDFS 块大小,默认为 128MB),每个小文件会被当作一个单独的任务分配给一个 Map[^5]。 - 如果一个小文件占用一个 Map 任务,而其处理时间较短,则会造成大量的启动开销资源浪费。因此,在这种情况下应考虑合并小文件。 ##### 解决方案:减少 Map 为了减少因小文件过多而导致的低效问题,可以启用 Hive 提供的小文件合并功能: ```sql SET hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat; SET hive.exec.reducers.bytes.per.reducer=<目标值>; ``` 这将允许多个小文件被组合到同一个 Map 任务中。 ##### 解决方案:增加 Map 当输入文件较大且任务逻辑复杂时,可以通过调整 `mapreduce.input.fileinputformat.split.maxsize` 参来控制每个 Split 的最大尺寸,进而增加 Map 。例如: ```sql SET mapreduce.input.fileinputformat.split.maxsize=67108864; -- 设置为 64MB ``` 这样可以让更多的 Map 并行运行,从而加速任务执行[^5]。 --- #### 2. **Reduce 的设置** 合理的 Reduce 取决于以下几个方面: - 默认情况下,每个 Reduce 处理的据量由参 `hive.exec.reducers.bytes.per.reducer` 控制,默认值为 256MB[^3]。 - 单个任务的最大 Reduce 由参 `hive.exec.reducers.max` 定义,默认为 1009。 ##### 计算公式 计算 Reduce 的通用公式如下: \[ \text{N} = \min(\text{hive.exec.reducers.max}, \frac{\text{总输入据量}}{\text{hive.exec.reducers.bytes.per.reducer}}) \] 其中: - 总输入据量是指参与运算的所有据总量; - `hive.exec.reducers.bytes.per.reducer` 表示每个 Reduce 应处理的理想据量。 ##### 实际操作案例 假设总输入据量为 1GB(约 \(10^9\) 字节),则可以根据上述公式得出: \[ \text{N} = \min(1009, \frac{10^9}{256 * 10^6}) = \min(1009, 4) = 4 \] 此时会生成 4 个 Reduce 任务。 ##### 动态设置 Reduce 也可以通过手动设置 `set mapreduce.job.reduces=N` 来覆盖默认行为。不过这种方式不推荐频繁使用,因为动态调整可能导致资源配置不合理[^2]。 --- #### 3. **注意事项** - **过少的 Reduce **:会导致单个 Reduce 负载过高,延长任务完成时间。 - **过多的 Reduce **:虽然能加快某些阶段的速度,但会产生额外的初始化成本,并可能引发下游任务中小文件过多的问题[^5]。 - 对于简单的聚合查询(无 Group By 或 Order By),尽量避免不必要的 Reduce 阶段。例如,将带 Group By 的语句重写为更高效的版本。 --- ### 示例代码 以下是一个完整的配置实例,展示如何针对不同场景调整 Map Reduce: ```sql -- 减少小文件带来的影响 SET hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat; -- 设置每个 Reduce 处理的据量为 128MB SET hive.exec.reducers.bytes.per.reducer=134217728; -- 设定最大 Reduce 为 500 SET hive.exec.reducers.max=500; -- 测试查询 SELECT COUNT(*) FROM large_table WHERE condition='value'; ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值