Hive安装部署

想要安装Hive,那首先要下载Hive的安装包,进入Hive的官网,找到download下载链接

图片描述

图片描述

发现目前hive主要有三大版本,Hive1.x、Hive2.x、Hive3.x

Hive1.x已经2年没有更新了,所以这个版本后续基本不会再维护了,不过这个版本已经迭代了很多年了,也是比较稳定的

Hive2.x最近一直在更新

Hive3.x上次是19年8月份更新的,也算是一直在维护

那我们到底选择哪个版本呢?注意了,在选择Hive版本的时候我们需要注意已有的Hadoop集群的版本。因为Hive会依赖于Hadoop,所以版本需要兼容才可以。

具体Hive和Hadoop的版本对应关系可以在download页面下的news列表里面看到。

https://hive.apache.org/downloads.html

图片描述

按照这里面说的hive2.x的需要在hadoop2.x版本中运行,hive3.x的需要在hadoop3.x版本中运行。

所以在这里我们最好是使用Hive3.x的版本

那我们就下载hive-3.1.2这个版本,如果想要下载其它历史版本的话这里面还找不到,不过可以使用apache的一个通用archive地址

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

在这里面就可以找到hive的所有历史版本了

图片描述

安装包百度网盘链接地址获取方式如下:

注意:为了保证下载链接地址一直可用,在这里通过微信公众号【大数据1024】获取,失效的话可以在公众号中随时动态更新。

图片描述

扫码关注之后回复hive即可获取下载地址。

下面开始安装Hive

Hive相当于Hadoop的客户端工具,安装时不一定非要放在集群的节点中,可以放在任意一个集群客户端节点上都可以

1:接着把下载好的hive安装包上传到bigdata04机器的/data/soft目录中,并且解压

[root@bigdata04 soft]# ll
-rw-r--r--.  1 root root 278813748 May  5 23:08 apache-hive-3.1.2-bin.tar.gz
[root@bigdata04 soft]# tar -zxvf apache-hive-3.1.2-bin.tar.gz

2:接着需要修改配置文件,进入hive的conf目录中,先对这两个模板文件重命名

[root@bigdata04 soft]# cd apache-hive-3.1.2-bin/conf/
[root@bigdata04 conf]# mv hive-env.sh.template  hive-env.sh
[root@bigdata04 conf]# mv hive-default.xml.template  hive-site.xml

3:然后再修改这两个文件的内容

注意:在hive-env.sh文件的末尾直接增加下面三行内容,【根据实际的路径配置】

[root@bigdata04 conf]# vi hive-env.sh 
.....
export JAVA_HOME=/data/soft/jdk1.8
export HIVE_HOME=/data/soft/apache-hive-3.1.2-bin
export HADOOP_HOME=/data/soft/hadoop-3.2.0

注意:在hive-site.xml文件中根据下面property中的name属性的值修改对应value的值,这些属性默认里面都是有的,所以都是修改对应的value的值即可

由于这里面需要指定Metastore的地址,Metastore我们使用Mysql,所以需要大家提前安装好Mysql,我这里使用的是Mysql8.0.16版本,Mysql安装包会提供给大家,建议大家直接在自己的windows机器中安装Mysql即可。

如果对MySQL8.x的安装部署不太熟悉的话,请参考下面的安装部署步骤,以及如何开启MySQL8的远程访问权限。

图片描述

我这里安装的Mysql的用户名是root、密码是admin,在下面的配置中会使用到这些信息,大家可以根据自己实际的用户名和密码修改这里面的value的值

[root@bigdata04 conf]# vi hive-site.xml
<property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://192.168.182.1:3306/hive?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>admin</value>
</property>
<property>
    <name>hive.querylog.location</name>
    <value>/data/hive_repo/querylog</value>
</property>
<property>
    <name>hive.exec.local.scratchdir</name>
    <value>/data/hive_repo/scratchdir</value>
</property>
<property>
    <name>hive.downloaded.resources.dir</name>
    <value>/data/hive_repo/resources</value>
</property>

4:接下来需要把Mysql的java驱动包上传到hive的lib目录下

注意mysql驱动包的版本,要和我们安装的版本保持一致:mysql-connector-java-8.0.16.jar

