大道至简,知易行难
广阔天地,大有作为

Hive 3.1.2 on Hadoop 3.2.1(Local Metastore with MySQL)部署

由于Hive采用了类似SQL的查询语言HiveQL,因此很容易将Hive理解为数据库。但其实上除了HiveQL是SQL的一种方言、Hive和数据库一样除了拥有类似的查询语言外,两者再无类似之处,Hive是为数据仓库而设计的,不适合用于联机事务处理,不支持事务,也不提供实时查询功能,适合基于大量不可变数据的批处理作业。HiveQL首先提交到Driver,然后调用Compiler, 最终解释成MapReduce任务执行(Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases.),并将结果返回。

Hive的体系结构如下:

Hive架构

Hive架构

可以分为以下几部分:
1、用户接口主要有CLI、Client和HWI三种(Hive 2.2.0之后,HWI已经被从发行版中移除,https://issues.apache.org/jira/browse/HIVE-15622,源码中的hwi目录也已经被移除);
2、Hive将元数据存储在关系数据库中(metastore database),Hive中的元数据包括表的名字、表的列和分区及其属性、表的属性(是否为外部表等)、表的数据所在目录等;
3、解释器、编译器、优化器,完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成,生成的查询计划存储在HDFS中,并在随后有MapReduce调用执行;
4、Hive中所有的数据都存储在HDFS中,存储结构主要包括数据库、文件、表和视图,大部分的查询、计算由MapReduce完成;

Hive将元数据存储在RDBMS中,metastore存储了Hive的元数据,包括两部分:metastore服务及metastore的后台数据。一般有Embedded metastore、Local metastore和Remote metastore三种:

Hive metastore onfiguration

Hive metastore onfiguration

默认情况下为Embedded metastore方式,即metastore服务和Hive服务运行在同一个JVM中,并使用一个内嵌的、以本地磁盘作为存储的Derby数据库存储元数据,在这种方式下Hive表定义位于本地机器上,无法与其他用户共享,也不支持多会话。如果要支持多用户及多会会话,则需要使用一个独立的数据库,此时metastore和Hive service仍然运行在同一个JVM中,称为Local metastore方式。有关三种模式的具体细节可以参见《Hadoop权威指南 第四版》P478,我们选择使用Local metastore方式。

一、Hive基本配置
Hive只需在一个节点上部署即可,我们将其部署在master节点上。
从官网下载apache-hive-3.1.2-bin.tar.gz,然后使用 tar zvxf apache-hive-3.1.2-bin.tar.gz将其解压到apache-hive-3.1.2-bin。将HIVE_HOME加入到/etc/environment中:

由于Hive使用了Hadoop(实际上正是从core-site.xml和yarn-site.xml中获取的有关HDFS和YARN的关键配置),因此HADOOP_HOME也需要在/etc/environment中,否则会报错:

之后,使用如下目录创建Hive在HDFS中的所需目录(hive.metastore.warehouse.dir对应的目录)并设置权限:

将conf目录下的hive-default.xml.template复制一份为hive-site.xml,这个配置文件很大,其中注明了这个文件是自动生成用于文档注释的:

将其中所有的配置项全部删掉,然后增加如下的配置项:

二、初始化metastore数据库
按官网的说法:

Starting from Hive 2.1, we need to run the schematool command below as an initialization step.

我们使用MySQL数据库,建立schema即可,无需导入表,schema我们起名为hive。由于要操作MySQL数据库,因此我们需要将MySQL的JDBC Connector放到Hive的lib目录下:

运行hive/bin目录下 schematool -dbType mysql -initSchema初始化数据库:

可以看到在MySQL中创建了Hive相关的表,多达七十多张:

Hive的metadata表

Hive的metadata表

三、Hive服务
Hive的Shell环境只是hive命令提供的其中一项服务,我们可以使用 hive --service  help查看所有的service,默认的service其实就是cli:

运行 ./hive实际上等价于 ./hive --service cli,对于Hive 3.1.2 on Hadoop 3.2.1而言会报错:

经查,是由于Hive发行版内依赖的Guava版本和Hadoop内依赖的Guava版本不一致造成的,解决方法是查看Hadoop目录下share/hadoop/common/lib和Hive目录下lib内的guava.jar版本是否一致,若不一致则删除版本低的并拷贝高版本的即可:

Hive和Hadoop使用了冲突的Guava

Hive和Hadoop使用了冲突的Guava

然后就可以在Hive Shell中进行操作了。
此外,Hive服务常用的还包括metastore,这主要用于Remote metastore的配置模式。

四、使用Hive CLI
我们在Hive Shell中进行一下测试:

能够看到HDFS中对应的数据:

五、使用HiveServer2服务
根据官网文档,直接使用 ./hiveserver2命令即可启动HiveServer2,此时即所谓以服务器的方式运行Hive:

hiveserver2实际是个脚本文件,实际就是 hive --service hiveserver2,这样就可以在应用程序中使用不同的Thrift客户端或JDBC客户端连接到Hive了,hiveserver2的Thrift默认端口为10000和10001:

此时,HiveServer2是在前台运行的,如果要后台运行需要使用nohup。

五、Web UI
Hive目前已经移除了HWI,此处指的Web UI是HiveServer2的Web UI,默认端口是10002:

hiveserver2 WebUI

hiveserver2 WebUI

六、Beeline及其他客户端
根据官网的说法,Hive CLI已被弃用,与hiveserver2配合的是Beeline:

HiveServer2 (introduced in Hive 0.11) has its own CLI called Beeline. HiveCLI is now deprecated in favor of Beeline, as it lacks the multi-user, security, and other capabilities of HiveServer2.

Beeline启动时需要HiveServer2的JDBC URL作为参数,默认连接时使用的是Thrift的10000端口:

我们可以使用 ./beeline -u jdbc:hive2://localhost:10000连接到HiveServer2,但如果是以root用户运行的话会报错“root is not allowed to impersonate anonymous”,因此一般hive也必然是使用非root的其他用户运行的:

也可以在beeline的shell中使用!connect进行连接:

 

参考文档:
1、https://cwiki.apache.org/confluence/display/Hive/GettingStarted#GettingStarted-InstallationandConfiguration
2、https://www.cnblogs.com/zimo-jing/p/9028949.html
3、https://blog.csdn.net/GQB1226/article/details/102555820
4、《Hadoop 权威指南 第四版》P476
5、https://cwiki.apache.org/confluence/display/Hive/HiveServer2+Clients
6、https://blog.csdn.net/xxw_sample/article/details/80244938
7、https://cwiki.apache.org/confluence/display/Hive/Setting+up+HiveServer2#SettingUpHiveServer2-Authentication/SecurityConfiguration

转载时请保留出处,违法转载追究到底:进城务工人员小梅 » Hive 3.1.2 on Hadoop 3.2.1(Local Metastore with MySQL)部署

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址