Hadoop学习笔记:Hive详解

基础

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

用来开发SQL类型脚本用于做MapReduce操作的平台。

架构

架构图

单元名称操作
用户接口/界面Hive是一个数据仓库基础工具软件,可以创建用户和HDFS之间互动。用户界面,Hive支持是Hive的Web UI,Hive命令行,HiveHD洞察(在Windows服务器)。
元存储Hive选择各自的数据库服务器,用以储存表,数据库,列模式或元数据表,它们的数据类型和HDFS映射。
HiveQL处理引擎HiveQL类似于SQL的查询上Metastore模式信息。这是传统的方式进行MapReduce程序的替代品之一。相反,使用Java编写的MapReduce程序,可以编写为MapReduce工作,并处理它的查询。
执行引擎HiveQL处理引擎和MapReduce的结合部分是由Hive执行引擎。执行引擎处理查询并产生结果和MapReduce的结果一样。它采用MapReduce方法。
HDFS 或 HBASEHadoop的分布式文件系统或者HBASE数据存储技术是用于将数据存储到文件系统。

工作原理

在这里插入图片描述

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

分区

hive 把表组织称分区,是一种根据分区列(如日期)的值对表进行粗略划分的机制,使用分区可以加快数据分片的查询速度。
表或分区可以进一步分为桶(bucket),会为数据提供额外的结构以获得更高效的查询处理。

分区在建表时通过 PARTITIONED BY 子句定义。

# 表定义为时间戳和日志行的结构,分区根据时间和国家
CREATE TABLE logs (ts BIGINT, line STRING) 
PARTITIONED BY (dt STRING, country STRING);

# 加载数据到分区需要显式指定分区值
LOAD DATA LOCAL INPATH 'input/hive/partitions/file1' 
INTO TABLE logs
PARTITION (dt='2001-01-01', country='GB');

PARTITIONED BY 子句中的列定义是表中正式的列,成为分区列(partition column),但是,数据文件中并不包含这些列的值,因为他们源于目录名。

可以在 SELECT 中以通常的方式使用分区列.

SELECT ts, dt, line
FROM logs
WHERE country='GB';

使用 CLUSTERED BY 子句进行桶划分,使用用户 ID 来确定如何划分桶(Hive 对值进行哈希并将结果除以桶的个数去余数)。

CREATE TABLE bucketed_users (id INT, name STRING)
CLUSTERED BY (id) INTO 4 BUCKETS:

内部表与外部表

创建内部表时,会将数据移动到数据仓库指向的路径;

CREATE TABLE managed_table (dummy STRING);
Load DATA INPATH '/user/tom/data.txt' INTO TABLE managed_table;

创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。定义时,不会检查外部位置是否存在,因此可以把创建数据推迟到创建表之后进行。

CREATE EXTERNAL TABLE external_table (dummy STRING) LOCATION '/user/tom/external_table';
LOAD DATA INPATH '/user/tom/data.txt' INTO TABLE external_table;

删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据。
这样外部表相对来说更加安全些,数据组织也更加灵活,方便共享源数据。

传统数据库对表数据验证是 schema on write(写时模式),而 Hive 在load时是不检查数据是否符合schema的,hive 遵循的是 schema on read(读时模式),只有在读的时候hive才检查、解析具体的数据字段、schema。

读时模式的优势是load data 非常迅速,因为它不需要读取数据进行解析,仅仅进行文件的复制或者移动。
写时模式的优势是提升了查询性能,因为预先解析之后可以对列建立索引,并压缩,但这样也会花费要多的加载时间。

表更新、事务、索引

表更新:通过把数据变换后放入新表实现。

HDFS 不提供就地文件更新,因此,插入、更新和删除操作引起的一切变化都被保存在一个较小的增量文件中。由 matastore 在后台运行的 mapreduce 作业会定期将这些增量文件合并到“基表”文件中。

索引类别:紧凑索引位图索引

  • 紧凑索引存储每个值的 HDFS 块号,而不是存储文件内的偏移量,不会占用过多的磁盘空间。
  • 位图索引使用压缩的位集合来高效存储具有某个特殊值的行,一般适用于具有较少取值可能的列。

存储格式

  1. 默认的存储格式:分隔的文本,默认的行内分隔符是 Control-A ,集合类元素的默认分隔符为 Control-B ,默认的映射健分隔符为 Control-C
  2. 二进制存储格式:顺序文件、Avro 数据文件、Parquet 文件、RCFile 与 ORCFile
  3. 使用定制的 SerDe:RegexSerDe
  4. 存储句柄
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值