[root@bigdata04 lib]# ll 
........ 
-rw-r--r--. 1 root root 2293144 Mar 20  2019 mysql-connector-java-8.0.16.jar
.........

5:修改bigdata01中的core-site.xml,然后同步到集群中的另外两个节点上

如果不增加这个配置,使用beeline连接hive的时候会报错

[root@bigdata01 hadoop]# vi core-site.xml
    <property>
        <name>hadoop.proxyuser.root.hosts</name>
        <value>*</value>
    </property>
    <property>
        <name>hadoop.proxyuser.root.groups</name>
        <value>*</value>
</property>
[root@bigdata01 hadoop]# scp -rq etc/hadoop/core-site.xml  bigdata02:/data/soft/hadoop-3.2.0/etc/hadoop/
[root@bigdata01 hadoop]# scp -rq etc/hadoop/core-site.xml  bigdata03:/data/soft/hadoop-3.2.0/etc/hadoop/

注意:bigdata04这个客户端节点上不需要修改这个配置就可以了。

重启Hadoop集群

[root@bigdata01 hadoop-3.2.0]# sbin/stop-all.sh
[root@bigdata01 hadoop-3.2.0]# sbin/start-all.sh

6:最后建议修改一下bigdata04的hosts文件,否则这个节点上无法识别集群中节点的主机名,使用起来不方便,

顺便也修改一下bigdata01、bigdata02、bigdata03上的hosts,让这几台机器互相认识一下

[root@bigdata01 ~]# vi /etc/hosts
192.168.182.100 bigdata01
192.168.182.101 bigdata02
192.168.182.102 bigdata03
192.168.182.103 bigdata04
[root@bigdata02 ~]# vi /etc/hosts
192.168.182.100 bigdata01
192.168.182.101 bigdata02
192.168.182.102 bigdata03
192.168.182.103 bigdata04
[root@bigdata03 ~]# vi /etc/hosts
192.168.182.100 bigdata01
192.168.182.101 bigdata02
192.168.182.102 bigdata03
192.168.182.103 bigdata04
[root@bigdata04 ~]# vi /etc/hosts
192.168.182.100 bigdata01
192.168.182.101 bigdata02
192.168.182.102 bigdata03
192.168.182.103 bigdata04

7:初始化Hive的Metastore

