打怪升级之小白的大数据之旅(六十一)<Hive旅程第二站:Hive安装>

Posted GaryLea

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了打怪升级之小白的大数据之旅(六十一)<Hive旅程第二站:Hive安装>相关的知识,希望对你有一定的参考价值。

打怪升级之小白的大数据之旅(六十一)

Hive旅程第二站:Hive安装

上次回顾

上一章我们学习了Hive的概念以及框架原理,本章节是对Hive的安装进行分享,因为它有些需要自己配置的点,所以我单独开了一个章节

Hive 安装

前期的准备:

  • Hive是基于Hadoop,所以我们在Hadoop集群的基础上进行的,我们的环境如果跟着我Hadoop的操作一般是没有什么问题的。
  • 为什么要安装mysql
    • Hive内部的元数据是存储在 derby中,我们可以将derby理解为Hive内部自带的数据库
    • 因为derby 只支持一个客户端访问,所以当有两个客户端访问时会报错
    • 因为Mysql支持多客户端连接,so,我们需要将元数据改放到Mysql中,

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的安装包有需要的可以私信我,或者大家根据安装包的名字自行官网下载哈

以上是关于打怪升级之小白的大数据之旅(六十一)<Hive旅程第二站:Hive安装>的主要内容,如果未能解决你的问题,请参考以下文章

打怪升级之小白的大数据之旅(六十)<Hive旅程中的始发站>

打怪升级之小白的大数据之旅(六十)<Hive旅程中的始发站>

打怪升级之小白的大数据之旅(六十二)<Hive旅程第三站:Hive数据类型>

打怪升级之小白的大数据之旅(六十二)<Hive旅程第三站:Hive数据类型>

打怪升级之小白的大数据之旅(六十九)<Hive旅程第十站:Hive的优化>

打怪升级之小白的大数据之旅(六十九)<Hive旅程第十站:Hive的优化>