Hive基础

 

Apache Hive 是一个基于 Hadoop 的数据仓库框架,它允许你通过类 SQL 的查询语言(HiveQL)来分析和管理大规模数据集。Hive 是由 Facebook 开发的,后来成为了 Apache Software Foundation 的一个开源项目。

Hive 的主要特点包括:

1. 可扩展性:Hive 可以处理 PB 级别的数据,并且可以与 Hadoop 集群一起扩展。
2. 延迟性:Hive 主要用于离线批处理任务,因此它的查询延迟相对较高。
3. 数据存储:Hive 支持多种数据存储格式,如文本文件、RCFile、ORCFile 和 Parquet 等。
4. 数据处理:Hive 使用 MapReduce 或 Tez 作为其执行引擎,可以并行处理大量数据。
5. 类 SQL 查询语言:HiveQL 提供了类似于 SQL 的语法,使得熟悉 SQL 的用户可以轻松上手。
6. 集成性:Hive 可以与 Hadoop 生态系统的其他组件(如 HDFS、HBase、Pig 等)无缝集成。
7. 数据分区:Hive 支持数据分区,可以将数据划分为多个小文件,以提高查询性能。
8. 索引:Hive 支持索引,可以提高某些查询的性能。

Hive 主要用于数据仓库和数据湖的场景,例如数据提取、转换和加载(ETL)、报表生成、数据分析和数据挖掘等。

1.简述hive架构的组成

Hive 架构包含3个部分。
(1)Hive 客户端(Hive Clients)。Hive为不同类型应用程序提供不同的驱动,使应用程序可通过 Java、Python 等语言连接Hive 并进行与RDBMS 类似的SQL查询操作。对于Java 应用程序,Hive 提供了JDBC驱动;对于其他应用程序,Hive 提供了 ODBC驱动。
(2)Hive 服务端(Hive Services)。客户端必须通过服务端与Hive交互,服务端主
要包括CLI、Hive Server、Hive Web Interface、Driver、Metastore 等组件。
(3)Hive 存储与计算(Hive Storage and Computing)。Hive 主要通过元数据存储数据库和Hadoop 集群进行数据的存储与计算。Hive 的元数据使用RDBMS存储,Hive的数据存储在HDFS中,大部分数据查询由MapReduce完成。

2.hive的数据单元有那些?它们的作用分别是什么?

1.数据库
数据库(Databases)类似于RDBMS 中的数据库,在HDFS 中表现为 hive.metastor warehouse.dir 目录下的一个文件夹,其本质是用于避免表、视图、分区、列等命名冲突的命名空间。
2.表
表(Tables)由列构成,在表上可以进行过滤、映射、连接和联合操作。表在HDFS中表现为所属数据库目录下的子目录,具体又分内部表和外部表。内部表类似于RDBN中的表,由Hive 管理。外部表指向已经存在HDFS中的数据,与内部表元数据组织是相同的,但其数据存放位置是任意的。外部表的真实数据不被Hive管理,即当删除一张内部表时,元数据以及HDFS 上的真实数据均被删除,而删除外部表则只会删除元数据而不会删除真实数据。
3.分区
每个表都可以按指定的键分为多个分区(Partitions)。分区的作用是提高查询的效率,其在HDFS中表现为表目录下的子目录。
4.分桶
根据表中某一列的哈希值可将数据划分为多个分桶(Buckets),在 HDFS 中分桶表
现为同一个目录下根据哈希散列之后的多个文件。
可以看到,Hive中的数据单元划分与RDBMS的物理模型非常类似。但在Hive数据单元划分过程中还必须注意以下几点。
>Hive表没有主键。
> Hive表(0.14版本前)不支持行级操作,新版本中行级操作效率也比较低。
> Hive表不支持批量 update 操作,但可以先删除、再添加。
> Hive分区和分桶可以极大提升数据查询效率

3.CLI与Beeline的区别是什么?

在开发过程中,Hive提供了两种命令行工具:CLI与 Beeline,分别对应 hive 与 beeline命令。CLI 工具一般在Hive 主机上使用,而Beeline 支持远程连接。使用Beeline需要首先在Hive 主机中启动HiveServer2服务。

使用 Beeline 连接 Hive:

#在Hive 主机执行

S hive --service hiveserver2&

#可在任意客户端执行

S beeline -u jdbc:hive2://localhost:10000

# 交互式执行HQL

O:jdbc:hive2://localhost:10000> show tables;

其中,10000为 HiveServer2 默认端口,其可通过“hive.server2.thrift.port”参数进行修改。默认情况下启动HiveServer2会同时启动一个内置的元数据服务。

注意

HiveServer2进程建议在后台运行:

nohup hive --service hiveserver2&

CLI和Beeline均支持两种模式:命令行模式和交互模式。前面介绍的方式均属于交

互模式。Hive 支持使用命令直接运行HQL语句或者包含一系列HQL语句的文件。

Hive和关系型数据库在存储数据方面有一些关键区别:

 

1. 数据模型:Hive是基于Hadoop分布式文件系统的,它的数据存储在Hadoop分布式文件系统中。Hive本身没有专门的数据存储格式,也没有为数据建立索引。而关系型数据库有固定的数据模型,如表、行、列等,它们使用结构化查询语言(SQL)进行数据操作。

 

2. 数据存储:Hive中的表和关系型数据库中的表在概念上很类似,每个表在HDFS中都有相应的目录用来存储表的数据。但是,Hive中的外部表和表很类似,但是其数据不是放在自己表所属的目录中,而是存放到别处。而关系型数据库中的数据存储在固定的表中。

 

3. 数据处理:Hive主要用于大数据分析,它支持类SQL的查询语言HQL,可以处理大量的数据。而关系型数据库主要用于业务平台的事务处理,可以处理较小的数据量。

 

4. 数据一致性:关系型数据库有严格的数据一致性和完整性,可以保证数据的完整性和准确性。而Hive由于其分布式特性。

Hive结构:
Hive建立在Hadoop之上,提供数据仓库功能。
用户接口包括CLI、Client和WUI。
元数据存储于关系型数据库如MySQL或Derby。
使用HQL(Hive Query Language)作为查询语言。
Hive与Hadoop关系:
Hive利用Hadoop的HDFS存储数据,并使用MapReduce进行计算。
Hive负责查询的解释、优化和生成查询计划。
Hive与传统关系型数据库异同:
查询语言:HQL vs SQL
数据存储:HDFS vs Raw Device或Local FS
索引:无 vs 有
执行引擎:MapReduce vs Executor
处理数据规模:大 vs 小
Hive元数据:
存储于关系型数据库中,包含表结构、分区信息、数据位置等。
Derby和MySQL是常用选项。
Hive基本操作:
包括创建表(CREATE TABLE)、修改表(ALTER TABLE)、创建视图(CREATE VIEW)、加载数据(LOAD DATA)、插入数据(INSERT)等。
参数设置:
参数可以通过配置文件、命令行参数或HQL中的SET关键字设置。
SerDe参数必须在DDL语句中设置。
Hive查询:
支持SELECT、JOIN、GROUP BY、ORDER BY等SQL操作。
JOIN操作只支持等值连接,不支持非等值连接。
资源管理:
Hive可以管理添加到会话中的资源,如文件和JAR包,以便在查询执行时使用。
其他特性:
支持LIMIT、TOP K查询。
可以使用正则表达式选择列。
支持LEFT SEMI JOIN作为IN/EXISTS子查询的高效替代。
 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值