[root@bigdata04 apache-hive-3.1.2-bin]# bin/schematool -dbType mysql -initSchema
Exception in thread "main" java.lang.RuntimeException: com.ctc.wstx.exc.WstxParsingException: Illegal character entity: expansion character (code 0x8
 at [row,col,system-id]: [3215,96,"file:/data/soft/apache-hive-3.1.2-bin/conf/hive-site.xml"]
        at org.apache.hadoop.conf.Configuration.loadResource(Configuration.java:2981)
        at org.apache.hadoop.conf.Configuration.loadResources(Configuration.java:2930)
        at org.apache.hadoop.conf.Configuration.getProps(Configuration.java:2805)
        at org.apache.hadoop.conf.Configuration.get(Configuration.java:1459)
        at org.apache.hadoop.hive.conf.HiveConf.getVar(HiveConf.java:4996)
        at org.apache.hadoop.hive.conf.HiveConf.getVar(HiveConf.java:5069)
        at org.apache.hadoop.hive.conf.HiveConf.initialize(HiveConf.java:5156)
        at org.apache.hadoop.hive.conf.HiveConf.<init>(HiveConf.java:5104)
        at org.apache.hive.beeline.HiveSchemaTool.<init>(HiveSchemaTool.java:96)
        at org.apache.hive.beeline.HiveSchemaTool.main(HiveSchemaTool.java:1473)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.hadoop.util.RunJar.run(RunJar.java:323)
        at org.apache.hadoop.util.RunJar.main(RunJar.java:236)
Caused by: com.ctc.wstx.exc.WstxParsingException: Illegal character entity: expansion character (code 0x8
 at [row,col,system-id]: [3215,96,"file:/data/soft/apache-hive-3.1.2-bin/conf/hive-site.xml"]
        at com.ctc.wstx.sr.StreamScanner.constructWfcException(StreamScanner.java:621)
        at com.ctc.wstx.sr.StreamScanner.throwParseError(StreamScanner.java:491)
        at com.ctc.wstx.sr.StreamScanner.reportIllegalChar(StreamScanner.java:2456)
        at com.ctc.wstx.sr.StreamScanner.validateChar(StreamScanner.java:2403)
        at com.ctc.wstx.sr.StreamScanner.resolveCharEnt(StreamScanner.java:2369)
        at com.ctc.wstx.sr.StreamScanner.fullyResolveEntity(StreamScanner.java:1515)
        at com.ctc.wstx.sr.BasicStreamReader.nextFromTree(BasicStreamReader.java:2828)
        at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1123)
        at org.apache.hadoop.conf.Configuration$Parser.parseNext(Configuration.java:3277)
        at org.apache.hadoop.conf.Configuration$Parser.parse(Configuration.java:3071)
        at org.apache.hadoop.conf.Configuration.loadResource(Configuration.java:2964)
        ... 15 more

但是执行之后发现报错了,提示hive-site.xml文件中的第3215行内容有问题

其实这个是原始配置文件本身就有的问题,最直接的就是把这一行直接删掉,删除之后的效果如下:其实就是把hive.txn.xlock.iow对应的description标签内容删掉,这样就可以了

  <property>
    <name>hive.txn.xlock.iow</name>
    <value>true</value>
    <description>
    </description>
  </property>

修改后再执行初始化命令,初始化Metastore,这个过程需要等一会

[root@bigdata04 apache-hive-3.1.2-bin]# bin/schematool -dbType mysql -initSchema
Metastore connection URL:        jdbc:mysql://192.168.182.1:3306/hive?serverTimezone=Asia/Shanghai
Metastore Connection Driver :    com.mysql.cj.jdbc.Driver
Metastore connection User:       root
Starting metastore schema initialization to 3.1.0
Initialization script hive-schema-3.1.0.mysql.sql
........

初始化成功以后,查看本地Mysql数据库,发现会自动创建hive数据库和一堆表,看到这些就说明Metastore初始化成功了

图片描述

这样Hive就安装好了,注意了,目前针对Hive不需要启动任何进程

接下来我们就可以开始使用了。

扩展:MySQL8.x安装部署

以下内容包含两块

  • 在windows中安装部署MySQL8.x
  • 开启MySQL的远程访问权限

安装文件在课程资料包中(git中):

mysql-8.0.16-winx64.zip

1:将MySQL安装包解压到指定文件夹下,我在这里默认安装到了这个目录下

D:\mysql8\mysql-8.0.16-winx64

图片描述

2:在windows里面配置环境变量(和配置JAVA_HOME的流程一样)

右键点击我的电脑->属性->高级系统设置-->环境变量

在系统变量中新增属性:MYSQL_HOME,值为:D:\mysql8\mysql-8.0.16-winx64

图片描述

然后修改PATH变量,把%MYSQL_HOME%\bin添加到PATH变量中

注意:最好将此变量移动到最前面,这样可以保证在使用mysql命令的时候优先使用此路径下的mysql。

图片描述

3:进入D:\mysql8\mysql-8.0.16-winx64目录,创建my.ini配置文件

图片描述

my.ini文件内容如下:

[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录
basedir=D:\mysql8\mysql-8.0.16-winx64
# 设置mysql数据库的数据的存放目录
datadir=D:\mysql8\Database
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=100
# 服务端使用的字符集默认为UTF8
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
secure_file_priv = ""
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8

4:通过cmd命令行,cd到mysql的bin目录中

C:\Users\lenovo>d:
D:\>cd D:\mysql8\mysql-8.0.16-winx64
D:\mysql8\mysql-8.0.16-winx64>cd bin
D:\mysql8\mysql-8.0.16-winx64\bin>

5:执行mysql的初始化命令

D:\mysql8\mysql-8.0.16-winx64\bin>mysqld --initialize --console
2020-11-12T07:29:28.608365Z 0 [System] [MY-013169] [Server] D:\mysql8\mysql-8.0.16-winx64\bin\mysqld.exe (mysqld 8.0.16) initializing of server in progress as process 4540
2020-11-12T07:29:28.613122Z 0 [Warning] [MY-013242] [Server] --character-set-server: 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous.
2020-11-12T07:29:32.894507Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: g>y.P9=q<86%
2020-11-12T07:29:34.260847Z 0 [System] [MY-013170] [Server] D:\mysql8\mysql-8.0.16-winx64\bin\mysqld.exe (mysqld 8.0.16) initializing of server has completed

注意:执行mysql的初始化命令之后,在下面的第三行日志中会显示mysql的临时密码,后面登录的时候会使用到。

在这个日志里面,第三行内容是这样的:

2020-11-12T07:29:32.894507Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: g>y.P9=q<86%

这行日志中root@localhost:后面的g>y.P9=q<86%就是临时密码。

6:安装mysql服务,添加到开机启动项中

D:\mysql8\mysql-8.0.16-winx64\bin>mysqld install mysql8
Service successfully installed.

注意:如果执行install之后,日志显示的不是successfully,而是Install/Remove of the Service Denied!,则需要以管理员身份打开cmd命令行,重新执行install命令即可

7:启动mysql

注意:第一次需要手工启动mysql,以后重启电脑之后mysql就可以自动启动了。

D:\mysql8\mysql-8.0.16-winx64\bin>net start mysql8
mysql8 服务正在启动 .
mysql8 服务已经启动成功。

8:接下来就可以登录mysql了

注意:密码区分大小写,默认生成的临时密码比较复杂,建议直接复制,手动输入容易出错。

D:\mysql8\mysql-8.0.16-winx64\bin>mysql -uroot -p
Enter password: ************
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.16
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>

9:修改mysql密码,建议将密码设置为admin,和课程中保持一致,不容易忘。

mysql> alter user root@localhost identified by 'admin';
Query OK, 0 rows affected (0.01 sec)
mysql> exit
Bye

10:重新使用新密码登录mysql

D:\mysql8\mysql-8.0.16-winx64\bin>mysql -uroot -p
Enter password: *****
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.16 MySQL Community Server - GPL
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>

11:开启mysql远程访问权限

默认情况下,此mysql数据库只能在本地访问,其它机器访问不了,所以需要开启远程访问权限。

mysql> select host,user from mysql.user;
+-----------+------------------+
| host      | user             |
+-----------+------------------+
| localhost | mysql.infoschema |
| localhost | mysql.session    |
| localhost | mysql.sys        |
| localhost | root             |
+-----------+------------------+
4 rows in set (0.00 sec)

在这里可看到root用户对应的host地址为localhost,所以此时想要使用root用户访问mysql,只能在本地访问。

想要开启远程访问,只需要修改user表中root用户对应的host字段的值即可,将host字段的值改为%,表示允许任意ip访问。

mysql> update mysql.user set host='%' where user = 'root';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

注意:flush privileges;这条命令一定要执行,它会刷新最新的权限信息。

此时再查询user表中的数据:

mysql> select host,user from mysql.user;
+-----------+------------------+
| host      | user             |
+-----------+------------------+
| %         | root             |
| localhost | mysql.infoschema |
| localhost | mysql.session    |
| localhost | mysql.sys        |
+-----------+------------------+
4 rows in set (0.00 sec)

12:验证mysql远程访问权限是否成功开启

可以在windows本地直接验证mysql远程访问权限是否成功开启

首先查询当前windows机器的ip信息【使用VMnet8网卡中的ip信息即可】

D:\mysql8\mysql-8.0.16-winx64\bin>ipconfig
Windows IP 配置
以太网适配器 VMware Network Adapter VMnet8:
   连接特定的 DNS 后缀 . . . . . . . :
   本地链接 IPv6 地址. . . . . . . . : fe80::f822:404f:e21c:262f%15
   IPv4 地址 . . . . . . . . . . . . : 192.168.182.1
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   默认网关. . . . . . . . . . . . . :

通过内网192开头的ip进行访问mysql,如果能正常访问,就说明mysql的远程访问权限成功开启了,到时候我们在bigdata04机器上就可以访问这个数据库。

D:\mysql8\mysql-8.0.16-winx64\bin>mysql -h 192.168.182.1 -uroot -p
Enter password: *****
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 14
Server version: 8.0.16 MySQL Community Server - GPL
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>

results matching ""

    No results matching ""