Hive下载与安装

三种安装方式区别

Hive中metastore (元数据存储)的三种模式:

a)内嵌Derby模式

b)直连数据库模式

c)远程服务器模式

内嵌 Derby 模式

此模式连接到一个In-memory 的数据库Derby ,一般用于Unit Test(单元测试目前用的也少), 一台服务器即可,基本不用

直连数据库模式( mysql

通过网络连接到一个数据库中。

远程服务模式

用于非Java客户端访问元数据库,在服务器端启动MetaStoreServer,客户端利用Thrift协议通过MetaStoreServer访问元数据库。起到了解耦的作用,如果更换其他数据库只需要修改MetaStoreServer即可。

官方文档介绍

下载地址

  1. Hive官网地址: http://hive.apache.org/

  2. 下载地址

https://dlcdn.apache.org/hive/

以下网址可以选择的版本更加全面:

http://archive.apache.org/dist/hive/

  1. 文档查看地址

https://hive.apache.org/docs/latest/

  1. github地址:https://github.com/apache/hive

Metadata

默认情况下Metadata(元数据存储)在嵌入式Derby数据库中,其磁盘存储位置由名为javax.jdo.option.Connectionurl的hive配置变量决定。默认情况下,此位置为./metastore_db(参见conf/hive-default.xml)。在嵌入式模式下使用Derby最多一次允许一个用户。若要将Derby配置为在服务器模式下运行,请参见服务器模式下使用Derby的Hive。若要为Hive元存储配置除Derby以外的数据库,请参见:Apache Hive : AdminManual Metastore Administration

MySQL安装

Hive 3.1.2对关系型数据库版本要求如下:

先将四台虚拟机拍快照(安装出问题的时候方便回退到初始状态),然后再进行安装, node1上安装:

1.将mysql的五个rpm包上传到/opt/apps目录

下载链接:https://download.csdn.net/download/m0_62491477/92566309

复制代码
[root@node1 ~]# cd /opt/apps
#拷贝mysql的安装的rpm包

2.检查当前节点上是否存在MySQL安装包,存在则删除:

bash 复制代码
[root@node1 apps]# rpm -qa | grep mysql
[root@node1 apps]# rpm -qa | grep mariadb-libs
mariadb-libs-5.5.68-1.el7.x86_64
[root@node1 apps]# rpm -e --nodeps mariadb-libs
#如果不处理 mariadb-libs,后续安装的时候会出现如下错误提示:
错误:依赖检测失败:
mariadb-libs 被 mysql-community-libs-5.7.28-1.el7.x86_64 取代
mariadb-libs 被 mysql-community-libs-compat-5.7.28-1.el7.x86_64 取代
#如果出现上述报错,找到的mysql相关的包都删除,*号指代实际包名, 请实际情况输入完整包名
#rpm -e --nodeps mysql-community-libs-*
#rpm -e --nodeps mysql-community-server-*
#rpm -e --nodeps mysql-community-common-*
#rpm -e --nodeps mysql-community-client-*
#rpm -e --nodeps mysql-community-libs-compat-*

3. 检查并删除老版本mysql的开发头文件和库

bash 复制代码
[root@node1 apps]# find / -iname 'mysql*'
#rm -rf /var/lib/mysql
#rm -f /etc/my.cnf

注意:第二步如果有删除,卸载后 /var/lib/mysql 中的数据及 /etc/my.cnf 不会删除,如果确定没用后就手工删除

4. 安装依赖包:net-tools libaio

bash 复制代码
yum install -y net-tools libaio

5. 安装mysql

bash 复制代码
rpm -ivh mysql-community-*

6. 修改/etc/my.cnf文件,设置数据库的编码方式:

bash 复制代码
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
character_set_server=utf8

7. 初始化数据库

bash 复制代码
[root@node1 apps]# mysqld --initialize --user=mysql

如果出现错误,请查看 /etc/my.cnf 文件中指定的错误 log 日志的文件 :log-error=/var/log/mysqld.log

8. 找到随机密码:

在 /var/log/mysqld.log 中有一行:
A temporary password is generated for root@localhost ,后面就是随机密码

9. 启动服务:systemctl start mysqld

10. 使用随机密码登录mysql数据库:

bash 复制代码
[root@node1 apps]# mysql -uroot -p
Enter password: 输入临时密码

11. 修改默认密码

bash 复制代码
mysql> set password for 'root'@'localhost'=password('123456');

12. 查看编码方式:

bash 复制代码
mysql> show variables like '%character%';

13. 给root设置远程登录权限

bash 复制代码
mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH
GRANT OPTION;
mysql>FLUSH PRIVILEGES;
mysql> exit
Bye
[root@node1 apps]# mysql -uroot -p123456

直连数据库(mysql)模式安装

注意:接下来的这种配置方式,是将 hive 的服务器端和客户端放在一台服务器上( node2 )。如果想通过jdbc 程序访问该 hive 是没有办法的,这是因为 hive 没有开启 hiveserver2 服务。

1. 把apache-hive-3.1.2-bin.tar.gz上传到node2的/opt/apps目录下

2. 解压apache-hive-3.1.2-bin.tar.gz到/opt/目录下面

bash 复制代码
[root@node2 apps]# tar -zxvf /opt/apps/apache-hive-3.1.2-bin.tar.gz -C /opt/

3. 修改apache-hive-3.1.2-bin.tar.gz的名称为hive-3.1.2

bash 复制代码
[root@node2 apps]# mv /opt/apache-hive-3.1.2-bin/ /opt/hive-3.1.2

4. 修改/etc/profile,添加环境变量

bash 复制代码
[root@node2 apps]# vim /etc/profile
#添加内容
# hive环境变量配置
export HIVE_HOME=/opt/hive-3.1.2
export PATH=$PATH:$HIVE_HOME/bin
#使环境变量生效
[root@node2 hive-3.1.2]# source /etc/profile

5. 解决日志Jar包冲突

bash 复制代码
[root@node2 apps]# mv $HIVE_HOME/lib/log4j-slf4j-impl-2.10.0.jar $HIVE_HOME/lib/log4j-slf4j-impl-2.10.0.bak_up2026

6. 上传MySQL的JDBC驱动到Hive的lib目录下

MySQL的JDBC驱动: https://download.csdn.net/download/m0_62491477/92567162
先解压到本地,再将其中的驱动上传到 Hive 的 lib 目录下

bash 复制代码
[root@node2 lib]# pwd
/opt/hive-3.1.2/lib

7. 配置Metastore到MySql

  • 修改hive-site.xml
bash 复制代码
[root@node2 apps]# vim $HIVE_HOME/conf/hive-site.xml
  • 添加如下配置内容:
XML 复制代码
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- jdbc连接的URL设置 -->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://node1:3306/hive?useSSL=false</value>
</property>
<!-- jdbc连接的Driver类设置-->
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<!-- 指定jdbc连接的username-->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<!-- 指定jdbc连接mysql的password -->
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
</property>
<!-- Hive默认在HDFS的工作目录 -->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<!-- Hive元数据存储的验证 -->
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
<!-- 元数据存储授权 -->
<property>
<name>hive.metastore.event.db.notification.api.auth</name>
<value>false</value>
</property>
</configuration>

8. 在node1上mysql数据库中创建数据库实例hive

XML 复制代码
[root@node1 ~]# mysql -uroot -p123456
mysql> create database hive;
Query OK, 1 row affected (0.00 sec)
mysql> use hive
Database changed
mysql> show tables;
Empty set (0.00 sec) # 什么表都没有,根本没有hive的元数据
mysql> quit;
Bye

9. 在node2上初始化hive的元数据到mysql数据库的hive实例下

bash 复制代码
[root@node2 conf]# schematool -initSchema -dbType mysql -verbose

10. 在node1的mysql数据库中查看hive实例下表,会发现多了74张表。

直连数据库式启动和使用

1. 启动hadoop集群

在node1上执行startha.sh(脚本参考Yarn资源调度器-CSDN博客),如果有namenode没有启动起来,只需要在对应的节点上执行命令:hdfs --daemon start namenode

2. 在node2上启动hive:

bash 复制代码
[root@node2 ~]# hive

3. 使用hive,创建表:

bash 复制代码
hive> show databases;
OK
default
Time taken: 0.923 seconds, Fetched: 1 row(s)
hive> show tables;
OK
Time taken: 0.081 seconds
hive> create table tb_test(id int);
OK
Time taken: 1.001 seconds
hive> show tables;
OK
tb_test
Time taken: 0.087 seconds, Fetched: 1 row(s)
hive> create table test(id int,age int);
OK
Time taken: 0.123 seconds
hive> show tables;
OK
tb_test
test

4. 访问active的namenode,查看文件列表

http://node2:9870/explorer.html#/user/hive/warehouse

5. 向test表插入数据

bash 复制代码
hive> insert into test values(1,1);

6.查看Yarn的web页面:

http://node3:8088/cluster

当任务执行完之后,再查看 HDFS 的文件列表页面,在test目录下多出文件。

7. 在node1中连接上mysql查看表中的数据

bash 复制代码
[root@node1 ~]# mysql -uroot -p123456
mysql> use hive;
Database changed
mysql> show tables;
+-------------------------------+
| Tables_in_hive |
+-------------------------------+
......
| COLUMNS_V2 | 保存表中列的数据
......
| DBS | 保存的是数据库实例
......
| TBLS | 保存的表数据
......

8. 在MySQL中查看刚刚在hive上创建的数据库实例,表数据,列数据

远程服务模式安装

思考: hive 是如何连接到 hdfs 的?
答案:通过环境变量。
规划: node3 为服务器端 node4 为客户端

具体安装配置步骤:

  1. 从 node2 上将 /opt/hive-3.1.2 拷贝到 node3 和 node4 上
bash 复制代码
[root@node2 ~]# scp -r /opt/hive-3.1.2/ node3:/opt
[root@node2 ~]# scp -r /opt/hive-3.1.2/ node4:/opt
  1. 配置 node3 上 hive 的环境变量:
bash 复制代码
[root@node3 ~]# vim /etc/profile
#在文件的最下位置添加如下内容
# hive环境变量配置
export HIVE_HOME=/opt/hive-3.1.2
export PATH=$PATH:$HIVE_HOME/bin

[root@node3 ~]# source /etc/profile

node4同理

3.修改node3上的hive_site.xml文件

bash 复制代码
[root@node3 conf]# vim $HIVE_HOME/conf/hive-site.xml
XML 复制代码
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- jdbc连接的URL设置 将hive改为hive_remote-->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://node1:3306/hive_remote?useSSL=false</value>
</property>
<!-- jdbc连接的Driver类设置-->
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<!-- 指定jdbc连接的username-->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<!-- 指定jdbc连接mysql的password -->
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
</property>
<!-- Hive默认在HDFS的工作目录 将hive改为hive_remote -->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive_remote/warehouse</value>
</property>
<!-- Hive元数据存储的验证 -->
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
<!-- 元数据存储授权 -->
<property>
<name>hive.metastore.event.db.notification.api.auth</name>
<value>false</value>
</property>
</configuration>

4.在node1的mysql中创建一个数据库实例:hive_remote

XML 复制代码
[root@node1 ~]# mysql -uroot -p123456
mysql> create database hive_remote;

5.在node3上初始化hive的元数据到mysql数据库的hive_remote实例下

XML 复制代码
[root@node3 conf]# schematool -initSchema -dbType mysql -verbose

6.在node1的mysql数据库中查看hive_remote实例下表,会发现多了74张表。到目前位置这个和直 连数据的方式是一样,hive的服务器和客户端都在node3上,没有启动Metastore或hiveserver2, 通过jdbc也无法访问。
7.在 node3 上查看被占用的端口号:

XML 复制代码
[root@node3 conf]# yum install -y net-tool
[root@node3 conf]# netstat -nlpt

经过观察发现 9083 端口没有被占用。

  1. 在node3上启动metastore服务
XML 复制代码
[root@node3 ~]# hive --service metastore

该命令为阻塞命令,如上所示执行命令后无法继续输入命令了。
9.复制一个 node3 连接的窗口

9083 端口便被 metastore 占用了。
10.如果在 9 步骤不需要窗口的命令被阻塞,也可以通过如下方式:

XML 复制代码
[root@node3 ~]# hive --service metastore &

11.修改node4上的hive-site.xml配置文件:

XML 复制代码
[root@node4 ~]#vim $HIVE_HOME/conf/hive-site.xml

文件中配置如下:

XML 复制代码
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- Hive默认在HDFS的工作目录 -->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive_remote/warehouse</value>
</property>
<!-- 指定hive服务器端连接地址 -->
<property>
<name>metastore.thrift.uris</name>
<value>thrift://node3:9083</value>
</property>
<!-- Hive元数据存储的验证 -->
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
<!-- 元数据存储授权 -->
<property>
<name>hive.metastore.event.db.notification.api.auth</name>
<value>false</value>
</property>
</configuration>

12.node4上hive客户端启动hive

远程服务器模式测试

1.在node4上hive客户端上创建表psn,并向该表添加一条数据

XML 复制代码
hive> create table psn(id int,age int);
hive> insert into psn values(1,18);

2.查看HDFS文件列表


3. 通过 hdfs 命令查看该文件下的内容:

XML 复制代码
[root@node3 ~]# hdfs dfs -cat /user/hive_remote/warehouse/psn/000000_0
118 #直接无法分辨出两个字段的值从哪里分割开的
[root@node3 ~]# hdfs dfs -get /user/hive_remote/warehouse/psn/000000_0
[root@node3 ~]# cat -A 000000_0
1^A18$

^A 它是 hive 的默认分隔符

相关推荐
無森~2 小时前
Hive概述
数据仓库·hive·hadoop
大鳥2 小时前
Hive on Spark SQL 性能优化权威指南
hive·sql·spark
無森~2 小时前
Hive输出表信息中文乱码解决方案
数据仓库·hive·hadoop
無森~2 小时前
Hadoop序列化与反序列化
大数据·hadoop·分布式
计算机毕业编程指导师3 小时前
【计算机毕设选题】基于Spark的拉勾网招聘数据分析系统源码,Python+Django全流程
大数据·hadoop·python·spark·django·招聘·拉勾网
Msshu1233 小时前
多功能快充诱骗芯片 XSP26支持与主板共用一个Type-C可取电可输出数据
hadoop·mongodb·nosql·memcache·tdengine
B站计算机毕业设计超人20 小时前
计算机毕业设计Python+百度千问大模型微博舆情分析预测 微博情感分析可视化 大数据毕业设计(源码+LW文档+PPT+讲解)
大数据·hive·hadoop·python·毕业设计·知识图谱·课程设计
王九思1 天前
大数据查询工具Hive介绍
大数据·hive·hadoop
王九思1 天前
Hive Hook 机制
数据仓库·hive·hadoop