目录
一、引入
Hive简介
hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。hive数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,能将SQL语句转变成MapReduce任务来执行。Hive的优点是学习成本低,可以通过类似SQL语句实现快速MapReduce统计,使MapReduce变得更加简单,而不必开发专门的MapReduce应用程序。hive十分适合对数据仓库进行统计分析。
我们可以将hive想象成mysql,他就是对hdfs存储的数据进行增删改查的。
比如要计算user.txt中用户们出现了几次,我们来看看hive的实现过程:
为什么要使用Hive
为什么不直接使用Hadoop
- 人员学习成本高
- 项目要求周期短
- MapReduce实现复杂查询逻辑开发难度大
为什么使用Hive
- 操作接口采用SQL语法,提供快速开发能力
- 免去了写MapReduce,减少开发人员学习成本
- 功能扩展很方便
Hive的特点
- hive延迟高,适合高吞吐量,批量,海量数据处理
- 语法和SQL相似,学习成本低,避免去写复杂的MapReduce,缩短开发周期
- Hive支持自由的扩展集群的规模,一般不需要重启服务
- Hive支持自定义函数,用户可以根据自己的需求去定义函数
- 良好的容错性,节点出现问题,SQL仍然可以成功执行
Hive的发展历程
在Hive的发展历程中,不得不提的就是Stinger
Stinger不是一个项目或产品,而是一种提议,旨在将Hive性能提升100倍,包括Hive的改进和Tez项目两个部分。
Stinger分了几个阶段来做:Phase 1、2、3 ,Stringer.next;这几个阶段对Hive性能的提升是非常至关重要的
07/08 facebook
13/05 hive-0.11 Stinger Phase 1 加入了ORC/HiveServer2
13/10 hive-0.12 Stinger Phase 2 ORC improvement(对ORC做了些改善)
14/04 hive-0.13 Stinger Phase 3 Tez/Vectorized query engine(加入了Tez和支持向量化的查询)
14/11 hive-0.14 Stinger.next Phase 1 Cost-based optimizer(Cost-based简称CBO) (Cost-based的优化 很牛逼 算法各方面的优化 Spark现在也在做)
…… …….
当时有一句话:The Stinger Initiative making Apache Hive 100 times faster
二、Hive架构体系
Hive的体系结构主要分为以下几个部分:
- 用户接口
- 元数据存储
- 解释器、编译器、优化器、执行器
- Hadoop
- hive 的数据存储在 HDFS 中,大部分的查询由 MapReduce 完成(不包含 * 的查询,比如 select * from tbl 不会生成 MapReduce 任务)。
三、MySQL安装
为什么学Hive还要安装MySQL:
- metastore是hive元数据的集中存放地
- metastore默认使用内嵌的derby数据库作为存储引擎
- 但是你在哪路径下,执行hive指令,就在哪路径下生成metastore_db。建一套数据库文件,这样是极其不合适的,公司里每个人若不一样,则会显得非常混杂。导致员工之间无法公用交流。
- Derby引擎的缺点:一次只能打开一个会话
- 使用Mysql作为外置存储引擎,多用户同时访问
hive只是个工具,包括它的数据分析,依赖于mapreduce,它的数据管理,依赖于外部系统;
Hive提供了增强配置,可将数据库替换成mysql等关系型数据库,将存储数据独立出来在多个服务示例之间共享。
这也是为什么,在安装hive时,也需要配置mysql了。
安装准备
- 1、检查是否已经安装过mysql,执行命令
- rpm -qa | grep mysql
- 如果已存在,则执行删除命令 后边为Mysql目录
- rpm -e --nodeps mysql-xxxx
- 2、查询所有Mysql对应的文件夹
- whereis mysqlm
- find / -name mysql
- 删除相关目录或文件
- rm -rf /usr/bin/mysql /usr/include/mysql /data/mysql /data/mysql/mysql
- 验证是否删除完毕
- whereis mysqlm
- find / -name mysql
确保先执行以下命令:
systemctl stop firewalld #关闭防火墙
安装perl与net-tools依赖
1:yum install net-tools -y
2:yum install perl* -y
安装
上传安装包后创建目录放置解压包:mkdir /opt/mysql
解压:tar -xvf mysql-8.0.26-1.el7.x86_64.rpm-bundle.tar -C /opt/mysql
可以看到解压后的文件都是 rpm 文件,所以需要用到 rpm
包资源管理器相关的指令安装这些 rpm 的安装包
在安装执行 rpm 安装包之前先下载 openssl-devel
插件,因为 mysql 里面有些 rpm 的安装依赖于该插件。
yum install openssl-devel
安装完该插件之后,依次
执行以下命令安装这些 rpm 包
- rpm -ivh mysql-community-common-8.0.26-1.el7.x86_64.rpm
- rpm -ivh mysql-community-client-plugins-8.0.26-1.el7.x86_64.rpm
- rpm -e mariadb-libs --nodeps #解决下一行代码可能会出现的
依赖检测失败错误
- rpm -ivh mysql-community-libs-8.0.26-1.el7.x86_64.rpm
- rpm -ivh mysql-community-libs-compat-8.0.26-1.el7.x86_64.rpm
- rpm -ivh mysql-community-devel-8.0.26-1.el7.x86_64.rpm
- rpm -ivh mysql-community-client-8.0.26-1.el7.x86_64.rpm
- rpm -ivh mysql-community-server-8.0.26-1.el7.x86_64.rpm
在 Linux 中 MySQL 安装好了之后系统会自动的注册一个服务,服务名称叫做 mysqld,所以可以通过以下命令操作 MySQL:
- 启动 MySQL 服务:systemctl start mysqld
- 重启 MySQL 服务:systemctl restart mysqld
- 关闭 MySQL 服务:systemctl stop mysqld
启动服务:systemctl start mysqld
现在我们就可以登录MySQL了,但是登录MySQL需要密码对不对,不要慌,rpm 安装 MySQL 会自动生成一个随机密码,可在 /var/log/mysqld.log
这个文件中查找该密码(切记:如果之前你的机器上mysql没有删除干净,现在这个文件就是空的):
[Note] [MY-010454] [Server] A temporary password is generated for root@localhost: HONhF9oMf.ik
我这里生成的随机密码是HONhF9oMf.ik
登录:
mysql -u root -p
我们先修改密码(在当前登录成功页执行代码):
# 将密码复杂度校验调整简单类型
set global validate_password.policy=0; #分号不可少
# 设置密码最少位数限制为 4 位
set global validate_password.length=4; #分号不可少# 设置新密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456'; #分号不可少
修改 mysql 库下的 user 表中的 root 用户允许任意 ip 连接
update mysql.user set host='%' where user='root';
flush privileges; #重新加载权限表
卸载(了解)
卸载 MySQL 前需要先停止 MySQL
命令:systemctl stop mysqld
停止 MySQL 之后查询 MySQL 的安装文件:rpm -qa | grep -i mysql
卸载上述查询出来的所有的 MySQL 安装包
rpm -e mysql-community-client-plugins-8.0.26-1.el7.x86_64 --nodeps
rpm -e mysql-community-server-8.0.26-1.el7.x86_64 --nodeps
rpm -e mysql-community-common-8.0.26-1.el7.x86_64 --nodeps
rpm -e mysql-community-libs-8.0.26-1.el7.x86_64 --nodeps
rpm -e mysql-community-client-8.0.26-1.el7.x86_64 --nodeps
rpm -e mysql-community-libs-compat-8.0.26-1.el7.x86_64 --nodeps
删除MySQL的数据存放目录
rm -rf /var/lib/mysql/
删除MySQL的配置文件备份
rm -rf /etc/my.cnf.rpmsave
四、Hive集群搭建
准备工作
注:在Hive集群搭建之前需完成Hadoop-HDFS详解与HA,完全分布式集群搭建(细到令人发指的教程)
下载hive安装包:Index of /dist/hive
下载mysql连接java驱动:Download mysql-connector-java-5.1.23-bin.jar : mysql « m « Jar File Download
这里以apache-hive-3.1.2-bin.tar.gz 为例;
将压缩包上传至node001节点上
安装过程
解压安装包
解压:tar -zxvf apache-hive-3.1.2-bin.tar.gz -C /opt/
重命名:mv /opt/apache-hive-3.1.2-bin/ /opt/hive-3.1.2
配置环境变量
终端输入:vim /etc/profile
末行加入:
export HIVE_HOME=/opt/hive-3.1.2
export PATH=$PATH:$HIVE_HOME/bin:$HIVE_HOME/sbin
source /etc/profile
hive-env.sh
终端输入:vim /opt/hive-3.1.2/conf/hive-env.sh
末行加入:
export HADOOP_HOME=/opt/hadoop-3.1.2
export HIVE_CONF_DIR=/opt/hive-3.1.2/conf
export HIVE_AUX_JARS_PATH=/opt/hive-3.1.2/lib
hive-site.xml
终端输入:vim /opt/hive-3.1.2/conf/hive-site.xml
添加配置:
<configuration>
<!--数据库连接配置-->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://node001:3306/hive?createDatabaseIfNotExist=true</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>