Hive 3.1.3 生产安装

1.安装用于存储元数据的关系数据库

生产环境中一般存储元数据采用独立的关系型数据库而非Hive本地的嵌入式数据库
本地的嵌入式数据库无法支持多个请求同时访问。
本示例采用Mysql8.0作为示例
具体的支持列表参考官方文档:
https://cwiki.apache.org/confluence/display/Hive/AdminManual+Metastore+Administration#AdminManualMetastoreAdministration-SupportedBackendDatabasesforMetastore

1.安装Mysql8.0

参考 Debian 安装 Mysql

2.设置Mysql的Root账户允许远程登录

需要进入到mysql的shell中执行

update user set host = '%' where user = 'root';

刷新权限

flush privileges;

3.创建用户保存Hive元数据的数据库

create database hive;

4.下载Mysql JDBC连接驱动

地址1(Mysql官方托管):https://downloads.mysql.com/archives/c-j/
image

地址2(Maven中央仓库托管): https://mvnrepository.com/artifact/com.mysql/mysql-connector-j
image

2.配置Hive相关

1.解压

mkdir /usr/hive
tar -zxvf apache-hive-3.1.3-bin.tar.gz -C /usr/hive

2.配置Hive环境变量

在/etc/profile.d中配置

1.新建hive.sh
vi /etc/profile.d/hive.sh
export HIVE_HOME=/usr/hive/apache-hive-3.1.3-bin
export PATH=$PATH:$HIVE_HOME/bin
2.授予文件执行权限
chmod u+x /etc/profile.d/hive.sh
3.刷新环境变量
source /etc/profile

3.将Mysql JDBC连接驱动拷贝到Hive的lib目录下

cp /home/mysql-connector-j-8.0.33.jar $HIVE_HOME/lib

4.在$HIVE_HOME/conf目录下新建hive-site.xml文件

vi $HIVE_HOME/conf/hive-site.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://192.168.58.130:3306/hive?createDatabaseIfNotExist=true&amp;serverTimezone=Asia/Shanghai</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.cj.jdbc.Driver</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>root</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>coreqiwithhs</value>
    </property>
    <property>
        <name>hive.metastore.schema.verification</name>
        <value>false</value>
    </property>
    <property>
        <name>system:user.name</name>
        <value>root</value>
    </property>
</configuration>

5.初始化元数据库

注:需要保证Hadoop集群是开启状态

schematool -dbType mysql -initSchema -verbose

6.启动Hive

hive

7.测试

show databases;
show tables;

3.配置HiveServer2相关

1.配置Hadoop的代理用户功能

Hive的hiveserver2服务的作用是提供jdbc/odbc接口,为用户提供远程访问Hive数据的功能,例如用户期望在个人电脑中访问远程服务中的Hive数据,就需要用到Hiveserver2

在远程访问Hive数据时,客户端并未直接访问Hadoop集群,而是由Hivesever2代理访问。由于Hadoop集群中的数据具备访问权限控制,若启用Hiveserver2用户模拟的功能,则Hiveserver2会模拟成Hadoop客户端的登录用户去访问Hadoop集群的数据,不启用,则Hivesever2会直接使用当前Hive进程的启动用户去访问Hadoop集群数据。模拟用户的功能,默认是开启的。生产环境,推荐开启用户模拟功能,因为开启后才能保证各用户之间的权限隔离。

Hivesever2的模拟用户功能,依赖于Hadoop提供的proxy user(代理用户功能),只有Hadoop中的代理用户才能模拟其他用户的身份访问Hadoop集群。因此,需要将Hiveserver2的启动用户设置为Hadoop的代理用户
修改配置文件core-site.xml

    <!--配置所有节点的root用户都可作为代理用户-->
    <property>
        <name>hadoop.proxyuser.root.hosts</name>
        <value>*</value>
    </property>

    <!--配置root用户能够代理的用户组为任意组-->
    <property>
        <name>hadoop.proxyuser.root.groups</name>
        <value>*</value>
    </property>

    <!--配置root用户能够代理的用户为任意用户-->
    <property>
        <name>hadoop.proxyuser.root.users</name>
        <value>*</value>
    </property>

2.Hive端配置

