所有大数据和数据工程专业人士必备的工具
大多数数据科学家使用SQL查询来探索数据并从中获得有价值的见解。现在,随着数据量以如此高的速度增长,我们需要新的专用工具来处理大量数据。
最初,Hadoop出现并成为处理和存储大数据的最受欢迎的工具之一。但是开发人员需要编写复杂的map-reduce代码才能与Hadoop一起使用。这是Facebook的Apache Hive来营救的。它是另一个设计用于Hadoop的工具。我们可以在配置单元中编写类似查询的SQL,并在后端将其转换为map-reduce作业。
在本文中,我们将看到配置单元的架构及其工作方式。我们还将学习如何执行简单的操作,例如创建数据库和表,加载数据,修改表。
目录
什么是Apache Hive?
Apache Hive架构
Apache Hive的工作
Apache Hive中的数据类型
创建和删除数据库
创建和删除表
将数据加载到表中
修改表
蜂巢的优点/缺点
什么是Apache Hive?
阿帕奇蜂巢
Apache Hive是Facebook开发的一种数据仓库系统,用于处理Hadoop中的大量结构数据。我们知道,要使用Hadoop处理数据,我们需要纠正复杂的map-reduce函数,这对于大多数开发人员而言并非易事。Hive使我们的工作非常轻松。
它使用一种称为HiveQL的脚本语言,该脚本语言几乎与SQL相似。所以现在,我们只需要编写类似SQL的命令,并且在Hive的后端将自动将它们转换为map-reduce作业。
Apache Hive架构
让我们看一下显示架构的下图。
蜂巢架构
Hive客户端:它允许我们使用不同类型的客户端编写Hive应用程序,例如Thrift服务器,Java的JDBC驱动程序和Hive应用程序,并且还支持使用ODBC协议的应用程序。
蜂巢服务:作为开发人员,如果我们希望处理任何数据,则需要使用蜂巢服务,例如蜂巢CLI(命令行界面)。除了该配置单元外,还提供了一个基于Web的界面来运行配置单元应用程序。
Hive驱动程序:它能够使用hive服务器并直接从hive CLI和基于Web的UI接收来自诸如Thrift,JDBC和ODBS的多种资源的查询。收到查询后,它将其传输到编译器。
HiveQL引擎:它从编译器接收查询,并将类似SQL的查询转换为map-reduce作业。
元存储:此处,配置单元存储有关数据库的元信息,例如表的架构,列的数据类型,HDFS中的位置等
HDFS:它只是用于存储数据的Hadoop分布式文件系统。我强烈建议您阅读本文,以了解有关HDFS的更多信息:Hadoop生态系统简介
Apache Hive的工作
现在,让我们看一下Hive在Hadoop框架上的工作情况。
apache蜂巢与hadoop
第一步,我们使用配置单元的Web界面或命令行界面记录查询。它将其发送给驱动程序以执行查询。
在下一步中,驱动程序将接收到的查询发送到编译器,由编译器在其中验证语法。
语法验证完成后,它会从元存储中请求元数据。
现在,元数据提供了诸如数据库,表,列的数据类型之类的信息,以响应查询返回到编译器。
编译器再次检查从元存储接收到的所有需求,并将执行计划发送给驱动程序。
现在,驱动程序将执行计划发送到HiveQL流程引擎,在该引擎中,引擎将查询转换为map-reduce作业。
将查询转换为map-reduce作业后,它将任务信息发送到Hadoop,在该处开始查询的处理,同时它更新元存储中关于map-reduce作业的元数据。
处理完成后,执行引擎将接收查询结果。
执行引擎将结果传输回驱动程序,最后将驱动程序发送到hive用户界面,从那里我们可以看到结果。
Apache Hive中的数据类型
Hive数据类型分为以下5个不同的类别:
数值类型: TINYINT,SMALLINT,INT,BIGINT
日期/时间类型: TIMESTAMP,DATE,INTERVAL
字符串类型: STRING,VARCHAR,CHAR
复杂类型: STRUCT,MAP,UNION,ARRAY
杂项类型: BOOLEAN,BINARY
这里是其中一些的简短描述。
Apache Hive-数据类型
创建和删除数据库
创建和删除数据库非常简单,类似于SQL。我们需要为配置单元中的每个数据库分配一个唯一的名称。如果数据库已经存在,它将显示警告,并且可以在数据库关键字之后添加关键字IF NOT EXISTS来抑制该警告。
CREATE DATABASE <<database_name>> ;
删除数据库也非常简单,您只需要编写一个删除数据库和要删除的数据库名称即可。如果您尝试删除不存在的数据库,它将给您SemanticException错误。
DROP DATABASE <<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。在这种情况下,您只能写表名。对于大数据,大多数时候我们都是从外部文件导入数据,因此在这里我们可以预定义文件中使用的定界符,行终止符,还可以定义存储表的方式。
有2种不同类型的配置单元表“内部”表和“外部”表。请仔细阅读本文以了解有关该概念的更多信息:Apache Hive中的表类型:快速概述
将数据加载到表中
现在,表已创建。现在是时候将数据加载到其中了。我们可以使用以下语法从系统上任何本地文件加载数据。
LOAD DATA LOCAL INPATH <<path of file on your local system>>
INTO TABLE
<<database_name.>><<table_name>> ;
当我们处理大量数据时,某些行中可能会有不匹配的数据类型。在这种情况下,配置单元将不会引发任何错误,而是会填充空值来代替它们。这是非常有用的功能,因为将大数据文件加载到配置单元中是一个昂贵的过程,并且我们不希望仅由于文件很少而加载整个数据集。
修改表
在配置单元中,我们可以对现有表进行多种修改,例如重命名表,向表中添加更多列。更改表的命令与SQL命令非常相似。
这是重命名表的语法:
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) ;
Apache Hive的优点/缺点
使用大多数开发人员已经熟悉的类似SQL的查询语言,因此使其易于使用。
它具有高度的可扩展性,您可以使用它来处理任何大小的数据。
支持多个数据库(例如MySQL,Derby,Postgres和Oracle)为其metastore。
支持多种数据格式,还允许索引,分区和存储桶,以优化查询。
仅能处理冷数据,在处理实时数据时毫无用处。
它比某些竞争对手要慢。如果您的用例主要涉及批处理,那么Hive很好。
题库