【Hadoop学习笔记】(二)——Hive的原理及使用

一、Hive概述

Hive是一个在Hadoop中用来处理结构化数据数据仓库基础工具。它架构在Hadoop之上,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。

Hive数据仓库工具能为HDFS上的数据提供类似SQL的查询语言(HiveQL),并将SQL语句转变成MapReduce任务来执行。Hive 明显降低了 Hadoop 的使用门槛,任何熟悉 SQL 的用户都可以使用 Hive。

Hive 经常用于业务和数据分析,并对存储在 HDFS 上的数据执行特殊查询。

二、Hive基本使用

Hive 的使用通常分为以下三个步骤:

  1. 创建表,定义表的各个字段
  2. 把数据导入已创建的表中
  3. 针对上表执行 HiveQL 查询
1.创建表

创建表的语法与 SQL 基本一致

CREATE TABLE ufodata( 
sighted string,
reported string,
sighting_location string)
ROW FORMAT DELIMITED
FIFLDS TERMINATED BY '\t';

这里要注意,由于 Hive 通常从 HDFS 上的文件导入数据,因此要注意文件格式的匹配。
ROW FORMAT DELIMITED 告诉 Hive 每行数据包含多个有界字段,
FIFLDS TERMINATED BY 指定了文件的分隔符

2. 导入数据
  • 从 HDFS 上导入数据:如果使用的文件已经在 HDFS 上,可以使用 INPATH 指定源文件位置

如果传给LOAD 的是 HDFS 上的数据路径,那么在导入数据后会删除原始文件
可以使用 LOCAL INPATH 指定位于本地文件系统上的源文件

LOAD DATA INPATH '/tmp/ufo.tsv' OVERWRITE INTO TABLE ufodata;

注意,OVERWRITE 会在导入数据前删除表中原有数据,还会把存放表数据的目录清空

  • 基于现有文件创建表:可以导入 Hive 仓库目录之外路径的数据
CREATE EXTERNAL TABLE states(abbreviation string, full_name string)
ROW FORMAT DELIMITED
FIFLDS TERMINATED BY '\t'
LOCATION '/tmp/states';

EXTERNAL 表明该表存在于 Hive 控制之外的位置
LOCATION 指明了源文件或源目录的位置
使用该方式创建表,不会删除原始数据文件,并且在创建表的同时就会把数据插入表中。

  • 数据导入原理:Hive 使用上述方式导入数据时,并没有实际把输入数据插入表中各行,而是把数据文件拷入工作路径,以源数据为基础创建了一批元数据,后续进行 HiveSQL查询时,转换成的 MapReduce 作业会使用这些元数据去查询实际的数据
3. 其他功能

HiveSQL 还支持类似于SQL的很多特性,如:

  • 视图
  • 导出查询结果:
// 将查询结果导出到 /tmp/out 目录
INSERT OVERWRITE DIRECTORY ‘/tmp/outSELECT reported, shape, state
FROM usa_sightings
WHERE state = 'XXX';
  • 分区:将表按照虚拟列的值进行分区操作。通常用于超大的数据量,最常用的分区策略是使用日期作为分区列
CREATE TABLE partufo( 
sighted string,
reported string,
sighting_location string)
PARTITIONED BY (year string)
ROW FORMAT DELIMITED
FIFLDS TERMINATED BY '\t';

指定分区列后,会自动在表结构中自动加入 year 这一字段
后续导入数据时,会自动按照 year 列的值对表进行分区。如果后续使用 HiveSQL 引用某个特定分区,Hive 会执行一次意义非凡的优化——只会处理在相应分区路径下的数据

  • 分桶:Hive 还可以使用分桶进一步将数据行聚集到桶中,通过对 CLUSTER BY 指定列使用哈希函数实现;还可以使用 SORT BY 对桶中的数据进行排序。 在数据集非常大时,使用分桶可以显著缩短查询时间
  • 自定义函数
4. Hive 和 Pig 的对比

和 Hive 一样,Pig 也避免了直接编写 MapReduce 代码,但是两种方法的抽象方式不同。

Hive 提供类似 SQL 语言的接口,使用方便,只定义执行的操作,而不管如何实现这些操作
Pig 则使用 Pig Latin 语言定义数据流流水线,可以对作业运行方式进行更细粒度的控制。

三、Hive 原理

1. Hive 架构

【Hadoop学习笔记】(二)——Hive的原理及使用_第1张图片
包含:

  • 用户界面、接口
  • 元存储:Hive选择各自的数据库服务器,用以储存表,数据库,列模式或元数据表,它们的数据类型和HDFS映射
  • HiveQL处理引擎: HiveQL的Metastore模式信息查询类似于SQL的查询上。这是传统的方式进行MapReduce程序的替代品之一。
  • 执行引擎
  • HDFS 或 HBASE
2. Hive 工作原理

【Hadoop学习笔记】(二)——Hive的原理及使用_第2张图片

  1. Hive接口,如命令行或Web UI发送查询驱动程序(任何数据库驱动程序,如JDBC,ODBC等)来执行。
  2. 在驱动程序帮助下查询编译器,分析查询检查语法和查询计划或查询的要求。
  3. 编译器发送元数据请求到Metastore(任何数据库)
  4. Metastore发送元数据,以编译器的响应。
  5. 编译器检查要求,并重新发送计划给驱动程序。到此为止,查询解析和编译完成。
  6. 驱动程序发送执行计划到执行引擎
  7. 在内部,执行作业的过程是一个MapReduce工作。执行引擎发送作业给JobTracker至NameNode,并把它分配作业到TaskTracker至DataNode
  8. 与此同时,在执行时,执行引擎可以通过Metastore执行元数据操作。
  9. 执行引擎接收来自数据节点的结果。
  10. 执行引擎发送这些结果值给驱动程序。
  11. 驱动程序将结果发送给Hive接口。

你可能感兴趣的:(大数据开发,hadoop,hive,大数据)