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

参考链接:深入浅出学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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值