Hive学习笔记

Hive是一个基于Hadoop的数据仓库工具,可以对存储在Hadoop文件中的数据集进行数据整理,特殊查询和分析处理。

Hive提供了类似关系数据库SQL的查询语言:HiveQL

当采用MapReduce作为执行引擎是,Hive可以通过HiveQL语句快速实现简单的MapReduce作业,Hive自身可以将HiveQL语句快速转换成MapReduce作业进行运行,而不必开发专门的MapReduce作业

数据仓库的体系结构:

  • 数据源
  • 数据存储和管理
  • 数据服务
  • 数据应用

传统数据仓库面临的挑战

  • 无法满足快速增长的海量数据存储需求
  • 无法有效处理不同类型的数据
  • 计算和处理能力不足

Hive的应用场景

  1. 维护海量数据
  2. 对数据进行挖掘
  3. 形成意见和报告
  4. 报表分析
  5. 日志分析等

Hive与HBase的区别

  1. Hive是一个基于Hadoop的数据仓库工具,可以对存储在Hadoop文件中的数据集进行数据整理,特殊查询和分析处理。Hive中的表为纯逻辑表,其本身并不存储和处理数据,仅仅对表的元数据进行定义。Hive没有物理存储的功能,它完全依赖HDFS来存储数据,依赖MapReduce(或Tez、Spark)来处理数据。

    HBase是一个高可靠、高性能、面向列、可伸缩的分布式存储系统。HBase中存储的表是物理表,支持列扩展,可以对单元格修改,采取K-V设计,查询效率高等特点,适合存放非结构化的数据。

    两者均以HDFS为文件存储,均属于Hadoop生态圈

  2. Hive是Hadoop数据仓库不是数据库

    HBase是基于Hadoop的一种NoSQL数据库

  3. Hive只能处理静态数据

    HBase能够实时查询,常用于在线业务

  4. Hive没有row-level的更新,它适用于大量append-only数据集(如日志)的批任务处理。而基于HBase的查询,支持和row-level的更新。

Hive与HBase的关系:

Hive和HBase是协作关系,根据不同的应用场景使用Hive和HBase发挥不同的作用。

Hive的执行机制:

  1. 有Hive驱动模块中的编译器(Antlr语法识别工具)对用户输入的SQL进行词法和语法解析,将SQL语句转化为抽象语法树(Abstract Syntax)的形式
  2. 对该抽象语法树进行遍历,进一步转化成查询块(QueryBlock)。因为抽象语法树的结构仍很复杂,不方便直接翻译为 MapReduce算法程序,所以,Hive把抽象语法树进一步转化为查询块。查询块是一个最基本的SQL 语法组成单元,包括输入源、计算过程和输出3个部分
  3. 再对查询块进行遍历,生成操作树(OperatorTree)。其中,操作树由很多逻辑操作符组成,如 TableScanOperator、SelectOperator、FilterOperator、JoinOperato、GroupByOperator和ReduceSinkOperator等。这些逻辑操作符可以在 Map阶段和Reduce阶段完成某一特定操作
  4. 通过Hive驱动模块中的逻辑优化器对操作树进行优化,变换操作树的形式,合并多余的操作符,从而减少MapReduce 作业数量以及 Shuffle阶段的数据量。
  5. 对优化后的操作树进行遍历,根据操作树中的操作逻辑操作符生成需要执行的MapReduce作业
  6. 启动Hive驱动模块中的物理优化器,对生成的 MapReduce作业进行优化,生成最终的MapReduce作业执行计划。
  7. 最后由Hive驱动模块中的执行器,对最终的MapReduce作业进行执行输出。

Hive包括哪些数据组织:

  1. 库:管理数据,不同模块的数据最好放在不同的数据库中,同mysql中的数据库的概念。

  2. 表:

    按管理权限分

    • 内部表:管理表,表的创建和数据的删除,都是由hive自己决定的,同mysql中的表,内部表在进行删除的时候,元数据和原始数据都会被删除。
    • 外部表:external_table和内部表对立面,一个表不可能同时是内部表又是外部表的,表结构上同内部表,数据自己决定不了,外部表在进行删除的时候 只能删除元数据(描述信息),表的原始数据(hdfs)不会被删除。

    按功能分

    • 分区表:这里的分区的概念不同于MR中的分区的概念,hive中有可能一个表非常大,查询的时候会进行全表扫描,极大的降低hive表的查询性能,这时候就出现了分区表,将原来的一个大的表存储的时候分成不同的数据目录进行存储。
    • 分桶表:类似于mapreduce中的分区的概念,同一个表的数据,存储在同一个目录下不同的文件中。
  3. 视图:hive中的视图,只有逻辑视图(存储的仅仅是一个sql语句,不会进行执行的)没有物化视图(将视图代表的sql进行执行结果),查询视图的时候才会进行执行,hive中的视图类似于sql语句的快捷方式,保存的是当前的视图代表的sql语句。

相关参考资料:

https://www.zhihu.com/question/21677041

https://blog.csdn.net/py_123456/article/details/80292267

https://blog.csdn.net/qq_37334135/article/details/78295427

https://www.cnblogs.com/beipiaodiaosi/p/11099557.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值