hive优化-map数调控

1.map数是由分割后/合并后最终的总文件数量决定的。

      map数=map任务数=占用数据块数=大文件被分割后的总文件数=小文件被合并后的总文件数 

    由上面的等式可以看出,map数量是由分割后/合并后的总文件数量决定的。

    也就是说文件的分割/合并处理方式是map数量研究的关键点。      

  1)文件的分割

       输入的文件大小

       分割文件的size由参数123决定

计算公式: split_size= Max(min_size,Min(max_size,dfs_size))

分类讨论:

第一种情况: max_size>min_size>dfs_size --> min_size

第二种情况: max_size>dfs_size>min_size --> dfs_size

第三种情况: dfs_size>max_size>min_size --> max_size

参数1: mapreduce.input.fileinputformat.split.maxsize 

>>输入文件分割的最大size

 参数2: mapreduce.input.fileinputformat.split.minsize

>>输入文件分割的最小size

 参数3: dfs.blockSize

>>系统默认分割的size

在小部件上分割ORC文件

set hive.merge.mapfiles=true;
set hive.merge.mapredfiles=true;
set hive.merge.tezfiles=true;
set hive.merge.smallfiles.avgsize=16000000;
Hive 中设置 Map 任务的量,可以通过整以下参来实现。这些参控制Hive 查询执行过程中 Map 阶段的行为: ### 设置 Map 任务量的方法 1. **`mapreduce.job.maps`** 此参用于设置作业的默认 Map 任务上限。尽管此值是一个建议值,但实际的 Map 任务量可能由输入分片的量决定。可以在 `mapred-site.xml` 文件中配置该参,也可以在 Hive 查询前通过 `SET` 命令动态设置。 ```sql SET mapreduce.job.maps=10; ``` 2. **`hive.exec.mapper.init`** 该参定义了初始化时每个 Map 任务的并发,通常与文件大小和据块大小有关。Hive 会根据输入据的大小自动计算出所需的 Map 量,但可以通过以下方式手动整。 3. **`mapreduce.input.fileinputformat.split.maxsize` 和 `mapreduce.input.fileinputformat.split.minsize`** 这两个参控制输入文件的切片大小,从而影响 Map 任务的量。较大的切片会导致较少的 Map 任务,而较小的切片会产生更多的 Map 任务。例如: ```sql SET mapreduce.input.fileinputformat.split.maxsize=256000000; -- 256MB SET mapreduce.input.fileinputformat.split.minsize=128000000; -- 128MB ``` 4. **`hive.mapred.reduce.tasks.speculative.execution`** 虽然此参主要影响 Reduce 的推测执行行为,但它也间接影响 Map 任务的度策略。如果希望提高任务容错性并避免慢节点拖慢整体执行效率,可以启用推测执行[^2]。 ### 示例配置 在 Hive 查询执行前,可以使用如下命令组合来优化 Map 任务的量: ```sql -- 设置最大 Map 任务 SET mapreduce.job.maps=20; -- 控制输入文件切片大小以影响 Map 量 SET mapreduce.input.fileinputformat.split.maxsize=134217728; -- 128MB SET mapreduce.input.fileinputformat.split.minsize=67108864; -- 64MB -- 启用 Map 端推测执行(可选) SET mapreduce.map.speculative=true; ``` ### 注意事项 - 实际的 Map 任务量由 Hadoop 框架根据输入据的切片情况自动决定,因此即使设置了 `mapreduce.job.maps`,最终的 Map 量可能并不完全一致。 - 如果需要更细粒度地控制 Map 任务的行为,还可以结合 `hive.exec.parallel` 参启用并行执行功能。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值