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

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.rpmsudo rpm -ivh 02_mysql-community-libs-5.7.29-1.el7.x86_64.rpmsudo rpm -ivh 03_mysql-community-libs-compat-5.7.29-1.el7.x86_64.rpmsudo rpm -ivh 04_mysql-community-client-5.7.29-1.el7.x86_64.rpmsudo 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 -pEnter 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 ]
thenmkdir -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_stopsleep 2hive_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安装>相关推荐

  1. 打怪升级之小白的大数据之旅(六十七)<Hive旅程第八站:Hive的函数>

    打怪升级之小白的大数据之旅(六十七) Hive旅程第八站:Hive的函数 上次回顾 上一章,我们学习了如何对数据进行拆分–分区表与分桶表,使用分区表与分桶表,可以加快我们的查询效率..本章节是Hive ...

  2. 打怪升级之小白的大数据之旅(三十一)<JavaSE总结>

    打怪升级之小白的大数据之旅(三十) JavaSE总结 引言 Java这只小怪物我们已经练级差不多了,明天我们将进入新的旅程了,所以,我要对前面的整个JavaSE知识点进行总结,就像积攒够了经验升级一样 ...

  3. 打怪升级之小白的大数据之旅(四十一)<大数据与Hadoop概述>

    打怪升级之小白的大数据之旅(四十) Hadoop概述 上次回顾 好了,经过了java,mysql,jdbc,maven以及Linux和Shell的洗礼,我们终于开始正式进入大数据阶段的知识了,首先我会 ...

  4. 打怪升级之小白的大数据之旅(七十四)<初识Kafka>

    打怪升级之小白的大数据之旅(七十四) 初识Kafka 引言 学完Flume之后,接下来将为大家带来Kafka相关的知识点,在工作中,Kafka和Flume经常会搭配使用,那么Kafka究竟是什么呢?让 ...

  5. 打怪升级之小白的大数据之旅(四十六)<HDFS各模块的原理>

    打怪升级之小白的大数据之旅(四十六) HDFS各模块的原理 上次回顾 上一章,我们学习了HDFS的基本知识以及一些常用的操作,本章,我们对HDFS各模块的原理进行讲解,了解清楚这些,可以更好的辅助我们 ...

  6. 打怪升级之小白的大数据之旅(一)<Java基础语法之Java的身世之谜>

    打怪升级之小白的大数据之旅(一) Java基础语法之Java的身世之谜 打怪升级之小白的大数据之旅(一) 前言 一.学习大数据之前 二.Java基础 what? why? how? 总结 前言 做了几 ...

  7. 打怪升级之小白的大数据之旅(二十五)<Java面向对象进阶之IO流三 其他常见流>

    打怪升级之小白的大数据之旅(二十五) Java面向对象进阶之IO流三 其他常见流 上次回顾 上一章,我们学习了常用的字节流与字符流,本章,我会将其他的一些常见的流进行分享,IO流很多,我介绍不完,就挑 ...

  8. 打怪升级之小白的大数据之旅(五十九)<Hadoop优化方案>

    打怪升级之小白的大数据之旅(五十八) Hadoop优化方案与扩展知识点 上次回顾 上一章,我们对Hadoop的扩展知识HA进行了学习,本章是我们在使用Hadoop过程中的一些优化方案和其他几个需要了解 ...

  9. 打怪升级之小白的大数据之旅<Java基础知识点巩固习题>

    我整理一下最近学习的知识点相关的练习题及答案,希望可以帮到大家对所学的知识点进行查漏补缺(尽量先不看答案) Java基础语法相关练习集 Java基本程序相关题集 第一题 按步骤编写代码,效果如图所示: ...

最新文章

  1. java显式构造函数_C++中的显式构造函数
  2. flstudio插件找不到_Eclipse4.17安装spring插件的问题
  3. ConvLab介绍及使用
  4. oracle olap报告,10g部署oracle olap组件
  5. 使用文章来增加流量和排名
  6. tensorflow之预测手写字的概率
  7. numpy - np.append
  8. webpack前端工程打包入门级教程
  9. 偏光太阳镜测试图片软件,[专题]真假偏光太阳镜简单、实用辨别方法!
  10. A* 寻路算法[转载]
  11. UFS Host Controller工作流程
  12. js调用打印机打印网页字体总是缩小一号的解决方法
  13. 关于利用Klayout查看GDS需要导入工艺库的layer properties file(.lyp)
  14. 用户行为分析,就该这么做!
  15. 2023年最新zabbix监控Linux服务+ensp交换机
  16. Echarts中DataView显示Excel表格
  17. 燃料电池多点恒功率工作Cruise仿真模型
  18. Android Studio报错:No key with alias xxx found in keystore xxx 解决方法
  19. MYSQL关闭安全模式
  20. Dos攻击与DDos攻击原理与区别,怎么防护?

热门文章

  1. 戴尔sc系列存储阵列柜服务器,入门级SCv2000!戴尔扩大存储产品组合
  2. 【Wannafly挑战赛8】 D Alice和Bob赌糖果 【赌徒破产模型】
  3. 30万精英人才大迁徙:进军区块链,他们是赌徒还是信徒?
  4. 中国乳房X射线照相设备市场趋势报告、技术动态创新及市场预测
  5. 如何快速准备面试中的算法,获得 Offer?
  6. Coursera视频无法播放
  7. 信息检索——名词解释、简答题
  8. 将url网址转换成对象
  9. java塑形是什么意思,健身中该减脂还是该塑形,所谓“塑形”是个什么概念?...
  10. 国内云服务器,服务商优缺点分析