一、课前准备
- 安装好对应版本的hadoop集群,并启动hadoop的HDFS以及YARN服务
- 安装了MySQL服务,并启动MySQL的服务
二、课堂主题
- hive安装部署
三、课堂目标
- 掌握hive的安装部署
四、知识要点
1. Hive的安装部署(10分钟)
注意hive就是一个构建数据仓库的工具,只需要在一台服务器上安装就可以了,不需要在多台服务器上安装。
此处以安装到node03为例;请大家保持统一
使用hadoop普通用户操作
1.1 先决条件
- 搭建好三节点Hadoop集群;
- node03上先安装好MySQL服务;
- 参考文档:《CentOS 7安装MySQL5.7版本》
1.2 准备安装包
-
下载hive安装包, 不要从官网下载
链接:https://pan.baidu.com/s/1P7OhqQiyMci4iEsBfNt4Tg
提取码:NIIT -
规划安装目录
- /kkb/install
-
上传安装包到node03服务器中的/kkb/soft路径下
1.3 解压
-
解压安装包到指定的规划目录/kkb/install
12[hadoop@node03 ~]$ cd /kkb/soft/[hadoop@node03 soft]$ tar -xzvf apache-hive-3.1.2-bin.tar.gz -C /kkb/install
1.4 修改配置文件
- 进入hive安装目录
1 |
[hadoop@node03 install]$ cd /kkb/install/ |
- 重新命名hive目录
1 |
[hadoop@node03 install]$ mv apache-hive-3.1.2-bin/ apache-hive-3.1.2 |
- 修改/kkb/install/conf目录下的hive-site.xml, 默认没有该文件, 需要手动创建
1 2 |
[hadoop@node03 install]$ cd /kkb/install/apache-hive-3.1.2/conf/ [hadoop@node03 conf]$ vim hive-site.xml |
- 进入编辑模式, 文件内容如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://node03:3306/metastore?useSSL=false</value> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>root</value> </property> <property> <name>hive.metastore.warehouse.dir</name> <value>/user/hive/warehouse</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>123456</value> </property> <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> <property> <name>hive.cli.print.current.db</name> <value>true</value> </property> <property> <name>hive.cli.print.header</name> <value>true</value> </property> <property> <name>hive.server2.thrift.bind.host</name> <value>node03</value> </property> <property> <name>hive.server2.thrift.port</name> <value>10000</value> </property> </configuration> |
- 修改日志配置文件hive-log4j.properties
- 创建hive日志存储目录
1 |
[hadoop@node03 conf]$ mkdir -p /kkb/install/apache-hive-3.1.2/logs/ |
- 重命名生成文件hive-log4j.properties
1 2 3 4 |
[hadoop@node03 conf]$ pwd /kkb/install/apache-hive-3.1.2/conf [hadoop@node03 conf]$ mv hive-log4j2.properties.template hive-log4j2.properties [hadoop@node03 conf]$ vim hive-log4j2.properties # 修改文件 |
- 修改此文件的hive.log.dir属性的值
1 2 |
#更改以下内容,设置我们的hive的日志文件存放的路径,便于排查问题 property.hive.log.dir=/kkb/install/apache-hive-3.1.2/logs/ |
1.5 拷贝mysql驱动包
- 上传mysql驱动包,如
mysql-connector-java-5.1.38.jar
到/kkb/soft
目录中 - 由于运行hive时,需要向mysql数据库中读写元数据,所以==需要将mysql的驱动包上传到hive的lib目录下==
1 2 |
[hadoop@node03 ~]$ cd /kkb/soft/ [hadoop@node03 soft]$ cp mysql-connector-java-5.1.38.jar /kkb/install/apache-hive-3.1.2/lib/ |
1.6 解决日志Jar包冲突
1 2 3 4 |
# 进入lib目录 [hadoop@node03 conf]$ cd /kkb/install/apache-hive-3.1.2/lib/ # 重新命名 或者直接删除 [hadoop@node03 lib]$ mv log4j-slf4j-impl-2.10.0.jar log4j-slf4j-impl-2.10.0.jar.bak |
1.6 配置Hive环境变量
- 切换到root用户下
1 2 |
[hadoop@node03 soft]$ su root Password: |
- 打开
/etc/profile
文件
1 |
[root@node03 soft]# vim /etc/profile |
- 末尾添加如下内容
1 2 |
export HIVE_HOME=/kkb/install/apache-hive-3.1.2 export PATH=$PATH:$HIVE_HOME/bin |
- 切换回hadoop用户,并source
1 2 |
[root@node03 soft]# su hadoop [hadoop@node03 soft]$ source /etc/profile |
1.7 初始化元数据库
- 新建一个node03连接, 登录MySQL
1 2 |
# 连接MySQL, 用户名root, 密码123456 [hadoop@node03 ~]$ mysql -uroot -p123456 |
- 创建hive元数据, 需要和hive-site.xml中配置的一致
1 2 3 |
-- 创建数据库, 数据库名为: metastore create database metastore; show databases; |
- 退出mysql
1 |
exit |
- 初始化元数据库
1 |
[hadoop@node03 ~]$ schematool -initSchema -dbType mysql -verbose |
看到schemaTool completed 表示初始化成功
1.7 验证安装
- ==hadoop集群已启动==
- ==mysql服务已启动==
- 在node03上任意目录启动hive cli命令行客户端
1 2 |
[hadoop@node03 ~]$ hive # 启动成功之后, 警告信息可以忽略 |
- 查看有哪些数据库
1 |
show databases; |
- 说明hive安装成功
- 退出cli
1 |
quit; |
1.8 通过beeline连接代理服务器hiveserver2 操作hive
后期课堂中主要使用这种方式操作hive
- node01修改hadoop的core-site.xml文件
1 2 |
[hadoop@node03 ~]$ cd /kkb/install/hadoop-3.1.4/etc/hadoop [hadoop@node03 hadoop]$ vim core-site.xml |
- 在core-site.xml中添加以下配置信息
- 配置信息
hadoop.proxyuser.hadoop.hosts
、hadoop.proxyuser.hadoop.groups
中的hadoop用户需要修改为自己的用户名
- 配置信息
1 2 3 4 5 6 7 8 |
<property> <name>hadoop.proxyuser.hadoop.hosts</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.hadoop.groups</name> <value>*</value> </property> |
- 将core-site.xml文件同步到node02和node03
1 2 3 |
scp /kkb/install/hadoop-3.1.4/etc/hadoop/core-site.xml node02:/kkb/install/hadoop-3.1.4/etc/hadoop/ scp /kkb/install/hadoop-3.1.4/etc/hadoop/core-site.xml node03:/kkb/install/hadoop-3.1.4/etc/hadoop/ |
- 启动hiveserver2
1 2 |
[hadoop@node03 hive]$ cd /kkb/install/hive/ [hadoop@node03 hive]$ bin/hiveserver2 # 启动警告信息可以忽略 |
- 新建node03连接, 连接hiveserver2
1 2 |
[hadoop@node03 hive]$ cd /kkb/install/hive/ [hadoop@node03 hive]$ bin/beeline --color=true |
- 通过jdbc方式连接hiveserver2, 输入用户名和密码
1 |
beeline> !connect jdbc:hive2://node03:10000 |
- 输入用户名: hadoop、密码: 123456
1 2 |
Enter username for jdbc:hive2://node03:10000: hadoop Enter password for jdbc:hive2://node03:10000: 123456 |
- 测试
1 |
0: jdbc:hive2://node03:10000> show databases; |
创建启停脚本
hive-services.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
#!/bin/bash HIVE_LOG_DIR=$HIVE_HOME/logs mkdir -p $HIVE_LOG_DIR #检查进程是否运行正常,参数1为进程名,参数2为进程端口 function check_process() { pid=$(ps -ef 2>/dev/null | grep -v grep | grep -i $1 | awk '{print $2}') ppid=$(netstat -nltp 2>/dev/null | grep $2 | awk '{print $7}' | cut -d '/' -f 1) echo $pid [[ "$pid" =~ "$ppid" ]] && [ "$ppid" ] && return 0 || return 1 } function hive_start() { metapid=$(check_process HiveMetastore 9083) cmd="nohup hive --service metastore >$HIVE_LOG_DIR/metastore.log 2>&1 &" cmd=$cmd" sleep 4; hdfs dfsadmin -safemode wait >/dev/null 2>&1" [ -z "$metapid" ] && eval $cmd || echo "Metastroe服务已启动" server2pid=$(check_process HiveServer2 10000) cmd="nohup hive --service hiveserver2 >$HIVE_LOG_DIR/hiveServer2.log 2>&1 &" [ -z "$server2pid" ] && eval $cmd || echo "HiveServer2服务已启动" } function hive_stop() { metapid=$(check_process HiveMetastore 9083) [ "$metapid" ] && kill $metapid || echo "Metastore服务未启动" server2pid=$(check_process HiveServer2 10000) [ "$server2pid" ] && kill $server2pid || echo "HiveServer2服务未启动" } case $1 in "start") hive_start ;; "stop") hive_stop ;; "restart") hive_stop sleep 2 hive_start ;; "status") check_process HiveMetastore 9083 >/dev/null && echo "Metastore服务运行正常" || echo "Metastore服务运行异常" check_process HiveServer2 10000 >/dev/null && echo "HiveServer2服务运行正常" || echo "HiveServer2服务运行异常" ;; *) echo Invalid Args! echo 'Usage: '$(basename $0)' start|stop|restart|status' ;; esac |
HiveServer2启动异常处理
一般hiverServer2的启动比较花时间,需等待5分钟左右才能启动,如果长时间还没有启动需要查看日志寻找失败原因:
异常1
1 |
Safe mode is ON. The reported blocks 3 needs additional 2 blocks to reach the threshold 0.9990 of total blocks 5. The number of live datanodes 2 has reached the minimum number 0. Safe mode will be turned off automatically once the thresholds have been reached. |
说明我们的损坏的文件比例超过了阈值, 这个阈值配置在hdfs中, 也就是说不允许任何一个块损坏掉. 如果我们配置成99%应该就不会触发safemode了.
由于系统断电,内存不足等原因导致dataNode丢失超过设置的丢失百分比,系统自动进入安全模式
解决办法
执行命令退出安全模式:
1 |
hadoop dfsadmin -safemode leave` |
执行健康检查,删除损坏掉的block
hdfs fsck / -delete
运行后如果出现下面提示,表示修复完毕
1 |
The filesystem under path '/' is HEALTHY |
如果没有修复则可以多执行一次
hdfs fsck
命令
异常2
1 |
java.lang.NoClassDefFoundError: org/apache/tez/dag/api/TezConfiguration |
Views: 73