Hive 有3种部署模式,分别是嵌入模式、本地模式和远程模式。关于这 3 种部署模式的具体介绍如下。
(1)嵌入模式:使用内嵌的 Derby 数据库存储元数据,这是 Hive 最简单的部署方式在嵌入模式下运行 Hive 时,会在当前目录下生成元数据文件,只能有一个 Hive 客户端使用该目录下的元数据文件,这就意味着嵌入模式下的 Hive 不支持多会话连接,并且不同目录的元数据文件无法共享,因此不适合生产环境,只适合测试环境。
(2)本地模式:使用独立数据库(MySQL)存储元数据,Hive 客户端和 Metastore 服务在同一台服务器中启动,Hive 客户端通过连接本地的 Metastore 服务获取元数据信息。本地模式支持元数据共享,并且支持本地多会话连接。
(3)远程模式:与本地模式一样都是使用独立数据库(MySQL)存储元数据,不同的是 Hive 客户端和 Metastore 服务在不同的服务器启动,Hive 客户端通过远程连接 Metastore 服务获取元数据信息。远程模式同样支持元数据共享,并且支持远程多会话连接。
链接:http://archive.apache.org/dist/hive/hive-2.3.9/apache-hive-2.3.9-bin.tar.gz
使用 MobaXterm 远程连接工具连接虚拟机,将安装包放在用户 user 根目录的software
目录下,下载完成后,解压缩并重命名。
[user@hadoop102 software]$ tar -zxvf apache-hive-2.3.9-bin.tar.gz -C /opt/
[user@hadoop102 software]$ cd /opt/
[user@hadoop102 opt]$ mv apache-hive-2.3.9-bin hive-2.3.9
修改/etc/profile
文件配置Hive环境变量。
[user@hadoop102 opt]$ sudo vim /etc/profile.d/hive.sh
添加内容如下:
export HIVE_HOME=/opt/hive-2.3.9
export PATH=:$HIVE_HOME/bin:$PATH
加载修改后的环境变量配置
[user@hadoop102 opt]$ source /etc/profile
在启动Hive
之前需要在Hive
的安装目录下进行初始化Derby数据库的操作,具体命令如下。
[user@hadoop102 opt]$ cd hive-2.3.9
[user@hadoop102 hive-2.3.9]$ bin/schematool -initSchema -dbType derb
执行上述命令后,若出现 schemaTool completed
信息,则证明成功初始化 Derby 数据库。
执行“hive
”命令启动 Hive 客户端工具 HiveCLI。
可以执行“quit
;”命令退出Hive客户端工具HiveCLI,此时在Hive 安装目录下会默认生成文件derby.log和文件夹metastore_db,其中文件 derby.log用于记录Derby数据库日志信息;文件夹metastore_db存储Derby数据库元数据。
本地模式部署本质上是将 Hive 默认的元数据存储介质由内嵌的 Derby 数据库替换为独立数据库,即 MySQL 数据库。这样,无论在任何目录下通过 Hive 客户端工具,访问的元数 据信息是一致的,并且可以实现多个用户同时访问,从而实现元数据的共享。
本地模式部署 Hive 需要在一台虚拟机上同时安装 MySQL 和 Hive,这里以虚拟机为例, 详细讲解如何使用本地模式部署 Hive,具体操作步骤如下
下载链接如下:https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.40-1.el7.x86_64.rpm-bundle.tar
将安装包放在用户user根目录的software
目录下,下载完成后,解压,使用yum
安装下面几个rpm包,具体命令如下:
sudo rpm -ivh mysql-community-common-5.7.40-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-libs-5.7.40-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-client-5.7.40-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-server-5.7.40-1.el7.x86_64.rpm
若出现以下错误:
错误:依赖检测失败:
mysql-community-libs(x86-64) >= 5.7.9 被 (已安裝) mysql-community-libs-compat-5.7.40-1.el7.x86_64 需要
mysql-community-libs(x86-64) >= 5.7.9 被 (已安裝) mysql-community-client-5.7.40-1.el7.x86_64 需要
解决方案:清除之前安装过的依赖命令如下:
[user@hadoop102 ~]$ sudo yum remove mysql-libs
MySQL安装完成后,执行systemctl start mysqld
命令启动MySQL服务,待 MySQL服务启动完成后,执行systemctl status mysqld
查看MySQL 服务运行状态,MySQL 服务运行状态信息中出现 active(running)
信息,说明MySQL 服务处于运行状态。
MySQL安装完成后需要通过用户名和密码进行登录,MySQL为本地默认用户root
自动生成密码,可以在MySQL的日志文件中查看此密码,具体命令如下。
[user@hadoop102 ~]$ grep "password" /var/log/mysqld.log
执行上述命令后,在返回的信息中查看MySQL中本地默认用户root的密码。
接下来,执行“mysql -uroot -p
”命令以root
身份登录 MySQL,在弹出的“Enter password:
”信息处输入密码,从而登录 MySQL 进入命令行交互界面。
若出现下面错误:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
解决方案:
1)停止 MySQL 服务
[user@hadoop102 ~]$ service mysqld stop
2)跳过验证:修改 MySQL 安装目录下的my.ini
配置文件,使登录时跳过权限检查
[user@hadoop102 ~]$ sudo vim /etc/my.cnf
# 在my.ini,[mysqld]下添加一行,使其登录时跳过权限检查
skip-grant-tables
启动 MySQL 需要密码的话使用如下命令,假设密码为“123456”
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
修改后输入“flush privileges
”刷新权限。
我们在之前嵌入模式安装的 Hive 基础上,修改配置,完成本地模式的安装。
进入 Hive 安装目录下的 conf
目录,复制模板文件 hive-env.sh.template
并重命名为hive-env.sh
,文件 hive-env.sh
用于配置 Hive 运行环境,具体命令如下。
# 进入 Hive 安装目录下的 conf 目录
[user@hadoop102 ~]$ cd /opt/hive-2.3.9/conf/
# 将文件 hive-env.sh.template 进行复制并重命名为 hive-env.sh
[user@hadoop102 conf]$ cp hive-env.sh.template hive-env.sh
添加环境变量,编辑文件hive-env.sh
,命令如下:
[user@hadoop102 ~]$ vim /opt/hive-2.3.9/conf/hive-env.sh
添加如下环境变量:
# 指定 Hadoop 目录
export HADOOP_HOME=/opt/hadoop-2.7.7
# 指定 Hive 配置文件所在目录
export HIVE_CONF_DIR=/opt/hive-2.3.9/conf
# 指定 Hive 依赖包所在目录
export HIVE_AUX_JARS_PATH=/opt/hive-2.3.9/lib
# 指定 JDK 所在目录
export JAVA_HOME=/usr/java/default
进入Hive安装目录下的conf
目录,创建文件 hive-site.xml
用于配置 Hive 相关参数,具体命令如下:
# 进入 Hive 安装目录下的 conf 目录
[user@hadoop102 ~]$ cd /opt/hive-2.3.9/conf
# 创建文件 hive-site.xml
[user@hadoop102 conf]$ touch hive-site.xml
执行“vim hive-site.xml
”命令编辑文件 hive-site.xml
,添加如下内容:
<configuration>
<property>
<name>hive.metastore.warehouse.dirname>
<value>/user/hive/warehousevalue>
property>
<property>
<name>javax.jdo.option.ConnectionUserNamename>
<value>rootvalue>
property>
<property>
<name>javax.jdo.option.ConnectionURLname>
<value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true&useSSL=falsevalue>
property>
<property>
<name>javax.jdo.option.ConnectionDriverNamename>
<value>com.mysql.jdbc.Drivervalue>
property>
<property>
<name>hive.metastore.schema.verificationname>
<value>falsevalue>
property>
<property>
<name>datanucleus.schema.autoCreateAllname>
<value>truevalue>
property>
<property>
<name>hive.cli.print.headername>
<value>truevalue>
property>
<property>
<name>hive.cli.print.current.dbname>
<value>truevalue>
property>
<property>
<name>hive.server2.enable.doAsname>
<value>falsevalue>
property>
configuration>
上述配置内容中的参数讲解如下。
- hive.metastore.warehouse.dir:配置 Hive 数据存储在 HDFS 上的目录。
- javax.jdo.option.ConnectionURL:配置 JDBC 连接地址。
- javax.jdo.option.ConnectionDriverName:配置 JDBC 驱动。
- javax.jdo.option.ConnectionUserName:配置连接 MySQL 的用户名。
- javax.jdo.option.ConnectionPassword:配置连接 MySQL 的密码。
- hive.metastore.schema.verification:Hive 元数据存储版本是否进行验证。
- datanucleus.schema.autoCreateAll:当元数据库中必要的数据对象不存在时,是否自动创建。
- hive.cli.print.header:配置在命令行界面(CLI)中显示表的列名。
- hive.cli.print.current.db:配置在命令行界面(CLI)中显示当前数据库名称,只会在Hive 的客户端工具 HiveCLI 生效,在 Hive 的客户端工具 Beeline 中无效。
下载 JDBC 连接 MySQL 的驱动包。
下载地址:https://downloads.mysql.com/archives/c-j/。
选择 mysql-connector-java-5.1.49.tar.gz
,点击下载。
解压缩后,将mysql-connector-java-5.1.49.jar
文件上传至/opt/hive-2.3.9/lib
目录中。在启动 Hive 之前需要执行schematool -initSchema -dbType mysql
命令初始化MySQL,若初始化完成后出现 schemaTool completed
信息,则说明成功初始化 MySQL。
执行 hive
命令启动 Hive客户端工具 HiveCLI。成功启动 Hive 客户端工具 HiveCLI 进入命令行界面,默认当前使用的数据库为default
。
在虚拟机中执行hiveserver2
命令启动HiveServer2服务,HiveServer2服务启动成功后,HiveServer2会进入监听状态,若要使用后台方式启动 HiveServer2 服务,则执行“hive --service hiveserver2 &
”命令,需要注意的是,通过hiveserver2
命令启动的 HiveServer2 服务,不能关闭当前窗口,否则会停止 HiveServer2 服务。若需要手动停止 HiveServer2 服务,可以通过按下组合键 Ctrl+C 实现。
通过MobaXterm远程连接工具再开启一个虚拟机窗口,在新窗口中通过Hive客户端工具Beeline远程连接虚拟HiveServer2服务,具体命令如下。(这里用的是root用户,我的密码设置为1)
[user@hadoop102 ~]$ beeline -u jdbc:hive2://localhost:10000 -nroot -p1
上述命令中,beeline 用于执行 beeline 命令;u、n、p 都是 beeline 命令的参数。其中,-u 用于指定 HiveServer2 地址;-n 则用于指定登录当前虚拟机操作系统的用户名;-p 则是系统用户的密码。成功连接 HiveServer2服务如图1-3所示。
如果出现如下报错:
Could not open connection to the HS2 server. Please check the server URI and if the URI is correct, then ask the administrator to check the server status.
Error: Could not open client transport with JDBC Uri: jdbc:hive2://localhost:10000: java.net.ConnectException: 拒绝连接 (Connection refused) (state=08S01,code=0)
解决方案:
1)在conf/hive-site.xml
文件中加入以下配置:
<property>
<name>hive.server2.enable.doAsname>
<value>falsevalue>
property>
如果还是出现报错那么:
2)在Hadoop的etc/hadoop目录下core-site.xml
文件中加入以下配置:
<property>
<name>hadoop.proxyuser.user.hostsname>
<value>*value>
property>
<property>
<name>hadoop.proxyuser.user.groupsname>
<value>*value>
property>
上述配置内容中的参数讲解如下。
hadoop.proxyuser.$superuser.hosts | 配置该superUser允许通过代理访问的主机节点 |
---|---|
hadoop.proxyuser.$superuser.groups | 配置该superUser允许代理的用户所属组 |
对于每个superUser用户,hosts必须进行配置,而groups和users至少需要配置一个。
这几个配置项的值都可以使用*来表示允许所有的主机/用户组/用户。
如果还是没有解决:
3)启动metastore
服务,命令如下:
[user@hadoop102 ~]$ hive --service metastore
我们打开jps
查看进程,如果是不是两个RunJar
,使用 kill 把所以 RunJar 的进程杀死,重新启动hiveserver2
和metastore
服务,再查看jps进程刚好两个,再连接。
如果还是没有连接上,看看HDFS,YARN,MySQL
是不是有没启动的。
启动命令:
[user@hadoop102 ~]$ start-dfs.sh
[user@hadoop102 ~]$ start-yarn.sh
[user@hadoop102 ~]$ service mysqld start
如果还是连接不上去查看一下各个配置的格式有没有问题。
通过 Hive 客户端工具 Beeline 远程连接虚拟 HiveServer2 服务连接问题总结:
HDFS,YARN启动没。
MySQL启动没。
hiveserver2服务启动没。
metastore元数据启动没。
conf/hive-site.xml文件配置没。
conf/hive-env.sh的环境变量配置没。
Hadoop的etc/hadoop目录下core-site.xml文件配置没。