Apache Hive 数据仓库系统详解

Apache Hive 架构

让来看一下以下图表,它展示了Hive的架构。Hive客户端允许使用不同类型的客户端编写Hive应用程序,如Thrift服务器、Java的JDBC驱动程序以及Hive应用程序,并且支持使用ODBC协议的应用程序。作为开发人员,如果希望处理任何数据,需要使用Hive服务,如Hive CLI(命令行界面)。此外,Hive还提供了一个基于Web的界面来运行Hive应用程序。

Hive驱动器能够接收来自Thrift、JDBC和ODBCS等多个资源的查询,使用Hive服务器直接从Hive CLI和基于Web的UI接收查询。接收到查询后,它将其传输给编译器。

它从编译器接收查询,并将类似SQL的查询转换为MapReduce作业。

Hive在这里存储有关数据库的元信息,如表的模式、列的数据类型、HDFS中的位置等。

这只是用于存储数据的Hadoop分布式文件系统。强烈建议阅读这篇文章,以了解更多关于HDFS的信息。

Apache Hive工作原理

现在,让来看一下Hive在Hadoop框架上的工作原理。首先,使用Hive的Web界面或命令行界面编写查询。它将查询发送给驱动器执行。接下来,驱动器将接收到的查询发送给编译器,编译器在那里验证语法。一旦完成语法验证,它就从元存储请求元数据。现在,元数据根据查询提供数据库、表、列的数据类型等信息,并将这些信息返回给编译器。编译器再次检查从元存储接收到的所有要求,并将执行计划发送给驱动器。现在,驱动器将执行计划发送给HiveQL进程引擎,其中引擎将查询转换为MapReduce作业。

Apache Hive 数据类型

Hive数据类型分为以下5个不同的类别:

  • 数值类型:TINYINT, SMALLINT, INT, BIGINT
  • 日期/时间类型:TIMESTAMP, DATE, INTERVAL
  • 字符串类型:STRING, VARCHAR, CHAR
  • 复杂类型:STRUCT, MAP, UNION, ARRAY
  • 其他类型:BOOLEAN, BINARY

以下是其中一些的简要描述。

创建和删除数据库

创建和删除数据库非常简单,类似于SQL。需要为Hive中的每个数据库分配一个唯一的名称。如果数据库已经存在,它将显示一个警告,为了抑制这个警告,可以在数据库关键字后添加IF NOT EXISTS关键字。

CREATE DATABASE IF NOT EXISTS <database_name>;

删除数据库也非常简单,只需要编写drop database和要删除的数据库名称。如果尝试删除不存在的数据库,它将给一个SemanticException错误。

DROP DATABASE IF EXISTS <database_name>;

创建表

使用create table语句来创建表,完整的语法如下。

CREATE TABLE IF NOT EXISTS <database_name.><table_name> ( column_name_1 data_type_1, column_name_2 data_type_2, ... column_name_n data_type_n ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' STORED AS TEXTFILE;

如果已经在使用数据库,不需要写database_name.table_name。在这种情况下,只需要写表名。在处理大数据时,大部分时间都是从外部文件导入数据,因此可以预定义文件中使用的分隔符、行终止符,还可以定义想要如何存储表。

加载数据到表

现在,表已经创建好了。是时候将数据加载到表中了。可以使用以下语法从本地系统的任何文件中加载数据。

LOAD DATA LOCAL INPATH '<path of file on your local system>' INTO TABLE <database_name.><table_name>;

当处理大量数据时,有可能在某些行中存在不匹配的数据类型。在这种情况下,Hive不会抛出任何错误,而是用null值填充它们。这是一个非常有用的功能,因为将大数据文件加载到Hive是一个昂贵的过程,不想仅仅因为几个文件而加载整个数据集。

修改表

ALTER TABLE <table_name> RENAME TO <new_name>; ALTER TABLE <table_name> ADD COLUMNS ( new_column_name_1 data_type_1, new_column_name_2 data_type_2, ... new_column_name_n data_type_n );
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485