zoukankan      html  css  js  c++  java
  • Hive优化

    整体架构优化点:

    根据不同业务需求进行日期分区, 并执行类型动态分区。

    hive.exec.dynamic.partition=true

    为了减少磁盘存储空间以及I/O次数, 对数据进行压缩(Gzip)

    mapreduce.output.fileoutputformat.compress=true

    mapreduce.output.fileoutputformat.compress.type=BLOCK
    mapreduce.output.fileoutputformat.compress.codec=org.apache.io.compress.GzipCodec

    mapreduce.map.output.compress=true

    mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.GzipCodec

    hive.exec.compress.output=true

    hive.exec.compress.intermediate=true

    hive中间表以SequenceFile保存, 可以节约序列化和反序列化时间

    hive.query.result.fileformat=SequenceFile

    yarn优化

    为了易于管理资源和调度资源,Hadoop YARN内置了资源规整化算法,它规定了最小可申请资源量、最大可申请资源量和资源规整化因子,如果应用程序申请的资源量小于最小可申请资源量,则YARN会将其大小改为最小可申请量,也就是说,应用程序获得资源不会小于自己申请的资源,但也不一定相等 。

    如果应用程序申请的资源量大于最大可申请资源量,则会抛出异常,无法申请成功

    规整化因子是用来规整化应用程序资源的,应用程序申请的资源如果不是该因子的整数倍,则将被修改为最小的整数倍对应的值,公式为ceil(a/b)*b [a: 应用程序申请的资源, b: 规整化因子]

    yarn-site.xml中参数设置:

    # 最小可申请内存量, 默认是1024

    yarn.schedular.minimum-allocation-mb

    # 最小可申请CPU数, 默认为1

    yarn.schedular.minimum-allocation-vcores

    # 最大可申请内存量, 默认为8096

    yarn.schedular.maximum-allocation-mb

    # 最大可申请CPU数, 默认为4

    yarn.schedular.maximum-allocation-vcores

    规整化因子对于不同的调度器不同:

    FIFO(First In First Out) 和 Capacity Scheduler

    规整化因子等于最小可申请资源量, 不可单独配置

    Fair Scheduler(公平调度)

    规整化因子通过yarn.schedular.increment-allocation-mb和yarn.schedular.increment-allocation-vcores设置, 默认是1024和1。

    mapreduce优化

    reduce切割算法:

    hive.exec.reducers.max=999
    hive.exec.reducers.bytes.per.reducer=1G
    reduce task num=min{reducers.max,input.size/bytes.per.reducer}
    ##可以根据实际需求来调整reducer个数

    SQL优化

    整体优化策略:

    去除查询中不需要的column

    Where条件判断等在TableScan阶段就进行过滤

    利用Partition信息, 只读取符合条件的Partition

    Map端join, 以大表作驱动, 小表载入所有mapper内存中

    调整Join顺序, 确保以大表作为驱动表

    对于数据分布不均匀的表Group by时, 为避免数据集中到少数的reducer上, 分成两个map-reduce阶段。第一个阶段先用Distinct列进行shuffle, 然后在reduce端部分聚合, 减小数据规模, 第二个阶段, 再按group-by列聚合。

    在map端用hash进行部分聚合, 减小reduce端数据处理规模。

  • 相关阅读:
    windbg 常用命令
    逐梦
    字体反爬个人心得
    Python字典及基本操作
    openCV学习笔记(3)边缘检测和模板匹配
    使用selenium被识别的解决方法
    使用python发送QQ邮件,以及添加附件
    selenium.common.exceptions.JavascriptException: Message: javascript error: Cannot set property 'playbackRate' of null的解决
    (2)进程管理
    error: (-215:Assertion failed) (depth == CV_8U || depth == CV_32F) && _img.dims() <= 2 in function 'cv::matchTemplate'等opencv踩过的坑
  • 原文地址:https://www.cnblogs.com/songyuejie/p/12594092.html
Copyright © 2011-2022 走看看