1、Hive入门
1.1 什么是Hive
1、Hive简介
Hive是由Facebook开源,基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能。
2、Hive本质
Hive是一个Hadoop客户端,用于将HQL(Hive SQL)转换为MapReduce程序。
(1)Hive每张表的数据都储存在HDFS
(2)Hive分析数据底层的实现是MapReduce(也可配置为Spark或Tez)
(3)执行程序运行在Yarn上
1.2 Hive架构原理
1、用户接口:Client
CLI(command-line Interface)、JDBC/ODBC
说明:JDBC和ODBC的区别
(1)JDBC的移植性比ODBC好;(通常情况下,安装完ODBC驱动程序之后,还需要经过确认的配置才能够应用。而不同的配置在不相同数据库服务之间不能够通用。所以,安装一次就需要配置一次。JDBC只需要选取适当的JDBC数据库驱动程序,就不需要额外的配置。在安装过程中,JDBC数据库驱动程序会自己完成有关的配置)
(2)两者使用的的语言不同,JDBC在Java编程时使用,ODBC一般在C/C++编程时使用。
2、元数据:Metastore
元数据包括:数据库(默认是default)、表名、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等。
默认储存在自带的derby数据库中,由于derby数据库只支持单客户端访问,生产环境为了多人开发,推荐使用MySQL储存Metastore。
3、驱动器:Driver
(1)解析器(SQLParser):将SQL字符串转换成抽象语法树(AST)
(2)语法分析(Semantic Analyzer):将AST进一步划分成QueryBlock
(3)逻辑计划生成器(Logical Plan Gen):将语法树生成逻辑计划
(4)逻辑优化器(Logical Optimizer):对逻辑计划进行优化
(5)物理计划生成器(Physical Plan Gen):根据优化后的逻辑计划生成物理计划
(6)物理优化器(Physical Optimizer):对物理计划进行优化
(7)执行器(Execution):执行该计划,得到查询结果并返回给客户端
抽象语法树
逻辑计划与物理计划
4、Hadoop
使用HDFS进行储存,可以选择MapReduce/Tez/Spark进行计算。
2、Hive 安装
2.1 Hive安装地址
1、Hive官网地址
2、文档查看地址
https://cwiki.apache.org/confluence/display/Hive/GettingStarted
3、下载地址
http://archive.apache.org/dist/hive/
4、github地址
https://github.com/apache/hive
5、hive-3.1.3
链接:https://pan.baidu.com/s/1Hcnn593Y-yRuFfGxmPg_eA
提取码:zhm6
2.2 Hive 安装部署
2.2.1 安装Hive
1、把apache-hive-3.1.3-bin.tar.gz上传到Linux的/opt/software目录下
2、解压apache-hive-3.1.3-bin.tar.gz到/opt/module/目录下面
tar -zxvf /opt/software/apache-hive-3.1.3-bin.tar.gz -C /opt/module/
3、修改apache-hive-3.1.3-bin.tar.gz的名称为hive-3.1.3
mv /opt/module/apache-hive-3.1.3-bin/ /opt/module/hive-3.1.3
4、修改/etc/profile.d/my_env.sh,添加环境变量
sudo vim /etc/profile.d/my_env.sh
(1)添加内容
#HIVE_HOME export HIVE_HOME=/opt/module/hive export PATH=$PATH:$HIVE_HOME/bin
(2)source一下
source /etc/profile.d/my_env.sh
5、初始化元数据库(默认是derby数据库)
bin/schematool -dbType derby -initSchema
2.2.2 启动并使用Hive
1、启动Hive
$HIVE_HOME/bin/hive
2、使用Hive
hive> show databases; hive> show tables; hive> create table stu(id int, name string); hive> insert into stu values(1,"zhm"); hive> select * from stu;
观察HDFS路径/user/hive/warehouse/stu,体会Hive和Hadoop之间的关系。
Hive中的表在Hadoop中是目录;Hive的数据在Hadoop中是文件
3、在Xshell窗口中开启另一个窗口开启Hive,在/tmp/zhm目录下监控hive.log
tail -f hive.log
原因在于Hive默认使用的元数据库为derby。derby数据库的特点是同一时间只允许一个客户端访问。如果多个Hive客户端同时访问,就会报错。由于在企业开发中,都是多人协作开发,需要多客户端同时访问Hive,怎么解决呢?我们可以将Hive的元数据改为用MySQL存储,MySQL支持多客户端同时访问。
MySQL储存,MySQL支持多客户端同时访问
4、首先退出HIve客户端。然后在Hive的安装目录下将derby.log和metastore_db删除,顺便将HDFS上目录删除。
hive> quit; rm -rf derby.log metastore_db hadoop fs -rm -r /user
5、删除HDFS中/user/hive/warehouse/stu中数据
2.3 MySQL安装
2.3.1 安装MySQL
0、资料获取
链接:https://pan.baidu.com/s/1Hcnn593Y-yRuFfGxmPg_eA
提取码:zhm6
1、上传MySQL安装包以及MySQL驱动包
mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar mysql-connector-java-5.1.37.jar
2、解压MySQL安装包
mkdir mysql_lib tar -xf mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar -C mysql_lib/
3、卸载系统自带的mariadb
sudo rpm -qa | grep mariadb | xargs sudo rpm -e --nodeps
4、安装MySQL依赖
cd mysql_lib sudo rpm -ivh mysql-community-common-5.7.28-1.el7.x86_64.rpm sudo rpm -ivh mysql-community-libs-5.7.28-1.el7.x86_64.rpm sudo rpm -ivh mysql-community-libs-compat-5.7.28-1.el7.x86_64.rpm
5、安装MySQL-client
sudo rpm -ivh mysql-community-client-5.7.28-1.el7.x86_64.rpm
6、安装MySQL-server
sudo rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm
7、启动MySQL
sudo systemctl start mysqld
8、查看MySQL密码
sudo cat /var/log/mysqld.log | grep password
2.3.2 配置MySQL
配置主要是root用户+密码,在任何主机上都能登录MySQL数据库。
1、用刚刚查到的密码进入MySQL(如果报错,给密码加单引号)
mysql -uroot -p'password'
2、设置复杂密码(由于MySQL密码策略,此密码必须足够复杂)
mysql> set password=password("Qs23=zs32");
3、更改MySQL密码策略
mysql> set global validate_password_policy=0; mysql> set global validate_password_length=4;
4、设置简单好记的密码
mysql> set password=password("123456");
5、进入MySQL库
mysql> use mysql
6、查询user表
mysql> select user, host from user;
7、修改user表,把Host表内容修改为%
mysql> update user set host="%" where user="root";
8、刷新
mysql> flush privileges;
9、退出
mysql> quit;
2.3.3 卸载MySQL说明
若因为安装失败或者其他原因,MySQL需要卸载重装,可以参考一下内容
1、清空原有数据
(1)通过/etc/my.cnf查看MySQL数据的存储位置
(2)去往/var/lib/mysql路径需要root权限
2、卸载卸载MySQL相关包
(1)查看安装过的MySQL相关包
sudo rpm -qa | grep -i -E mysql
(2)一键卸载命令
rpm -qa | grep -i -E mysql\|mariadb | xargs -n1 sudo rpm -e --nodeps