Hive详细讲解-概述与环境搭建

文章目录

1.Hive概述

hive时 hadoop一个数据仓库工具,可以将结构化数据映射为一张表,并提供SQL查询功能。

  • Hive本质

重点:

hive会将用户使用的sql语句转换为MR程序。

由于最终运行程序还是在yarn上,因此hive也是yarn的客户端。

1.2.Hive架构原理

  • Metastore指的是元数据访问接口

  • Metastore只提供元数据访问接口,不提供元数据

  • HiveServer2提供JDBC或ODBC访问接口,或用户认证相关信息

  • HiveCLI只能在安装hive的本地机器使用,命令行客户端

  • Hive组件之间交互过程

Driver的运行逻辑就是将用户sql语句转化为MR计算程序;

此外driver编译sql语句需要用到元数据信息

若使用是select查询语句,那么hive客户端会拉取到最终的查询语句到客户端进行展示给用户。

1.3Driver

(1)解析器(SQLParser):将SQL字符串转换成抽象语法树(AST)

(2)语义分析(Semantic Analyzer):将AST进一步划分为QeuryBlock

获取hive中的元数据信息,将其赋值给QeuryBlock

将第一个AST进一步划分为 QeuryBlock

(3)逻辑计划生成器(Logical Plan Gen):将语法树生成逻辑计划

将语法树生产单一的逻辑计划组合

(4)逻辑优化器(Logical Optimizer):对逻辑计划进行优化

(5)物理计划生成器(Physical Plan Gen):根据优化后的逻辑计划生成物理计划

(6)物理优化器(Physical Optimizer):对物理计划进行优化Map join

(7)执行器(Execution):执行该计划,得到查询结果并返回给客户端

抽象语法树AST如下所示:

  • 每一个token表示每一个节点

逻辑计划如下所示:

2.Hive最小化模式安装部署

  • 最小化模式会将数据保存在derby数据库中部署如下所示

  • 前置条件-安装hadoop集群3.1.3

  • 上传hive安装包,尚硅谷给的资料有
  • 解压到module

  • 添加环境变量

etc/profile.d/my_env.sh

  • 初始化元数据库默认是derby数据库
html 复制代码
/schematool -dbType derby -initSchema
  • 初始化完成后出现metastore_db就是存储数据的文件夹
  • 当前hive初始化完成,能够使用的就是CLI客户端,执行命令/bin/hive
  • 建表

建表是可以指定路径的,不指定则使用默认路径

默认存储user路径

路径存储到源数据库中

若我向stu表插入数据,那么hdfs该路径下出现该数据

  • 插入一条数据进行测试


刚刚程序没有向Yarn提交任务
最小化模式部署的问题

  • hive客户端最小化模式仅允许一个derby进程使用,也就是仅允许一个窗口开启hive

3.生产环境hive安装部署

derby数据库仅允许一个进程使用,生产环境一般将元数据使用Mysql数据库保存,这样允许多个客户端同时访问。解决了先前的问题。

  • mysql安装
    • 离线安装
    • 在线安装(集群节点可以连接外网)

将尚硅谷资料的两个包上传到hadoop102的software

  • 解压
html 复制代码
tar -xf mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar
  • 删除centos7自带的软件包
html 复制代码
sudo rpm -qa | grep mariadb | xargs sudo rpm -e --nodeps
  • 逐步安装mysql依赖
html 复制代码
sudo rpm -ivh mysql-community-common-5.7.28-1.el7.x86_64.rpm
html 复制代码
sudo rpm -ivh mysql-community-libs-5.7.28-1.el7.x86_64.rpm
html 复制代码
sudo rpm -ivh mysql-community-libs-compat-5.7.28-1.el7.x86_64.rpm
html 复制代码
sudo rpm -ivh mysql-community-client-5.7.28-1.el7.x86_64.rpm
html 复制代码
sudo rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm

pkgs.org

各种包下载地址

  • 启动mysql
  • mysql启动命令
html 复制代码
sudo systemctl start mysqld
  • 第一次启动时查看mysql密码
html 复制代码
sudo cat /var/log/mysqld.log | grep password

所有的mysql环境配置建议参考hive课程的MySQL部署

4.将hive的元数据存储到Mysql

4.1创建metastore源数据库放到mysql中

4.2将mysql的驱动拷贝到hive下的lib目录下

4.3hive中创建配置文件

4.4初始化hive源数据库

最终使用DG进行连接

元数据元数据就是存url的表

html 复制代码
不论什么数据库,建表时候都存在默认路径。
而查询语句就是查询HDFS的路径的表,那么源数据库不论使用哪个,只要默认路径存在值,select就能查出来。

5.元数据库概述

  • DBS,保存hive源数据库的信息
  • TBLS,保存hive创建表的所有信息--跟表存储的相关信息存到SDS表中
  • COLUMNS_v2表示存储字段相关数据

6.Hive服务的部署

6.1HiveServer2

作用为用户提供一个jdbc、odbc的接口,供用户远程访问Hive数据的功能

  • HiveServer2部署前置条件,必须部署到能够往yarn提交任务,能够访问HDFS集群的节点上。
  • 用户发起一个sql语句,hiveserver2接收将任务提交yarn,yarn进行MR程序将结果返回给用户

未启用模拟用户效果:不论你使用任何客户端提交任务,HiveServer2提交任务的user都是Hiveserver启动用户atguigu。

若开启模拟用户:提交客户端提交任务user使用当前客户端用户。