在hive-site.xml文件中添加如下配置信息

    <!-- 指定hiveserver2连接的host -->
    <property>
        <name>hive.server2.thrift.bind.host</name>
        <value>192.168.58.130</value>
    </property>

    <!-- 指定hiveserver2连接的端口号 -->
    <property>
        <name>hive.server2.thrift.port</name>
        <value>10000</value>
    </property>

3.启动 hiveserver2 服务

1.前台启动
hiveserver2

或者

hive --service hiveserver2
2.后台启动
1.记录日志
nohup hiveserver2 1>/home/fanqi/hiveserver.log 2>/home/fanqi/hiveserver.err &
2.不记录日志
nohup hiveserver2 1>/dev/null 2>/dev/null &

等于

nohup hiveserver2 1>/dev/null 2>&1 &

等于

nohup hiveserver2 >/dev/null 2>&1 &

命令中的 1 和 2 的意义分别是:
1:表示标准日志输出;
2:表示错误日志输出。
如果我没有配置日志的输出路径,日志会生成在当前工作目录,默认的日志名称叫做:
nohup.xxx

nohup 命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用 nohup 命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。
nohup 就是不挂起的意思(no hang up)。该命令的一般形式为:

nohup command &

4.连接

1.CLI
hive
2.Beeline

Beeline是Hive新的命令行客户端工具。
Beeline是从 Hive 0.11版本引入的。
HiveServer2 支持一个新的命令行Shell,称为Beeline,它是基于SQLLine CLI的JDBC客户端。
Beeline支持嵌入模式(embedded mode)和远程模式(remote mode)。在嵌入式模式下,运行嵌入式的Hive(类似Hive CLI),而远程模式可以通过Thrift连接到独立的HiveServer2进程上。从Hive 0.14版本开始,Beeline使用HiveServer2工作时,它也会从HiveServer2输出日志信息到STDERR。

beeline -u jdbc:hive2://192.168.58.130:10000 -n root
3.DBeaver,图形化工具【略】
4.Datagrip,图形化工具【略】

4.配置Metastore相关

Hive的metastore服务的作用是为Hive CLI或者Hiveserver2提供元数据访问接口。
metastore有两种运行模式,分别为嵌入式模式和独立服务模式。
生产环境中,不推荐使用嵌入式模式。因为其存在以下两个问题:

  1. 嵌入式模式下,每个Hive CLI都需要直接连接元数据库,当Hive CLI较多时,数据库压力会比较大。
  2. 每个客户端都需要用户元数据库的读写权限,元数据库的安全得不到很好的保证。

1.配置Metastore服务

指定一个节点为Metastore服务提供节点,用于访问元数据并提供Metastore服务
hive-site.xml配置文件

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://192.168.58.130:3306/hive?createDatabaseIfNotExist=true&amp;serverTimezone=Asia/Shanghai</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.cj.jdbc.Driver</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>root</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>coreqiwithhs</value>
    </property>
    <property>
        <name>system:user.name</name>
        <value>root</value>
    </property>
</configuration>

2.启动Metastore服务

1.前台启动
hive --service metastore
2.后台启动
1.记录日志
nohup hive --service metastore 1>/home/fanqi/hivemetastore.log 2>/home/fanqi/hivemetastore.err &
2.不记录日志
nohup hive --service metastore 1>/dev/null 2>/dev/null &

等于

nohup hive --service metastore 1>/dev/null 2>&1 &

等于

nohup hive --service metastore >/dev/null 2>&1 &

3.节点连接Metastore服务

在Hiveserver2和每个Hive CLI的配置文件hive-site.xml中添加访问metastore服务所需的以下参数:

<!-- 指定metastore服务的地址 -->
<property>
	<name>hive.metastore.uris</name>
	<value>thrift://192.168.58.130:9083</value>
</property>

注意:主机名需要改为metastore服务所在节点,端口号无需修改,metastore服务的默认端口就是9083。
此时Hiveserver2和每个Hive CLI的配置文件hive-site.xml中无需包含访问元数据的数据库访问信息。

4.启动客户端节点

hive
posted @ 2023-12-24 18:39  SpringCore  阅读(83)  评论(0编辑  收藏  举报