学习 Hive(一):Hive 初探

架构

下图展示了 Hive 的架构:

hive_architecture

Driver

Driver 组件接收来自 Thift Server、Web Interface 和 Command Line 的查询。

Compiler

Compiler 组件解析查询。

Compiler 对查询语句进行语义分析,并最终从 metastore 中查询表和分区元数据生成一个查询计划。

Meta Store

Meta Store 组件存储了数据仓库中所有表和分区的结构信息,包括列和列类型信息。

Execution Engine

Execution Engine 组件执行由 Compiler 创建的执行计划。

执行计划是由 stage 所组成的有向无环图(DAG)。

执行引擎管理着计划不同阶段 stage 之间的依赖,并在相应的系统组件上执行这些 stage。

数据库操作

Hive 使用 HQL 作为 Hive 的查询语言,它是一种 SQL 方言,语法上与 MySQL 非常相似。

显示所有数据库:

SHOW DATABASES;  

创建数据库:

CREATE DATABASE IF NOT EXISTS dw  
COMMENT '数据仓库'  
LOCATION '/dw/dw.db';  

使用数据库:

USE dw;  

显示数据库信息

DESCRIBE DATABASE EXTENDED dw;  

删除数据库:

DROP DATABASE IF EXISTS dw;  

表操作

显示所有表:

SHOW TABLES;  

创建表:

CREATE TABLE IF NOT EXISTS friends (id INT, name STRING, sex STRING)  
ROW FORMAT  
DELIMITED FIELDS TERMINATED BY ',';  

2~3 声明行的格式,为以逗号进行分隔

加载数据:

LOAD DATA INPATH '/<path>/firend.csv' INTO table friends;  

将文件从本地目录移动到 HDFS 的 Hive 目录下。

注意:加载数据,仅仅是文件移动操作,并不会在加载数据时检查数据的 schema,这一点和关系型数据库有很大的不同。

删除表:

DROP TABLE IF EXISTS friends;  

如果是托管表,删除表会删除 metadata 和 HDFS 中的数据。

如果是外部表,删除表仅会删除 metadata。

表查询

查询 10 条记录

SELECT * FROM friends LIMIT 10;