Hive基础知识

本文介绍了Hive的基础概念,包括其作为数据仓库的定位,不支持事物的特性,以及与RDBMS的区别。Hive架构包括Thrift Server、元数据储存和Driver组件。元数据默认存储在Derby数据库,而Driver组件负责HQL的编译、优化和执行。文章还简要提及了Hive与传统关系型数据库的对比和Hive的数据储存方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、Hive基础概念

1.1、Hive简介

Hive是由Facebook实现并开源,是基于Hadoop的一个数据仓库工具,可以将结构化的数据映射到一张数据库表,并提供HQL(Hive SQL)查询功能,底层数据是存储在HDFS上。Hive的本质是将SQL语句转换为MapReduce任务运行,使不熟悉MapReduce的用户很方便的利用HQL处理和计算HDFS上的结构化数据,适用于离线的批量数据计算。

为什么使用Hive?
操作接口采用SQL语法,提供快速开发的能力,避免写MapReduce,减少开发人员的学习成本,可以扩展集群规模而无需重启服务,还支持用户自定义函数。

      Hive特点:
优点: 可扩展性,横向扩展
延展性
良好的容错性
缺点: Hive不支持记录级别的增删改操作
Hive的查询延时严重

Hive不支持事物(因为没有增删改,所以主要用来做OLAP(联机分析处理),而不是OLTP(联机事物处理),这就是数据处理的两大级别)。


1.2、Hive架构


基本组成:
1)用户接口
CLI:shell终端命令行(Command Line Interface),采用交互形式使用hive命令行与hive进行交互,最常用学习调试生产。
JDBC/ODBC:是Hive的基于JDBC操作提供的客户端,用户(开发员、运维人员)通过这连接至Hive server服务。
Web UI:通过浏览器访问Hive。


2)Thrift Server
Thrift是Facebook开发的一个软件框架,可以用来进行可扩展且跨语言的服务的开发,Hive集成了该服务,能让不同的编程语言调用hive的接口。


3)元数据储存
元数据,通俗的讲,就是储存在Hive中的数据描述信息
Hive中的的元数据通常包括:表的名字,表的列和分区及其属性,表的属性(内部表和外部表),表的数据所在目录。
Metastore默认存在自带的Derby数据库中。缺点就是不适合多用户操作,并且数据存储目录不固定,数据库跟着Hive走,极度不方便管理。


4)Driver编译器(Compiler),优化器(Optimizer),执行器(Executor)
Driver组件完成HQL查询语句从词法分析,语法分析,编译,优化,以及生成逻辑执行计划的生成。生成的逻辑执行计划存储在HDFS中,并随后又MapReduce调用执行。
Hive的核心是驱动引擎,驱动引擎由四部分组成:
解释器:将HiveSQL语句转换为抽象语法树(AST)
编译器:将语法树编译为逻辑执行计划
优化器:对逻辑执行计划进行优化
执行器:调用底层的运行框架执行逻辑执行计划


5)执行流程:
HiveHQL通过命令行或者客户端提交,经过Compiler编译器,运用MetaStore中的元数据进行类型检测和语法分析,生成一个逻辑方案(Logical Plan),然后通过的优化处理,产生一个MapReduce任务。

1.3、Hive和RDBMS对比


总结:Hive就有SQL数据库的外表,但应用场景完全不同,Hive只适合用来做海量离线数据统计分析,也就是数据仓库。

1.4Hive的数据储存

1)hive的存储结构包括数据库、表、视图、分区和表数据等。数据库,表,分区等等都对应HDFS上的一个目录。表数据对应HDFS对应目录下的文件。

2)Hive中所有的数据都存储在HDFS中,没有专门的数据存储格式,因为Hive是读模式,可支持TextFile,SequenceFile,RCFile或者自定义格式。

3)只需要在创建表的时候,告诉Hive数据中的列分隔符和行分隔符,Hive就可以解析数据
Hive的默认列分隔符:控制符 Ctrl+A,\x01
Hive的默认行分隔符:换行符 \n

4)Hive中包含以下数据模型:
database:在HDFS中表现为${hive.metastore.warehouse.dir}目录下一个文件夹
table:在HDFS中表现所属database目录下一个文件夹
external talbe:与table类似,不过其数据存放位置可以指定任意HDFS目录路径
partition:在HDFS中表现为table目录下的子目录
bucket:在HDFS中表现为同一个表目录或者分区目录下根据某个字段的值进行hash散列之后的多个文件。
view:与传统数据库类似,制度,基于基本表创建。

5)Hive的元数据存储在RDBMS中,除元数据外的其他所有数据都基于HDFS存储,默认情况下,Hive元数据保存在内嵌的Derby数据库中只能允许一个会话连接,只适合简单测试。为了支持多会话,则需要一个独立的元数据库,使用MySQL作为元数据库,Hive内部对MySQL提供了很好的支持。

6)Hive中的表分为内部表、外部表、分区表、Bucket表

内部表和外部表的区别
删除内部表,删除表元数据和真实数据
删除外部表,删除元数据,不删除真实数据

内部表和外部表的使用选择
大多数情况他们的区别不明显,如果数据的所有处理都在Hive中进行,name倾向于选择内部表,但是如果Hive和其他工具要针对相同的数据集进行处理,外部表更合适。
使用外部表访问存储在HDFS上的初始数据,然后通过Hive转换数据并存到内部表中使用外部表的场景是针对一个数据集有多个不同的Schema。

