Hive

Hive

1 Hive及数据仓库简介

Hive是基于 Hadoop 的一个【数据仓库工具】,可以将结构化的数据文件映射为一张hive数据库表,并提供简单的 sql 查询功能,可以将 sql 语句转换为 MapReduce 任务进行运行。

非Java编程者对HDFS的数据做mapreduce操作。

使用SQL来快速实现简单的MapReduce 统计,不必开发专门的MapReduce 应用,学习成本低,十分适合数据仓库的统计分析。

【数据仓库】英文名称为 Data Warehouse,可简写为 DW 或 DWH。数据仓库,是为企业所有级别的决策制定过程,提供所有类型数据支持的战略集合。它是单个数据存储,出于分析性报告和决策支持目的而创建。为需要业务智能的企业,提供指导业务流程改进、监视时间、成本、质量以及控制.

数据处理大致可以分成两大类: 联机事务处理OLTP(on-line transaction processing)、联机分析处理OLAP(On-Line Analytical Processing)。

OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易。

OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。

OLTP系统强调数据库内存效率,强调内存各种指标的命令率,强调绑定变量,强调并发操作;

OLAP系统则强调数据分析,强调SQL执行市场,强调磁盘I/O,强调分区等。![img](file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsC13E.tmp.jpg)

简而言之,数据仓库是用来做查询分析的数据库基本不用来做插入,修改,删除操作*。*

• Hive:数据仓库。
• Hive:解释器,编译器,优化器等。
• Hive运行时,元数据存储在关系型数据库里面

编译器将一个Hive SQL转换操作符,操作符是Hive的最小的处理单元

每个操作符代表HDFS的一个操作或者一道MapReduce作业

2 Operator操作

Operator都是hive定义的一个处理过程

Operator都定义有:

protected List > childOperators;

protected List > parentOperators;

protected boolean done; // 初始化值为false

![img](file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsDDE3.tmp.jpg)

ANTLR词法语法分析工具解析hql

![img](file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps9D0E.tmp.jpg)

3 Hive架构原理

用户接口主要有三个:CLI,Client 和 WUI。

![img](file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD53E.tmp.jpg)

其中最常用的是CLI命令行,Cli启动的时候,会同时启动一个Hive副本;Client是Hive的客户端,用户连接至Hive Server。在启动 Client模式的时候,需要指出Hive Server所在节点,并且在该节点启动Hive Server。 WUI是通过浏览器访问Hive。
(2)Hive将数据存储在数据库中,如mysql、 derby 。 Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。
(3)解释器、编译器、优化器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS中,并在随后有MapReduce调用执行。
(4)Hive的数据存储在HDFS中,大部分的查询、计算由MapReduce完成

4 Hive搭建的三种模式

A、内嵌模式(元数据保存在内嵌的derby中,允许一个会话链接,尝试多个会话链接时会报错)

B、本地模式(本地安装mysql 替代derby存储元数据)

C、远程模式(远程安装mysql 替代derby存储元数据)

1 本地用户模式

​ 这种安装方式和嵌入式的区别在于,不再使用内嵌的Derby作为元数据的存储介质,而是使用其他数据库比如MySQL来存储元数据且是一个多用户的模式,运行多个用户client连接到一个数据库中。这种方式一般作为公司内部同时使用Hive。这里有一个前提,每一个用户必须要有对MySQL的访问权利,即每一个客户端使用者需要知道MySQL的用户名和密码才行

2 远程模式

这种存储方式需要在远端服务器运行一个 mysql 服务器,并且需要在 Hive 服务器启动 meta服务。

5 HQL

Hive的数据定义语言 ([LanguageManual DDL](javascript:changelink(‘https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL’,'EN2ZH_CN’)?)重点是 hive 的建表语句和分区.

1 创建数据库

查看 show databases;

CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name

[COMMENT database_comment];

2 删除数据库

DROP (DATABASE|SCHEMA) [IF EXISTS] database_name;

3 修改数据库

ALTER (DATABASE|SCHEMA) database_name SET DBPROPERTIES (property_name=property_value, …);

ALTER (DATABASE|SCHEMA) database_name SET OWNER [USER|ROLE] user_or_role;

4 使用数据库

USE database_name;

Use default;

5 创建表

数据类型:

data_type
primitive_type 原始数据类型

| array_type 数组

| map_type map

| struct_type

| union_type – (Note: Available in Hive 0.7.0 and later)

primitive_type
TINYINT

| SMALLINT

| INT

| BIGINT

| BOOLEAN

| FLOAT

| DOUBLE

| DOUBLE PRECISION

| STRING 基本可以搞定一切

| BINARY

| TIMESTAMP

| DECIMAL

| DECIMAL(precision, scale)

| DATE

| VARCHAR

| CHAR

array_type
ARRAY < data_type >
map_type
MAP < primitive_type, data_type >
struct_type
STRUCT < col_name : data_type [COMMENT col_comment], …>
union_type
UNIONTYPE < data_type, data_type, … >

6 删除表

DROP TABLE [IF EXISTS] table_name [PURGE];

7 重命名表

ALTER TABLE table_name RENAME TO new_table_name;

Eg: alter table meninem rename to jacke;

8 更新数据

UPDATE tablename SET column = value [, column = value …] [WHERE expression]

9 删除数据

DELETE FROM tablename [WHERE expression]

你可能感兴趣的:(hive)