hive相关知识点

  1. hive架构
    组件:

    1. meta store
    2. cli client
    3. jdbc client
    4. driver
    5. sql parser解析器
    6. physical plan编译器
    7. query optimizer优化器
    8. execution执行器
  2. hive语句调优常见参数

  3. 各种sql语句hvie如何实现
    3.1 join的实现原理
    Map:
      1、以 JOIN ON 条件中的列作为 Key,如果有多个列,则 Key 是这些列的组合
      2、以 JOIN 之后所关心的列作为 Value,当有多个列时,Value 是这些列的组合。在 Value 中还会包含表的 Tag 信息,用于标明此 Value 对应于哪个表
      3、按照 Key 进行排序
    Shuffle:
      1、根据 Key 的值进行 Hash,并将 Key/Value 对按照 Hash 值推至不同对 Reduce 中
    Reduce:
      1、 Reducer 根据 Key 值进行 Join 操作,并且通过 Tag 来识别不同的表中的数据
    3.2 group by的实现原理
    3.3 distinct的实现原理

  4. sql转化为mapreduce的过程

    • Antlr定义SQL的语法规则,完成SQL词法,语法解析,将SQL转化为抽象语法树AST Tree
    • 遍历AST Tree,抽象出查询的基本组成单元QueryBlock
    • 遍历QueryBlock,翻译为执行操作树OperatorTree
    • 逻辑层优化器进行OperatorTree变换,合并不必要的ReduceSinkOperator,减少shuffle数据量
    • 遍历OperatorTree,翻译为MapReduce任务
    • 物理层优化器进行MapReduce任务的变换,生成最终的执行计划
  5. Hive 编译器的工作职责
    (1)Parser:将 HQL 语句转换成抽象语法树(AST:Abstract Syntax Tree)
    (2)Semantic Analyzer:将抽象语法树转换成查询块
    (3)Logic Plan Generator:将查询块转换成逻辑查询计划
    (4)Logic Optimizer:重写逻辑查询计划,优化逻辑执行计划
    (5)Physical Plan Gernerator:将逻辑计划转化成物理计划(MapReduce Jobs)
    (6)Physical Optimizer:选择最佳的 Join 策略,优化物理执行计划

  6. hive的编译过程大体说下:

  • 词法分析/语法分析
    • 首先,客户端接受到请求者的sql命令,Antlr实现对sql进行词法和语法解析。将sql转化为抽象数
  • 语义分析:
    • 从Megastore获取模式信息,验证SQL语句中队表名,列名,以及数据类型的检查和隐式转换
  • 逻辑计划生成
    • 生成逻辑计划–算子树
  • 逻辑计划优化
    • 对算字数进行优化,包括列剪枝,分区剪枝,谓词下推等
  • 物理计划生成
    • 将逻辑计划生成包含由MapReduce任务组成的DAG的物理计划
  • 物理计划执行
    • 将DAG发送到Hadoop集群进行执行
  1. 数据倾斜
    数据倾斜定义:
    由于大数据使用的是分布式计算处理,数据分散的不均匀的话,会将大量的数据放到一台或者几台机器中进行处理。这些数据的计算速度远远低于平均计算速度,导致整个计算过程过慢。常见特征是运行进度长时间处于99%的状态。
    产生原因:
    在做数据运算的时候会设计到,count distinct、group by、join等操作,这些都会触发Shuffle动作,一旦触发,所有相同key的值就会拉到一个或几个节点上,就容易发生单点问题。基本上发生在shuffle过程中。
    解决办法
  • mapjoin方式
  • count distinct的操作,先转成group,再count
  • 万能膏药:hive.groupby.skewindata=true (设置负载均衡)
  • left semi join的使用
  • 设置map端输出、中间结果压缩。(不完全是解决数据倾斜的问题,但是减少了IO读写和网络传输,能提高很多效率)
  1. hivesql优化:

    • 哪些会对I/o消耗?
    • 哪些会对内存消耗?
    • 哪些会对cpu消耗?
  2. mapjoin原理是什么?

  3. 集中排序的区别 sort by,order by ,cluster by,distribute by区别以及定义

  4. hivesql的排序的原理?

  5. null在数据底层是以什么形式进行存储的?

null在hive中是”\N” 判断空时要根据实际的存储来进行判断。在开发过程中如果需要对空进行判断,一定得知道存储的是哪种数据。 有个处理空的小技巧,Hive给出一种并非完美的解决方法——自定义底层用什么字符来表示NULL: 使用:ALTER TABLE b SET SERDEPROPERTIES (‘serialization.null.format’=’’); 这句话的意思是让null和’‘等价,也就是让null不显示,因为null对开发来说不好操作,可能不同地方代表意义不同, 而且转码可能也会有问题,所有用’‘代替 null转化为空字符串,还可以节省空间

  1. hive join的运行机制:
  • Map阶段:读取源表的数据,Map输出时候以Join on条件中的列为key,如果Join有多个关联键,则以这些关联键的组合作为key;Map输出的value为join之后所关心的(select或者where中需要用到的)列;同时在value中还会包含表的Tag信息,用于标明此value对应哪个表;按照key进行排序
  • Shuffle阶段:根据key的值进行hash,并将key/value按照hash值推送至不同的reduce中,这样确保两个表中相同的key位于同一个reduce中
  • Reduce阶段:根据key的值完成join操作,期间通过Tag来识别不同表中的数据
  1. Hive中Reduce个数是如何计算的
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容