1.Hive是什么

  • 起源自facebook由Jeff Hammerbacher领导的团队
  • 构建在Hadoop上的数据仓库框架
  • 设计目的是让SQL技能良好,但Java技能较弱的分析师可以查询海量数据
  • 2008年facebook把hive项目贡献给Apache
  • 简述hive产生的背景 hive产生于哪一年_Hive

  • 由facebook开源,最初用于解决海量结构化的日志数据统计问题;
    ETL(Extraction-Transformation-Loading)数据抽取、加载、处理工具
  • 构建在Hadoop之上的数据仓库;
    数据计算使用MR,数据存储使用HDFS
  • Hive 定义了一种类 SQL 查询语言——HQL;
    类似SQL,但不完全相同
  • 通常用于进行离线数据处理(采用MapReduce);
  • 可认为是一个HQL→MR的语言翻译器。
  • 数据仓库工具。可以把Hadoop下的原始结构化数据变成Hive中的表
  • 支持一种与SQL几乎完全相同的语言HiveQL。除了不支持更新、索引和事务,几乎SQL的其它特征都能支持
  • 可以看成是从SQL到Map-Reduce的映射器
  • 提供shell、JDBC/ODBC、Thrift、Web等接口

简述hive产生的背景 hive产生于哪一年_Hive_02

2. Hive架构

简述hive产生的背景 hive产生于哪一年_数据仓库_03


1.Hive的基本架构

  • 用户接口
    包括 CLI,JDBC/ODBC,WebUI
  • 元数据存储(metastore)
    默认存储在自带的数据库derby中,线上使用时一般换为MySQL
  • 驱动器(Driver)
    解释器、编译器、优化器、执行器
  • Hadoop
    用 MapReduce 进行计算,用 HDFS 进行存储

2.Hive的数据存储

  • Hive没有专门的数据存储格式,也没有为数据建立索引,用户可以非常自由的组织 Hive 中的表。
  • Hive 中所有的数据都存储在 HDFS 中,Hive 中包含以下数据模型:Table,External Table,Partition,Bucket。
  • Hive 中的 Table 和数据库中的 Table 在概念上是类似的,每一个 Table 在 Hive 中都有一个相应的目录存储数据。
  • 例如表 tbl_pv放在目录 /wh/tbl_pv中,这里wh为hive-site.xml中${hive.metastore.warehouse.dir} 指定的数据仓库目录。
  • Hive 表中的一个 Partition 对应于表下的一个目录,所有的 Partition 的数据都存储在对应的目录中。
  • 例如:tbl_pv 表中包含 ds 和 city 两个 Partition,则对应于 ds = 20090801, ctry = US 的 HDFS 子目录为:/wh/tbl_pv/ds=20090801/ctry=US;对应于 ds = 20090801, ctry = CA 的 HDFS 子目录为/wh/pvs/ds=20090801/ctry=CA
  • Buckets 对指定列计算 hash,根据 hash 值切分数据,每一个 Bucket 对应一个文件。可用于采样:
CREATE TABLE sales( id INT, name STRING)
          PARITIONED BY (ds STRING)
          CLUSTERED BY (id) INTO 32 BUCKETS;
SELECT id FROM sales TABLESAMPLE (BUCKET 1 OUT OF 32);
  • External Table 指向已经在 HDFS 中存在的数据,可以创建 Partition