Hive的体系结构详细讲解

  好程序员小编给大家详细讲解一下关于Hive的体系结构,基于MapReduce的Hive数据仓库在超大规模数据分析中扮演了重要角色,对于典型的Web服务供应商,这些分析有助于他们快速理解动态的用户行为及变化的用户需求。数据存储结构是影响数据仓库性能的关键因素之一。Hadoop系统中常用的文件存储格式有支持文本的TextFile和支持二进制的SequenceFile等,它们都属于行存储方式。

  Facebook工程师发表的RCFile: A Fast and Spaceefficient Data Placement Structure in

MapReducebased Warehouse Systems一文,介绍了一种高效的数据存储结构——RCFile(Record Columnar

File),并将其应用于Facebook的数据仓库Hive中。与传统数据库的数据存储结构相比,RCFile更有效地满足了基于MapReduce的数据仓库的四个关键需求,即Fastdata loading、Fast query processing、Highly efficient storage spaceutilization和Strong adaptivity to highly dynamic workload patterns。

  Hive的存储是建立在Hadoop文件系统之上的。Hive本身没有专门的数据存储格式,也不能为数据建立索引,用户可以非常自由地组织Hive中的表,只需要在创建表的时候告诉Hive数据中的列分隔符和行分隔符就可以解析数据了。

《Hive的体系结构详细讲解》

  Hive中主要包括四类数据模型:表(Table)、外部表(ExternalTable)、分区(Partition)和桶(Bucket)。由于Hive的元数据可能要面临不断的更新、修改和读取,所以它显然不适合使用Hadoop文件系统进行存储。目前Hive将元数据存储在RDBMS中,比如MySQL、Derby中。

  Hive基本组件如下图所示:

《Hive的体系结构详细讲解》

  1. 用户接口

  (1) CLI:CLI启动的时候,会同时启动一个Hive副本。

  (2) JDBC客户端:封装了Thrift,java应用程序,可以通过指定的主机和端口连接到在另一个进程中运行的hive服务器。

  (3) ODBC客户端:ODBC驱动允许支持ODBC协议的应用程序连接到Hive。

  (4)WUI接口:是通过浏览器访问 Hive。

  2. Thrift服务器

  基于socket通讯,支持跨语言。Hive

Thrift服务简化了在多编程语言中运行Hive的命令。绑定支持C++,Java,PHP,Python和Ruby语言。

  3. 底层驱动

  解释器、编译器、优化器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS

中,并在随后有MapReduce调用执行。

  4. 元数据库Metastore

  Hive的数据由两部分组成:数据文件和元数据。元数据用于存放Hive库的基础信息,它存储在关系数据库中,如mysql、derby。元数据包括:数据库信息,表的名字,表的列和分区及其属性,表的属性,表的数据所在目录等。

  5. Hadoop

  Hive的数据文件存储在HDFS中,大部分的查询由 MapReduce 完成。(对于包含*的查询,比如 select * from tbl 不会生成MapRedcue 作业)。

  以上是好程序员的讲解,希望可以帮助到您,有什么疑问欢迎留言!

    原文作者:好程序员特训营
    原文地址: https://www.jianshu.com/p/971bd7a23083
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