生产环境:推荐开启用户模拟功能,开启权限之后,才能够保证各个用户之间的权限隔离。

A操作B表

C操作D表

.

.

.

  • Hive模拟用户权限配置在hadoop的core-site.xml中

注:上述配置完成后不要忘记分发core-sie.xml

  • 重启集群

    • hadoop103关闭yarn
    html 复制代码
    stop-yarn.sh
    • hadoop102关闭dfs
    html 复制代码
    stop-dfs.sh
  • hive端配置hiveserver2连接的host,指定hiveserver2连接的端口号

具体配置参考Hive3.1.3教程world

  • hiveserver2启动在bin下且是一个监听窗口,进程名为RunJar
  • 查看更详细的进程信息:
html 复制代码
jps -ml
  • 使用nohub将监听进程挂载到后台使用,避免我们关闭ssh窗口连接的时候进程挂断。配合nohub一起使用的还有一个&
html 复制代码
nohub bin/hiveserver2 &
  • 进一步将日志丢进垃圾箱1>/dev/null
html 复制代码
nohub bin/hiveserver2 1>/dev/null &
  • linux每一个进程启动之后都会打开很多文件,每一个文件都有一个文件描述符

    • 0表示标准输入
    • 1表示标准输出
    • 2表示标准错误文件
    • 若省略数字,默认标准输出
    html 复制代码
    >/dev/null	#表示标准输出 == 1>/dev/null
    • 若1和2去的是同一个地址,那么标准输出可以简化
    html 复制代码
    x nohub bin/hiveserver2 1>/dev/null 2>&1 &
    • 2>&1等价2>/dev/null,因为2和1去的地址相同。

6.2Metastore

Metastore的作用是提供Hive CLI的元数据访问接口

  • MetasTore运行模式

  • 1.嵌入式模式

嵌入式模式,是所有的CLI,HiveServer2直接访问Mysql元数据库

  • 2.独立模式

独立模式,Metastore成为一个代理,所有客户统统访问代理即可,代理来进行访问元数据库,这样的好处:这样Metastore可以作为消息队列的作用,当数据量过载,Metasotre可以很好的减缓数据库压力。

7.HiveServer2使用

  • 本案例使用DataGrip数据库管理工具连接hiveserver2

端口默认10000

修改name,其他密码没有设置不用填没事

7.1Metastore嵌入模式配置

  • 嵌入模式也就是所有客户直接和mysql交互,因此直接配置url、driver、username、passwor即可。这些参数配置在hive-site.xml,此外,详细配置 参考hive文档。

7.2Metastore独立模式配置*

  • 生产环境重点
  • 独立模式所有的客户配置metastore地址即可,metastore配置jdbc客户端即可。

  • Metastore服务地址配置,端口号默认9083

将hive-site.xml中jdbc驱动信息修改为上述即可由嵌入模式转换为独立模式,

metastore节点仅需要在hive-site.xml配置jdbc即可

metastore启动命令

html 复制代码
hive --service metastore
  • 若hive-site.xml同时配置了metastore地址和jdbc参数,那么优先访问MetaStore。

记忆方法:企业开发为Metastore独立模式运行

我们练习使用:嵌入模式,hadoop102为metastore,hiveserver2地址
关于离线数仓,一般使用脚本方式,非交互式使用模式,定期执行hive命令

  • 非交互式命令

太他妈熟悉了

shell 复制代码
hive -e "sql命令"

非交互式一般用在脚本中定时执行的命令,该命令执行完毕后,直接进行进程释放,不占用资源,离线数仓就是该设计。

shell 复制代码
hive -f file.sql
  • 若sql过多可以撰写sql文件,使用非交互式命令hive -f f表示file

8.hive常用的参数配置方式

  • 默认配置
  • 命令行参数配置

仅对本次启动有效

shell 复制代码
bin/hive -hiveconf	要配置的参数=配置值

客户端CLI内部配置

9.hive人性化配置

  • 所有配置在hive-site.xml

1.客户端显示当前库和表头

html 复制代码
<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>

2.配置hive日志文件路径

hive-log4j2.properties文件在conf下,原先 是template,你可以将后缀去掉再更改。

hive-log4j2.properties文件进行配置

默认日志文件路径存储到temp/hive启动用户名下

hive.log文件

3.关于JVM堆内存的配置

  • hive启动时默认堆内存申请256M

先将文件更名

html 复制代码
mv hive-env.sh.template hive-env.sh
相关推荐
杰克逊的日记6 小时前
Hive的安装与部署
数据仓库·hive·hadoop
想做富婆6 小时前
Hive关于数据库的语法,warehouse,metastore
数据仓库·hive·hadoop
STONE_KKK6 小时前
Hive详细讲解-基础语法快速入门
数据仓库·hive·hadoop
黄雪超2 天前
深入MapReduce——引入
大数据·hadoop·mapreduce
代码欢乐豆2 天前
基于Hadoop MapReduce的WordCount任务实现与部署
hadoop
我要用代码向我喜欢的女孩表白3 天前
hedfs和hive数据迁移后校验脚本
数据仓库·hive·hadoop
Denodo3 天前
如何用数据编织、数据虚拟化与SQL-on-Hadoop打造实时、可扩展兼容的数据仓库?
大数据·数据仓库·hadoop·分布式·数据挖掘·数据分析·spark
码界筑梦坊3 天前
基于Flask框架和Hive数仓的农业数据分析系统
hive·python·flask·毕业设计