Hive的初识

Hive是构建于Hadoop上的数据仓库基础框架,它提供了以下功能:

  • 可通过SQL轻松的访问数据,从而实现数据仓库的任务。如提取/转换/加载,报告和数据分析。
  • 对各种数据格式施加结构。
  • 访问存储在HDFS或是其他数据存储系统上文件。
  • 可使用MapReduce或是Spark作为执行层。
  • 通过Hive LLAP,YARN和Slider进行亚秒级查询检索。

Hive架构与基本组成

      hive架构图

Hive的体系结构可以分为以下几部分:

  • Hive对外提供的接口主要包括CLI,WebUI和基于JDBC/ODBC协议的数据库接口。其中最常用的是CLI。
  • Hive将元数据存储在数据库中,如MySQL,Derby。Hive中的元数据包括表的名字、表的列和分区及其属性、表的数据所在目录等。
  • 解析器、编辑器、优化器和执行器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询技术存储在HDFS中,并在随后由MapReduce调用执行。
  • Hive的数据存储在HDFS中,大部分的查询计算都有MapReduce完成。

 Hive的metastore的三种模式:

  • 内嵌模式:元数据保持在内嵌的Derby模式,只允许一个会话连接。hive默认的启动模式,一般用于单元测试,这种模式有个缺点:hive server重启后所有的元数据都会丢失,而且在同一时间只能有一个进程连接使用数据库(单会话)
  • 本地独立模式:在本地安装MySQL,并把元数据放到MySQL中
  • 远程模式:将元数据放置在远程的MySQL数据库中。需在服务器端启动MetastoreServer,客户端利用Thrift协议通过MetaStoreServer访问元数据库。

 

Hive中数据模型:

  • 内外表比较
    • Hive中的表跟数据库中的表概念类似,每个表在Hive中都有一个对应的存储目录。内部表默认存在HDFS的/user/hive/warehouse下(该路径由hive-site.xml文件中的${hive.metastore.warehouse.dir}指定,所有的表数据(外表除外)都保存在该目录中)。
    • 内外表的相同之处:都需要指定元数据,都支持分区。
    • 内外表不同之处:实际的数据存储地点不同。
    • 内部表实际的数据存储在数据仓库目录中(默认是集群/user/hive/warehouse下),删除表时,表中的数据和元数据都将会被同时删除。
    • 外部表的实际数据存储在创建语句location指定的HDFS路径中,不会移动到数据库目录中,如果删除一个外部表,仅会删除元数据而表中的数据不会被删除。一般在先有数据后要分析的时候选用外部表,因为可以创建一个外部表指向数据。
  • 分区(Partition):每个表可以有一个或是多个分区键,用于确定数据的存储方式。Hive表中一个分区对应表下的一个目录,所有分区数据都存储在对应的子目录中。
  • 桶:对指定列进行哈希计算时,根据哈希值切分数据,每一个桶对应一个文件。

 

posted on 2018-03-07 16:28  xiaoshiyun  阅读(220)  评论(0编辑  收藏  举报

导航