您的位置:首页 > 运维架构

Hadoop学习之Hive简介

2017-08-17 23:09 330 查看

1.Hive是什么

起源自facebook由Jeff Hammerbacher领导的团队

构建在Hadoop上的数据仓库框架

设计目的是让SQL技能良好,但Java技能较弱的分析师可以查询海量数据

2008年facebook把hive项目贡献给Apache



由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等接口



2. Hive架构



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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hadoop 数据仓库