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

Hive学习--架构和基本组成

2017-10-12 17:27 519 查看
参考链接:深入浅出学Hive

一、Hive简介

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。

本质是将SQL转换为MapReduce程序

Hive与Hadoop的关系



Hive与传统数据库对比

Hive
RDBMS
查询语言
HQL
SQL
数据存储
HDFS
Raw Device or Local FS
执行
MapReduce
Excutor
执行延迟


处理数据规模


索引
0.8版本后加入位图索引
有复杂的索引

二、Hive架构与基本组成



1、各组件基本功能

用户接口:用户访问Hive的入口

主要有三个:CIL(命令行),JDBC/ODBC(java),WebUI(浏览器访问)

元数据:Hive的用户信息与表的MetaData

Hive将元数据存储在数据库中,目前只支持mysql,derby.

元数据包括:表名字,表的列和分区及其属性,表的数据所在目录。

解释器,编译器,优化器:分析翻译、编译、优化HQL的组件

完成HQL查询语句从词法分析、语法分析、编译、优化及查询计划的生成。生成的查询计划存储在HDFS中,并随后由MapReduce调用执行。

Hive的数据存储在HDFS中,大部分查询有MapReduce完成。(包含的查询,例如select from不会生成mapreduce任务)

•Metastore

是系统目录,保存Hive中表的元数据信息。

metastore包含:

Database, 是表(table)的名字空间。默认的数据库(database)名为‘default’

Table 表的元数据,包含信息有:列(list of columns)和它们的类型(types),拥有者(owner),存储空间(storage)和SerDei信息

Partition, 每个分区(partition)都有自己的列(columns),SerDe和存储空间(storage)。这一特征将被用来支持Hive中的模式演变(schema evolution)

•Driver

1)Driver调用编译器处理HiveQL字串

2)编译器将HQL转化为策略(plan)

3)策略由元数据操作和HDFS操作组成。元数据操作只包含DDL(create,drop,alter)语句,HDFS操作只包含LOAD语句。

4)对插入和查询而言,策略由map-reduce任务中有向非循环图组成(DAG directed acyclic graph)。

2、Hive运行模式

本地和集群两种模式。

设置方式:

SET mapred.job.tracker=local

或者

SET mapred.job.tracker=192.168.1.2:9001

3、数据类型

原始数据类型:

tinyint - 1byte

smallint - 2 byte

int - 4 byte

bigint - 8 byte

boolean

float

double

string

复杂数据类型:

structs

maps

arrays

timestamp

4、Hive元数据存储

5、Hive的数据模型

Hive的数据存储建立在Hadoop的HDFS之上。

默认可以直接加载文本文件。创建表时可指定列分隔符航分隔符,hive可解析数据。

•Table 内部表

每个内部表在hive中有一个对应的目录存储数据。例如:表student在HDFS中的路径为“/warehouse/student”,warehouse是在hive-site.xml中由${hive.metastore.warehouse.dir}指定的数据仓库目录。

创建内部表:

create table student(id int,name string)

加载数据:

load data inpath ‘filepath’ into table student

删除内部表时,元数据和数据都会被删除。

drop table student

•Partition 分区表

在hive中,表中的一个partition对应于表下的一个目录,partition中的数据存储在对应目录下。

例如:student表中包含age和score两个partition,对应age=15,score=80的HDFS子目录为:warehouse/student/age=15/score=80

分区示例:

create table student(id int,name string) partitioned by (age int)

load data inpath ‘filepath’ into table student partition(age=15)

•External Table 外部表

指向hdfs中已经存在的数据。

与内部表的区别:

1)内部表在load数据的过程中,实际数据会被移动到数据仓库目录中。删除时元数据和数据都会删除。

2)外部表加载数据时,数据并不会被移动到数据仓库目录,只是与外部数据建立一个连接。删除表时仅删除元数据和该连接,不会删除数据。

创建外部表示例:

create external table teacher(id int,name string)

load data inpath ‘filepath’ into table teacher

drop table teacher

•Bucket Table

将表的列通过hash算法分解成不同的文件存储。

例如:将id分散成20个文件,对id进行hash,对应为0的写入/warehouse/student/age=15/score=80/part-0000

示例:

create table student(id int,name string) clustered by (id) into 20 buckets

load date inpath ‘filepath’ into table student

set hive.enforce.bucketing=true
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hive 数据库