• 大数据学习(18)-任务并行度优化


    &&大数据学习&&

    🔥系列专栏: 👑哲学语录: 承认自己的无知,乃是开启智慧的大门
    💖如果觉得博主的文章还不错的话,请点赞👍+收藏⭐️+留言📝支持一下博主哦🤞


    对于一个分布式的计算任务而言,设置一个合适的并行度十分重要。Hive的计算任务由MapReduce完成,故并行度的调整需要分为Map端和Reduce端。

    12.7.1.1 Map端并行度

    Map端的并行度,也就是Map的个数。是由输入文件的切片数决定的。一般情况下,Map端的并行度无需手动调整。

    以下特殊情况可考虑调整map端并行度:

    1)查询的表中存在大量小文件

    按照Hadoop默认的切片策略,一个小文件会单独启动一个map task负责计算。若查询的表中存在大量小文件,则会启动大量map task,造成计算资源的浪费。这种情况下,可以使用Hive提供的CombineHiveInputFormat,多个小文件合并为一个切片,从而控制map task个数。相关参数如下:

    set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;

    2)map端有复杂的查询逻辑

    若SQL语句中有正则替换、json解析等复杂耗时的查询逻辑时,map端的计算会相对慢一些。若想加快计算速度,在计算资源充足的情况下,可考虑增大map端的并行度,令map task多一些,每个map task计算的数据少一些。相关参数如下:

    1. --一个切片的最大值
    2. set mapreduce.input.fileinputformat.split.maxsize=256000000;

    12.7.1.2 Reduce端并行度

    Reduce端的并行度,也就是Reduce个数。相对来说,更需要关注。Reduce端的并行度,可由用户自己指定,也可由Hive自行根据该MR Job输入的文件大小进行估算。

    Reduce端的并行度的相关参数如下:

    1. --指定Reduce端并行度,默认值为-1,表示用户未指定
    2. set mapreduce.job.reduces;
    3. --Reduce端并行度最大值
    4. set hive.exec.reducers.max;
    5. --单个Reduce Task计算的数据量,用于估算Reduce并行度
    6. set hive.exec.reducers.bytes.per.reducer;

    Reduce端并行度的确定逻辑如下:

    若指定参数mapreduce.job.reduces的值为一个非负整数,则Reduce并行度为指定值。否则,Hive自行估算Reduce并行度,估算逻辑如下:

    假设Job输入的文件大小为totalInputBytes

    参数hive.exec.reducers.bytes.per.reducer的值为bytesPerReducer。

    参数hive.exec.reducers.max的值为maxReducers。

    则Reduce端的并行度为:

    根据上述描述,可以看出,Hive自行估算Reduce并行度时,是以整个MR Job输入的文件大小作为依据的。因此,在某些情况下其估计的并行度很可能并不准确,此时就需要用户根据实际情况来指定Reduce并行度了。

  • 相关阅读:
    zabbix监控方式
    Pytorch:神经网络过程代码详解
    CodeTON Round 2补题(A-E)
    Linux ps 命令使用介绍
    ExtJS 数据处理-Validations(验证器)
    calcite 初试-使用sql读取csv文件
    人工智能基础 | 机器学习模型评估与选择(二)
    MTK外部按键新增
    【C++】特殊类的设计
    AVS3中的intra string copy(ISC)
  • 原文地址:https://blog.csdn.net/weixin_61006262/article/details/134099547