打怪升级之小白的大数据之旅(六十一)
Hive旅程第二站:Hive安装
上次回顾
上一章我们学习了Hive的概念以及框架原理,本章节是对Hive的安装进行分享,因为它有些需要自己配置的点,所以我单独开了一个章节
Hive 安装
前期的准备:
- Hive是基于Hadoop,所以我们在Hadoop集群的基础上进行的,我们的环境如果跟着我Hadoop的操作一般是没有什么问题的。
- 为什么要安装Mysql?
- Hive内部的元数据是存储在
derby
中,我们可以将derby
理解为Hive内部自带的数据库 - 因为
derby
只支持一个客户端访问,所以当有两个客户端访问时会报错 - 因为Mysql支持多客户端连接,so,我们需要将元数据改放到Mysql中,
- Hive内部的元数据是存储在
Mysql安装
第一步: 检查当前系统是否安装过Mysql(因为我们的Linux默认都安装了mysql,为了保证版本统一,就需要删除它)
# 查看系统总是否安装了mysql
rpm -qa|grep mariadb
# 卸载命令
sudo rpm -e --nodeps mariadb-libs
第二步: 将MySQL安装包拷贝到/opt/software目录下并进行解压
- 通过xftp 或者rz -E命令将下载的mysql安装包放到指定目录
- 下面的是我们需要安装的Mysql包和JDBC驱动jar包
- 1-5我们需要按顺序进行安装,它们分别是mysql的相关依赖和客户端与服务器
- 最后一个jar包是我们下面Hive配置元数据时需要使用的
第三步: 对解压的Mysql安装包内容进行顺序安装
sudo rpm -ivh 01_mysql-community-common-5.7.29-1.el7.x86_64.rpm
sudo rpm -ivh 02_mysql-community-libs-5.7.29-1.el7.x86_64.rpm
sudo rpm -ivh 03_mysql-community-libs-compat-5.7.29-1.el7.x86_64.rpm
sudo rpm -ivh 04_mysql-community-client-5.7.29-1.el7.x86_64.rpm
sudo rpm -ivh 05_mysql-community-server-5.7.29-1.el7.x86_64.rpm
第四步: 如果Linux是最小安装,在安装mysql_server时可能会报错
sudo rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm
警告:mysql-community-server-5.7.28-1.el7.x86_64.rpm: 头V3 DSA/SHA1 Signature, 密钥 ID 5072e1f5: NOKEY
错误:依赖检测失败:
libaio.so.1()(64bit) 被 mysql-community-server-5.7.28-1.el7.x86_64 需要
libaio.so.1(LIBAIO_0.1)(64bit) 被 mysql-community-server-5.7.28-1.el7.x86_64 需要
libaio.so.1(LIBAIO_0.4)(64bit) 被 mysql-community-server-5.7.28-1.el7.x86_64 需要
# 这是因为缺少了一个依赖,我们安装下面的依赖就好了
sudo yum install -y libaio
第五步: 删除mysql存储的不必要文件,大家一定注意 rm -rf 后面的路径不要遗漏后面的 ./*
cd /var/lib/mysql
sudo rm -rf ./*
第六步: 初始化数据库
sudo mysqld --initialize --user=mysql
第七步: 查看临时生成的密码
-
因为刚刚创建的myql,它的密码是随机生成的,所以我们要想重置密码就必须登录进去
# 查看临时密码 sudo cat /var/log/mysqld.log
第八步: 启动Mysql服务
- 有了临时密码,我们就需要启动服务并且登录了
sudo systemctl start mysqld
第九步: 登录Mysql数据库
mysql -uroot -p
Enter password: 输入临时生成的密码
第十步: 修改Mysql密码
set password = password("新密码");
第十一步: 修改ip连接权限
- 为了可以让任何服务器都可以连接到这台服务器中的mysql,所以我们需要修改Ip允许的权限,当然了,我们工作中是不能这么做,最好添加指定的Ip到白名单中
update mysql.user set host='%' where user='root';
Hive安装
1)Hive官网地址
http://hive.apache.org/
2)文档查看地址
https://cwiki.apache.org/confluence/display/Hive/GettingStarted
3)下载地址
http://archive.apache.org/dist/hive/
4)github地址
https://github.com/apache/hive
第一步:根据上面的下载地址下载好hive安装包后,将安装包放到我们服务器中,我还是放到我的专用安装包文件夹software中了
第二步:解压我们的安装包
tar -zxvf /opt/software/apache-hive-3.1.2-bin.tar.gz -C /opt/module/
第三步: 修改hive名称,我觉得它有点长,所以我改个名字,大家随意
mv /opt/module/apache-hive-3.1.2-bin/ /opt/module/hive
第四步: 惯例,我们需要添加Hive到环境变量中,添加好后记得更新source一下
# 编辑环境变量文件
sudo vim /etc/profile.d/my_env.sh
# 添加如下内容
#HIVE_HOME
export HIVE_HOME=/opt/module/hive
export PATH=$PATH:$HIVE_HOME/bin
# 更新
source vim /etc/profile.d/my_env.sh
第五步: 解决日志jar包冲突,后面我会修改日志文件的位置,所以提前把这个改一下
mv $HIVE_HOME/lib/log4j-slf4j-impl-2.10.0.jar $HIVE_HOME/lib/log4j-slf4j-impl-2.10.0.bak
Hive的自定义配置
上面我们已经安装完成Hive了,直接使用hive即可成功运行,但是我们还需改一些配置
- 首先我们不能只使用一个客户端连接hive,所以我们需要将derby
数据库换为mysql
Hive元数据配置到Mysql
第一步: 将我们前面下载的MySQL的JDBC驱动拷贝到Hive的lib目录下
cp /opt/software/mysql-connector-java-5.1.37.jar $HIVE_HOME/lib
第二步:配置Metastore到MySql
-
在$HIVE_HOME/conf目录下新建hive-site.xml文件,因为默认配置是hive-default.xml,就和Hadoop一样,我们使用xx-site.xml即可让框架优先读取我们的配置文件
# 创建编辑hive配置文件 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://hadoop102:3306/metastore?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连接的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> <!-- 指定hiveserver2连接的端口号 --> <property> <name>hive.server2.thrift.port</name> <value>10000</value> </property> <!-- 指定hiveserver2连接的host --> <property> <name>hive.server2.thrift.bind.host</name> <value>hadoop102</value> </property> <!-- 指定存储元数据要连接的地址 --> <property> <name>hive.metastore.uris</name> <value>thrift://hadoop102:9083</value> </property> <!-- 元数据存储授权 --> <property> <name>hive.metastore.event.db.notification.api.auth</name> <value>false</value> </property> <!-- Hive元数据存储版本的验证 --> <property> <name>hive.metastore.schema.verification</name> <value>false</value> </property> <!-- hiveserver2的高可用参数,开启此参数可以提高hiveserver2的启动速度 --> <property> <name>hive.server2.active.passive.ha.enable</name> <value>true</value> </property> </configuration>
启动Hive
元数据配置完毕了,我们需要启动Hive并将元数据与Hive建立连接
第一步: 初始化元数据库
- 我首先要登录到Mysql中,并且创建一个和配置文件中定义的元数据名称相同的元数据库,然后对创建好的Hive元数据进行初始化
# 登录mysql
mysql -uroot -p123456
# 创建Hive元数据库
create database metastore;
quit;
# 初始化Hive元数据库
schematool -initSchema -dbType mysql -verbose
第二步: 启动metastore和hiveserver2
- 注意,因为我们在配置文件中修改了元数据库和JDBC的位置,所以我们需要启动元数据库metastore和JDBC的服务才可以连接上hive
- 还有,它们启动都会占用端口,所以它们每一个都需要重新开一个shell窗口
# 注意: 启动后窗口不能再操作,需打开一个新的shell窗口做别的操作 hive --service metastore # 注意: 启动后窗口不能再操作,需打开一个新的shell窗口做别的操作 hive --service hiveserver2
第三步: 使用JDBC与CLI进行访问测试
- CLI访问
# 启动命令 hive
下面的界面表示启动成功
- JDBC访问
#启动命令 /beeline -u jdbc:hive2://hadoop102:10000 -n 我们安装hive的用户名称
下面界面表示成功:
Hive其他配置
显示当前库与表头
我们运行hive时看不到我们当前数据库名称,并且我们查看数据的时候也不会显示表头,所以我们可以在hive-site.xml中添加如下配置,方便我们在命令行查看
# 在hive-site.xml中加入如下两个配置:
<property>
<name>hive.cli.print.header</name>
<value>true</value>
<description>Whether to print the names of the columns in query output.</description>
</property>
<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
<description>Whether to include the current database in the Hive prompt.</description>
</property>
日志位置设置
- hive的日志默认保存在 tmp文件夹下,我们知道tmp是临时文件,为了便于日后回看日志来排除异常等操作,我们需要修改日志文件的保存位置
- 在hive中,配置文件都为我们定义了一个模板,为了避免操作,所以我们需要将模板进行备份再修改相关配置
# 修改hive的log存放日志到/opt/module/hive/logs
mv /tmp/配置hive的用户名/hive.log /opt/module/hive/logs
# 复制$HIVE_HOME/conf/hive-log4j.properties.template文件名称为
hive-log4j.properties.bak
cp hive-log4j.properties.template hive-log4j.properties.template.bak
# 更改我们需要修改配置文件的名称
mv hive-log4j.properties.template hive-log4j.properties
# 修改log存储位置
vim $HIVE_HOME/conf/hive-log4j.properties
# 修改内容如下
property.hive.log.dir=/opt/module/hive/logs
Hive启动jvm堆内存设置
- 新版本的hive启动的时候,默认申请的jvm堆内存大小为256M,jvm堆内存申请的太小,导致后期开启本地模式,
- 执行复杂的sql时经常会报错:java.lang.OutOfMemoryError: Java heap space,因此最好提前调整一下HADOOP_HEAPSIZE这个参数
-
修改$HIVE_HOME/conf下的hive-env.sh.template为hive-env.sh
-
将hive-env.sh其中的参数 export HADOOP_HEAPSIZE=1024的注释放开
-
重启 hive
-
Hive一键启动脚本
- hive的安装已经完成了,如果我们要使用server2进行操作,那么我们还需要分别开启metastore和server2两个服务,这时我们可以将该服务添加到后台启动岂不美哉~
- 就如同zookeeper和hadoop一样,为了便于我们一键启动、停止、监控,于是写了一个一键启动hive的脚本,大家记得放到hive中的bin目录下,因为配置了环境变量,所以可以在任何地方进行启动
# 创建一键启动脚本
vim /$HIVE_HOME/bin/myHiveServer
# 编写内容如下:
#!/bin/bash
HIVE_LOG_DIR=$HIVE_HOME/logs
if [ ! -d $HIVE_LOG_DIR ]
then
mkdir -p $HIVE_LOG_DIR
fi
#检查进程是否运行正常,参数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
总结
- 我来对整个hive的安装与配置进行总结一下
- hive需要更换元数据库,这个我在博客中讲过了,所以我们需要下载安装mysql的数据库
- 接下来就是下载安装hive
- 安装好hive后,将其添加进环境变量中
- 对myql中的元数据库进行创建和初始化
- 修改一下日志保存位置,jvm堆内存位置
- 数据库头这个大家根据需要进行配置
- 好了,hive的安装与配置就是这些,Mysql的安装包有需要的可以私信我,或者大家根据安装包的名字自行官网下载哈