1、Hive基本概念
1.1 什么是Hive
-
hive简介
Hive:由 Facebook 开源用于解决海量结构化日志的数据统计工具。
Hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并 提供类 SQL 查询功能。
-
Hive的本质
Hive的本质,是将HQL转化成MapReduce程序
- Hive处理的数据存储在HDFS上
- Hive分析数据底层的实现是MapReduce
- 执行程序运行在Yarn上
1.2 Hive的优缺点
- 优点
- 操作接口采用类Sql语法,提供快速开发的能力
- 避免了去写MapReduce,减少开发人员学习成本
- Hive的执行延迟比较高,所有Hive常用于数据分析,对实时性要求不高的场合
- Hive的优势在于处理大数据,对于处理小数据没有优势
- Hive支持用户自定义函数
- 缺点
- Hive 的 HQL 表达能力有限
- 迭代式算法无法表达
- 数据挖掘方面不擅长,由于 MapReduce 数据处理流程的限制,效率更高的算法却无法实现
- Hive 的效率比较低
- Hive 自动生成的 MapReduce 作业,通常情况下不够智能化
- Hive 调优比较困难,粒度较粗
- Hive 的 HQL 表达能力有限
1.3 Hive架构原理
Hive 通过给用户提供的一系列交互接口,接收到用户的指令(SQL),使用自己的 Driver, 结合元数据(MetaStore),将这些指令翻译成 MapReduce,提交到 Hadoop 中执行,最后,将 执行返回的结果输出到用户交互接口。
-
Client:用户接口
CLI(command-line interface)、JDBC/ODBC(jdbc 访问 hive)、WEBUI(浏览器访问 hive)
-
MetaStore:元数据
元数据包括:表名、表所属的数据库(默认是defualt)、表的拥有者、列/分区字段、表的类型(是否是外部类)、表的数据所在目录等。
- 默认存储在自带的 derby 数据库中,推荐使用 MySQL 存储 Metastore
-
MapReduce:hadoop的组件
-
Driver:驱动器
-
解析器(SQL Parser)
将sql字符串转换成抽象语法树AST,对AST进行语法分析:判断表是否存在、字段是否存在、sql语义是否有误...
-
编译器(Physical Plan)
将AST编译生成逻辑执行计划
-
优化器(Query Optimizer)
对逻辑执行计划进行优化
-
执行器(Execution)
把逻辑执行计划转换成可以运行的物理计划,即MR/Spark
-
2、Hive安装
2.1 Hive安装部署
-
解压软件到/opt/software目录下面
tar -zxvf xxx -C /opt/software
-
添加环境变量
# HIVE_HOME export HIVE_HOME=/opt/software/hive-3.1.2 export PATH=$PATH:$HIVE_HOME/bin
-
解决日志jar包冲突
mv $HIVE_HOME/lib/log4j-slf4j-impl2.10.0.jar $HIVE_HOME/lib/log4j-slf4j-impl-2.10.0.bak
-
初始化元数据库(元数据库默认为 derby)
schematool -dbType derby -initSchema
Hive 默认使用的元数据库为 derby,开启 Hive 之后就会占用元数据库,且不与其他客户端共享数据,所以需要将 Hive 的元数据地址改为 MySQL
-
检测当前系统是否安装过Mysql
rpm -qa|grep mariadb
-
卸载Mysql
sudo rpm -e --nodeps mariadb-libs
-
安装mysql
-
安装Mysql
参考:VMware workstation16 中Centos7下MySQL8.0安装过程+Navicat远程连接 - ld_nil - 博客园 (cnblogs.com)
-
下载及安装源
wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm sudo yum install mysql80-community-release-el7-3.noarch.rpm
- /etc/yum.repos.d/mysql-community.repo中的enabled值为1,为安装,enabled值为0,为不安装
-
安装mysql程序
sudo yum -y install deltarpm # 安装依赖否则报错 sudo yum install mysql-community-server
-
修改mysql服务器为开机启动
systemctl start mysqld # 启动mysql服务 systemctl enable mysqld systemctl daemon-reload # 设置mysql服务开机启动 systemctl status mysqld # 查看mysql服务状态
-
查看mysql初始登录密码
sudo grep "temporary" /var/log/mysqld.log
-
修改密码
参考:
1、MySQL的validate_password插件/组件总结 - 潇湘隐者 - 博客园 (cnblogs.com)
[1] mysql -uroot -p<获取到的初始密码>; [2] alter user user() identified by "EgxSeR!sF7xx"; [3] SHOW VARIABLES LIKE 'validate_password%'; [4] set global validate_password.check_user_name=OFF; [5] set global validate_password.length=1; [6] set global validate_password_length=1; [7] set global validate_password.policy=0; [9] set global validate_password_policy=0; [10] alter user user() identified by "root"; [11] 完成设置
-
远程登录设置
-
mysql -uroot -proot
-
use mysql
-
select host,user from user; -- 查看root用户的host属性
-
root用户的host默认为localhost,需要改为%(上图是修改过的),即可允许远程登录数据库
[1] update user set host='%' where user='root';
[2] flush privileges;
-
-
-
2.2 Hive元数据配置到MySQL
2.2.1 拷贝JDBC驱动
将 MySQL 的 JDBC 驱动拷贝到 Hive 的 lib 目录下
wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.26.tar.gz
2.2.2 配置 Metastore 到 MySQL
-
在$HIVE_HOME/conf 目录下新建 hive-site.xml 文件
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://pc001:3306/metastore?useSSL=false</value> </property> <