zoukankan      html  css  js  c++  java
  • Pig 和 Hive 的优化

    一、Pig 优化

    pig 主要瓶颈:

    (1). 输入数据量大小

    (2). shuffle大小,即Map输出的大小

    (3). 输出结果大小

    (4). 中间结果大小

    (5).内存


    主要优化策略:


    1. 尽早过滤 (filter) ,去除不需要的记录行

    2. 尽早映射 (foreach......generate......) ,去除不需要的列

    3. 正确使用Join:

    (a).  Join注意小表在前,大表在后

    (b).  合理运用分片-复制连接 replicated join: join big_table  by col1 ,  join small_table by col2   using 'replicated'

    (c).  合理运用倾斜数据连接 skew join:join_table = join table1 by col1,  join table2 by col2 using 'skewed'

    (d).  合理运用排好顺序的数据连接 merge join:join table1 by col1,  join table2 by col2 using 'merge'

    4. 为各个字段指定具体的数据类型,不要用默认的bytearray

    5. 调整并行度 parrallel N.  调大但必须留有余地

    6. 压缩中间结果, 配置mapred.compredd.map.output=true,  mapred.compredd.map.output.compression.codec为LZO/Snappy等, 

                                     配置pig.tmpfilecompression=true,   pig.tmpfilecompression.codec 为LZO/Snappy等, 

    7. 调节参数 pig.cachedbag.memusage,配置为bag分配的内存百分比,默认0.1

    8. 调节参数 pig.skewedjoin.reduce.memusage,配置join过程中出现数据倾斜时,将一边数据具体化到内存中去的可使用内存百分比,默认0.3

    9. 适当时候使用多个multiquery 并组装

    10.使用Explain 观察执行计划进行优化


    二、Hive 优化


    主要优化策略:

    1. 使用Explain 观察执行计划进行优化

    2. 正确使用Join:

    (a). Join注意小表在前,大表在后

    (b). 合理运用 map-side join:设置了 hive.auto.convert.join=true,   hive.mapjoin.smalltable.filesize=2500,  hive.optimize.bucketmapJoin=true 等参数会自动开启


    3. 小数据量的时候用本地模式,设置mapred.job.tracker=local, 或者让Hive自动使用hive.exec.mode.local=auto

    4. 开启 job 并行执行 , hive.exec.parallel=true, 

    5.  设置严格模式 hive.mapred.mode=strict,  此时有以下限制:查询分区表必须指定分区、Order By 必须使用Limit、禁止笛卡尔积查询

    6. 调整Mapper、Reducer 个数,一般 hive.exec.reducers.max = 1.5*总Reduce槽位数/执行中的查询平均个数

    7. JVM 重用,即每个JVM可运行多个task, 配置 mapred.job.reuse.jvm.num.tasks=10

    8. 使用索引

    9.  动态分区调整,即限制分区的最大个数 hive.exec.max.dynamic.partitions,  hive.exec.max.dynamic.partitions.pernode

    10. 推测执行, mapred.map.tasks.speculative.execution=true,  mapred.reduce.tasks.speculative.execution=true,   hive.reduce.tasks.speculative.execution=true, 

    11. 将多个GROUP  BY 操作组合到单个Mapreduce,hive.multigroupby.singlemr=true

    12. 使用虚拟列  INPUT_FILE_NAME, BLOCK_OFFSET_INSIDE_FILE,   ROW_OFFSET_INSIDE_BLOCK 调试 

    13. 压缩中间结果,hive.exec.compress.intermediate=true, 

    14. 使用Sequence File 并压缩


    三、Pig 和Hive 优化的异同


    相同:

    1、都要合理运用 Join:小表在前,大表在后;都有map-side join

    2、都可通过压缩中间结果提升性能

    3、都可调节并行度,即reducer个数

    4、都可查看 Explain


    不同:

    1、Hive有分区,故可优化分区

    2、Hive可以使用索引

    3、Pig 类似存储过程,故而可优化Filter、Foreach...Generator 等,Hive 不支持存储过程

    4、Pig 的Join 有 skew join、merge join



  • 相关阅读:
    node.js 的简单介绍
    vue浅析
    rest_framework的分页器组件配置与使用
    restframwork组件的权限认证
    关于and和or的运算
    restframwork组件的使用
    实现简单的子页面传值给父页面
    Django使用orm模块时想看多对对数据关系的配置
    Django更新数据库表时无法执行表修改 指定Django要使用的数据库
    图论-kruskal算法-稀疏图
  • 原文地址:https://www.cnblogs.com/leeeee/p/7276135.html
Copyright © 2011-2022 走看看