分区表和分桶表
Hive数据表可以根据某些字段进行分区操作,细化数据管理,可以让部分查询更快。同时表和分区也可以进一步被划分为Buckets,分桶表的原理和MR程序的HashPartitioner的原理类似
分区和分桶都是细化数据管理,到那时分区表是手动添加分区,由于Hive是读模式,所以对添加进分区的数据不做模式校验,分桶表中的数据是按照某些分桶字段进行hash散列形成的多个文件,所以数据的准确性也高很多。

2、Hive基本使用

创建库 create database mydb;
查看库 show databases;
切换数据库 use mydb;
创建表 create table t_user(id string ,name string)
create table t_user2(id string ,name string) row format delimited fields terminated by',';
插入数据 insert into tables t_user values('001','name')
查询数据 select * from t_user;
导入数据 导入HDFS数据:load data inpath '/mingxing.txt' into table t_user1;
导入本地数据库:load data local inpath '/root/hivedata/mingxing.txt' into table t_user1;
显示表头 set hive.cli.print.header=true


### 回答1: Hive是一个基于Hadoop的数据仓库工具,它提供了一种类似SQL的查询语言,用于将结构化数据存储在Hadoop集群上,并进行查询和分析。下面是一些关于Hive基础知识的选择题: 1. Hive的主要特点是什么? a) 提供类似SQL的查询语言 b) 可以在Hadoop集群上进行数据存储和分析 c) 可以处理结构化和半结构化数据 d) 所有选项都正确 答案:d) 所有选项都正确 2. Hive将数据存储在哪里? a) HBase b) Hadoop Distributed File System (HDFS) c) Cassandra d) MySQL 答案:b) Hadoop Distributed File System (HDFS) 3. Hive中的表可以与以下哪种文件格式关联? a) CSV b) JSON c) Parquet d) 所有选项都正确 答案:d) 所有选项都正确 4. Hive使用什么来对数据进行分区和排序? a) HDFS b) Tez c) MapReduce d) Apache Spark 答案:c) MapReduce 5. Hive中的数据查询和分析通过什么来实现? a) Hive Query Language (HQL) b) Structured Query Language (SQL) c) Apache Hive d) Apache Hadoop 答案:a) Hive Query Language (HQL) 总之,Hive是一个基于Hadoop的数据仓库工具,具有类似SQL的查询语言,可以在Hadoop集群上存储和分析结构化和半结构化数据。它使用HDFS来存储数据,可以与多种文件格式关联,并使用MapReduce来进行数据分区和排序。数据查询和分析通过Hive Query Language (HQL)来实现。 ### 回答2: Hive是一款基于Hadoop的数据仓库工具,它提供了方便的数据查询和分析的功能。接下来我将回答一些关于Hive基础知识的选择题。 1. Hive中的表是如何定义的? 答案:C. 使用HiveQL语句创建表。 2. 在Hive中,数据是如何存储的? 答案:B. 在Hadoop的HDFS文件系统中。 3. Hive中的分区是用来做什么的? 答案:A. 对数据进行逻辑上的划分,便于查询优化和数据管理。 4. 在Hive中,可以使用哪种语言进行数据查询? 答案:D. HiveQL。 5. 在Hive中,用来处理复杂逻辑和数据运算的是什么? 答案:B. Hive的UDF(用户定义函数)和UDAF(用户定义聚合函数)。 6. Hive的数据存储格式有哪些? 答案:A. 文本文件(TextFile)、序列文件(SequenceFile)和Parquet等。 7. Hive表中的数据可以通过什么方式进行加载? 答案:C. 使用Hive的LOAD DATA语句。 8. 在Hive中,用来创建管理表结构的是什么? 答案:B. Hive的元数据存储。 9. Hive的优势是什么? 答案:C. 简化了对Hadoop数据的查询和分析。 10. 使用Hive时,可以通过什么方式进行数据的导入和导出? 答案:D. 使用Hive的导入和导出命令。 以上是关于Hive基础知识的一些选择题的答案。Hive是一个功能强大且易于使用的工具,可以帮助用户更好地处理和分析大数据。掌握Hive基础知识对于进行数据仓库的建设和数据分析工作非常重要。 ### 回答3Hive是一个开源数据仓库基础架构,运行在Hadoop集群上。以下是关于Hive基础知识选择题的回答: 1. Hive中的数据存储在哪里? 答:Hive中的数据存储在Hadoop分布式文件系统(HDFS)中。 2. Hive中的数据是如何组织的? 答:Hive中的数据是以表(Tables)的形式进行组织的。 3. Hive中的表的结构是如何定义的? 答:Hive中的表的结构是通过DDL语句来定义的,包括表的名称、列名称、数据类型等信息。 4. Hive中的查询语言是什么? 答:Hive中的查询语言类似于SQL,称为HiveQL或HQL。 5. Hive中的查询语句是如何转换为MapReduce作业的? 答:Hive将查询语句转换为逻辑查询计划,然后将逻辑查询计划转换为物理查询计划,最后将物理查询计划转换为MapReduce作业。 6. Hive中的分区表是什么? 答:Hive中的分区表是按照一个或多个列的值分成不同的目录,并且每个目录下存储相应分区的数据。 7. Hive中的桶是什么? 答:Hive中的桶是将数据分成固定数量的文件的一种方式,目的是提高查询性能。 8. Hive中的内部表和外部表有什么区别? 答:内部表的数据和元数据都由Hive管理,删除内部表时会删除表的数据;而外部表的数据和元数据存储在外部的文件系统中,删除外部表时只会删除元数据。 9. Hive中的UDF是什么? 答:UDF全称为用户定义函数(User-Defined Functions),是由用户自定义的用于特定数据处理操作的函数。 10. Hive中的压缩是如何实现的? 答:Hive中的压缩是通过执行MapReduce作业时将数据进行压缩,以减少数据的存储空间和提高查询性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值