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>