Hive下载与安装

Hive使用前置条件:需要配置Hadoop高可用集群 Yarn资源调度器-CSDN博客

三种安装方式区别

Hivemetastore (元数据存储)的三种模式:

a)内嵌Derby模式

b)直连数据库模式

c)远程服务器模式

内嵌Derby模式

Hive下载与安装

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

直连数据库模式(mysql

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

Hive下载与安装远程服务模式

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

Hive下载与安装

官方文档介绍

下载地址                                                                                 

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

2. 下载地址

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

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

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

3. 文档查看地址

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

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

Metadata

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

Hive下载与安装

MySQL安装

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

Hive下载与安装

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

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

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

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

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

[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的开发头文件和库

[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

yum install -y net-tools libaio

5. 安装mysql

rpm -ivh mysql-community-*

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

[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
character_set_server=utf8

7. 初始化数据库

[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
,后面就是随机密码
Hive下载与安装

9. 启动服务:systemctl start mysqld

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

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

11. 修改默认密码

mysql> set password for 'root'@'localhost'=password('123456');

12. 查看编码方式:

mysql> show variables like '%character%';

13. root设置远程登录权限

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/目录下面

[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

[root@node2 apps]# mv /opt/apache-hive-3.1.2-bin/ /opt/hive-3.1.2

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

[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包冲突

[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. 上传MySQLJDBC驱动到Hivelib目录下

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

lib
目录下
[root@node2 lib]# pwd
/opt/hive-3.1.2/lib

7. 配置MetastoreMySql

  • 修改hive-site.xml
[root@node2 apps]# vim $HIVE_HOME/conf/hive-site.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. node1mysql数据库中创建数据库实例hive

[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实例下

[root@node2 conf]# schematool -initSchema -dbType mysql -verbose

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

直连数据库式启动和使用

1. 启动hadoop集群

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

2. node2上启动hive

[root@node2 ~]# hive

3. 使用hive,创建表:

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. 访问activenamenode,查看文件列表

http://node2:9870/explorer.html#/user/hive/warehouse
Hive下载与安装

5. test表插入数据

hive> insert into test values(1,1);

6.查看Yarnweb页面:

http://node3:8088/cluster
Hive下载与安装
当任务执行完之后,再查看
HDFS
的文件列表页面,在test目录下多出文件。
Hive下载与安装

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

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

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

Hive下载与安装

远程服务模式安装

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

具体安装配置步骤:

1.

node2
上将
/opt/hive-3.1.2
拷贝到
node3

node4
[root@node2 ~]# scp -r /opt/hive-3.1.2/ node3:/opt
[root@node2 ~]# scp -r /opt/hive-3.1.2/ node4:/opt
2.
配置
node3

hive
的环境变量:
[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文件

[root@node3 conf]# vim $HIVE_HOME/conf/hive-site.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.node1mysql中创建一个数据库实例:hive_remote

[root@node1 ~]# mysql -uroot -p123456
mysql> create database hive_remote;

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

[root@node3 conf]# schematool -initSchema -dbType mysql -verbose

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

7.在
node3
上查看被占用的端口号:
[root@node3 conf]# yum install -y net-tool
[root@node3 conf]# netstat -nlpt
经过观察发现
9083
端口没有被占用。

8. node3上启动metastore服务

[root@node3 ~]# hive --service metastore
该命令为阻塞命令,如上所示执行命令后无法继续输入命令了。
9.复制一个
node3
连接的窗口
Hive下载与安装
9083
端口便被
metastore
占用了。
10.如果在
9
步骤不需要窗口的命令被阻塞,也可以通过如下方式:
[root@node3 ~]# hive --service metastore &

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

[root@node4 ~]#vim $HIVE_HOME/conf/hive-site.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.node4hive客户端启动hive

远程服务器模式测试

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

hive> create table psn(id int,age int);
hive> insert into psn values(1,18);

2.查看HDFS文件列表

Hive下载与安装

3.
通过
hdfs
命令查看该文件下的内容:
[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
的默认分隔符
© 版权声明

相关文章