Flink GateWay、HiveServer2 和 hive on spark

Flink SQL Gateway简介

从官网的资料可以知道Flink SQL Gateway是一个服务,这个服务支持多个客户端并发的从远程提交任务。Flink SQL Gateway使任务的提交、元数据的查询、在线数据分析变得更简单。

Flink SQL Gateway的架构如下图,它由插件化的Endpoints和SqlGatewayService两部分组成。SqlGatewayService是可复用的处理客户端请求的服务。Endpoint是对外暴露的用户可以连接的接口。

Flink SQL Gateway作业提交流程

Flink SQL Gateway的处理流程如下

1.创建Session

当客户端连接Flink SQL Gateway时,Flink SQL Gateway会创建一个Session来存储客户端和 SQL Gateway交互的信息。Session创建完成后Flink SQL Gateway会返回给客户端一个SessionHandle标识

2.提交SQL

客户端创建完Session后就可以提交SQL到SQL Gateway。提交SQL时,SQL会被翻译成一个Operation,并且每个Operation会对应一个OperationHandle标识。使用OperationHandle可以获取查询的结果、取消Operation的执行或者关闭Operation

3. 获取结果

用户可以通过OperationHandle获取Operation的执行结果。如果Operation准备好了,SQL Gateway会返回一批数据和一个获取下一批数据的URI。当所有数据都获取完了,SQL Gateway会将resultType的值设置为EOS,并且将获取下一批数据的URI设置为null。

如果想了解flink sql gateway连接hiveserver2,参考:

Flink SQL Gateway的使用 - 知乎 (zhihu.com)

本质上就是把hive变成flink的一个catalog,就像doris外部表集成mysql一样,mysql就是doris的一个catalog,可以直接用doris语句操作mysql了。这里也一样,hive变成了flinksql的一个catalog。

怎么连接hive并直接可以用hive的代码(虽然这个需求我们是执行flink来跑hive数据),用hiveserver2最高效,下面有hiveserver2的介绍。

那为什么不直接使用 Flink SQL 而使用 Gateway 呢?
  • 远程访问需求: 有时用户可能需要从不同的位置或者不同的应用程序中访问 Flink SQL 引擎,这就需要一个中心化的访问点,而 Gateway 提供了这样的功能。

  • 集中管理和监控需求: 在大型生产环境中,可能需要一个统一的管理界面来管理和监控 Flink SQL 作业,而 Gateway 提供了这样的功能。

  • 安全性需求: 在企业环境中,安全性通常是一个重要考虑因素,而 Gateway 可以提供身份验证和授权机制,帮助确保系统的安全性。

Hiveserver2介绍:

在启动Hive的时候,除了必备的MetaStore服务外 , 我们前面还有提到过2种方式使用Hive :

  • bin/hive , 就是Hive Shell的客户端 , 直接写SQL
  • bin/hive --service hiveserver2

HiveServer2是Hive的一个服务组件,它提供了一个多客户端访问的接口,允许用户通
过多种方式 (如JDBC、ODBC等) 连接Hive,并执行HiveQL语句。HiveServer2可以
独立于Hive运行,并且可以与其他应用程序进行集成,使得用户可以更加灵活地使用H
ive.
HiveServer2的主要作用有:

1.支持多客户端连接
HiveServer2可以同时处理多个客户端的连接请求,每个客户端可以独立地执行HiveQ
L语句。这使得多个用户可以同时访问Hive,并且不会相互影响。同时,HiveServer2
还支持连接池,可以有效地管理连接资源,提高系统的并发性能。

2.提供安全访问控制
HiveServer2支持基于Kerberos的认证和授权机制,可以对用户进行身份验证,并目可
以通过角色和权限管理来限制用户的访问权限。这样可以确保数据的安全性,并且可
以按需控制用户对数据的访问和操作

3.支持长连接和会话管理
HiveServer2支持长连接和会话管理,客户端可以通过保持连接的方式避免多次建立和
关闭连接的开销,提高了系统的性能和响应速度。同时,HiveServer2还提供了会话管
理功能,可以为每个用户分配一个独立的会话,可以在会话级别上进行状态管理和资
源隔离。

4.支持异步查询和结果集缓存
HiveServer2支持异步查询和结果集缓存,客户端可以提交一个查询请求后立即返回
然后通过轮询的方式获取查询结果。这样可以减少客户端的等待时间,并且可以利用
结果集缓存提高查询的性能

启动Hive后,

此时后台执行脚本 : nohup bin/hive --service hiveserver2 >> logs/hiveserver2.log 2>&1 &

bin/hive --service metastore , 启动的是元数据管理服务

bin/hive --service hiveserver2 , 启动的是hiveserver2服务

所以 , HiveServer2其实就是Hive内置的一个ThriftServer服务 , 提供Thrift端口供其他客户端连接

这时可以连接ThrifServer的客户端有 :

Hive内置的beeline客户端工具(命令行形式)
第三方的图形化工具 , 如DataGrip这些
下面就是它们之间的关系:

话不多说, 我们开始实际操作

在安装hive的服务器上, 首先启动metastore服务 , 然后启动hiveserver2服务

#启动metastore服务
nohup bin/hive --service metastore >> logs/metastore.log 2>&1 &
#启动hiveserver2服务
nohup bin/hive --service hiveserver2 >> logs/hiveserver2.log 2>&1 &

Beeline连接

在hive的服务器上可以直接使用beeline客户端进行连接 , Beeline是JDBC的客户端 , 通过JDBC和HiveServer2进行通信, 协议的地址是 :

jdbc:hive2://node:10000  

这个10000端口是hiveserver2默认向外开发的端口

#进入beeline的连接界面
bin/beeline
#开始连接
!connect jdbc:hive2://node:10000
#接下来会开始输入hive的启动用户名密码,然后就可以开始连接了

这是beeline客户端界面

这时hive的原生界面

DataGrip连接
这种第三方的客户端页面美观大方 , 操作简洁 , 更重要的是sql编辑环境优雅 , sql语法智能提示补全 , 关键字高亮 , 查询结果智能显示 , 按钮操作大于命令操作

接下来是具体的连接步骤

打开DataGrip

选择Apach Hive进行连接

填写相关信息

连上后的操作就跟平常操作mysql一样了。

Hive on Spark

spark和hive本质上是没有关系的,两者可以互不依赖。但是在企业实际应用中,经常把二者结合起来使用。而业界spark和hive结合使用的方式,主要有以下三种:

  1. hive on spark。在这种模式下,数据是以table的形式存储在hive中的,用户处理和分析数据,使用的是hive语法规范的 hql (hive sql)。 但这些hql,在用户提交执行时(一般是提交给hiveserver2服务去执行),底层会经过hive的解析优化编译,最后以spark作业的形式来运行。事实上,hive早期只支持一种底层计算引擎,即mapreduce,后期在spark 因其快速高效占领大量市场后,hive社区才主动拥抱spark,通过改造自身代码,支持了spark作为其底层计算引擎。目前hive支持了三种底层计算引擎,即mr, tez和spark.用户可以通过set hive.execution.engine=mr/tez/spark来指定具体使用哪个底层计算引擎。

  2. spark on hive。上文已经说到,spark本身只负责数据计算处理,并不负责数据存储。其计算处理的数据源,可以以插件的形式支持很多种数据源,这其中自然也包括hive。当我们使用spark来处理分析存储在hive中的数据时,这种模式就称为为 spark on hive。这种模式下,用户可以使用spark的 java/scala/pyhon/r 等api,也可以使用spark语法规范的sql ,甚至也可以使用hive 语法规范的hql 。而之所以也能使用hql,是因为 spark 在推广面世之初,就主动拥抱了hive,通过改造自身代码提供了原生对hql包括hive udf的支持(其实从技术细节来将,这里把hql语句解析为抽象语法书ast,使用的是hive的语法解析器,但后续进一步的优化和代码生成,使用的都是spark sql 的catalyst),这也是市场推广策略的一种吧。

  3. spark + spark hive catalog。这是spark和hive结合的一种新形势,随着数据湖相关技术的进一步发展,这种模式现在在市场上受到了越来越多用户的青睐。其本质是,数据以orc/parquet/delta lake等格式存储在分布式文件系统如hdfs或对象存储系统如s3中,然后通过使用spark计算引擎提供的scala/java/python等api或spark 语法规范的sql来进行处理。由于在处理分析时针对的对象是table, 而table的底层对应的才是hdfs/s3上的文件/对象,所以我们需要维护这种table到文件/对象的映射关系,而spark自身就提供了 spark hive catalog来维护这种table到文件/对象的映射关系。注意这里的spark hive catalog,其本质是使用了hive 的 metasore 相关 api来读写表到文件/对象的映射关系(以及一起其他的元数据信息)到 metasore db如mysql, postgresql等数据库中。(由于spark编译时可以把hive metastore api等相关代码一并打包到spark的二进制安装包中,所以使用这种模式,我们并不需要额外单独安装hive);

  4. Hive 2.0 之后,MR执行引擎已经出于deprecated 状态,“It may be removed without further warning.”,hive官方推荐使用的是 hive on tez 或 hive on spark; Hiv3.0 之后, hive官方推荐使用的是 hive on tez,并在Hive4.0中,移除了 hive on spark;

概括起来,SparkOnHive和 HiveOnSpark的核心区别:

  • 不在于是否访问HIVE数仓中的数据(二者都访问);
  • 也不在于客户端的SQL语法规范是 HIVE SQL 还是 SPARK SQL(Spark支持绝大部分HiveSqly语法);
  • 二者的核心区别在于,客户端的 SQL 是否提交给了服务角色 HiveServer2 (org.apache.hive.service.server.HiveServer2),且该hs2配置了 hive.execution.engine=spark;

Spark SQL gateway 的解决方案-Kyuubi

•HiveServer2 本质上是 HIVE 提供的 SQL gateway服务;

•Spark原生提供的 SQL gateway 服务,只有 spark thrift Server($SPARK_HOME/sbin/start-thriftserver.sh) ,但因为功能和稳定性等各种原因,不推荐在生产环境使用($SPARK_HOME/bin/spark-sql 只是一个spark 应用,不是服务);

•网易的开源组件 Kyuubi,起到了 Spark SQL gateway服务的角色,该项目目前已经是 Apache 顶级开源项目,可以在生产环境使用;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/761584.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

探秘开源隐语:架构深度剖析与隐私计算技术之旅

1.隐语架构 隐语(SecretFlow)作为蚂蚁集团开源的可信隐私计算框架,其架构设计具有多层次的特点,虽然具体分层名称可能会根据实际描述略有差异,但我们可以依据已有的技术和信息对其进行结构化的拆解: 硬件层…

如何使用Excel创建一个物品采购表

在企业的日常运营中,物品采购是一个常见且重要的活动。有效的采购管理不仅可以确保企业及时获得所需物资,还可以控制成本、提高效率。Microsoft Excel是一个功能强大的工具,它可以帮助我们创建和管理物品采购表。本文将详细介绍如何使用Excel…

Lua | 一篇文章讲清Lua语法及热更新

目录 一、环境搭建 二、Lua语法 1.输出print、单行注释、多行注释 2.变量 (1)nil (2)number (3)string (3.1)字符串长度 (3.2)字符串拼接 &#xf…

归并算法详细解析

归并排序 1945年,约翰冯诺依曼(John von Neumann)发明了归并排序,这是典型的分治算法的应用。归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Di…

数学建模(Topsis python代码 案例)

目录 介绍: 模板: 案例: 极小型指标转化为极大型(正向化): 中间型指标转为极大型(正向化): 区间型指标转为极大型(正向化): 标…

RequestResponse使用

文章目录 一、Request&Response介绍二、Request 继承体系三、Request 获取请求数据1、获取请求数据方法(1)、请求行(2)、请求头(3)、请求体 2、通过方式获取请求参数3、IDEA模板创建Servlet4、请求参数…

WEB 表单练习题

任务如图&#xff1a; <html><head><meta charest"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </head><body><table width"…

Google的MELON: 通过未定位图像重建精确3D模型的突破性算法

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

算法沉淀——贪心算法七(leetcode真题剖析)

算法沉淀——贪心算法七 01.整数替换02.俄罗斯套娃信封问题03.可被三整除的最大和04.距离相等的条形码05.重构字符串 01.整数替换 题目链接&#xff1a;https://leetcode.cn/problems/integer-replacement/ 给定一个正整数 n &#xff0c;你可以做如下操作&#xff1a; 如果…

数据结构:堆的创建和使用

上一期我们学习了树和二叉树的定义&#xff0c;其中我们了解到了两种特殊的二叉树&#xff1a;满二叉树和完全二叉树。 今天我们还要学习一种新的结构&#xff1a;堆 那这种结构和二叉树有什么联系呢&#xff1f;&#xff1f;&#xff1f; 通过观察我们可以发现&#xff0c;…

鸿蒙一次开发,多端部署(三)应用UX设计原则

设计原则 当为多种不同的设备开发应用时&#xff0c;有如下设计原则&#xff1a; 差异性 充分了解所要支持的设备&#xff0c;包括屏幕尺寸、交互方式、使用场景、用户人群等&#xff0c;对设备的特性进行针对性的设计。 一致性 除了要考虑每个设备的特性外&#xff0c;还…

C# 读取二维数组集合输出到Word预设表格

目录 应用场景 设计约定 范例运行环境 配置Office DCOM 实现代码 组件库引入 核心代码 DataSet转二维数组 导出写入WORD表格 调用举例 小结 应用场景 存储或导出个人WORD版简历是招聘应用系统中的常用功能&#xff0c;我们通常会通过应用系统采集用户的个人简历信息…

云主机搭建与服务软件部署

文章目录 登录访问云电脑与云电脑传输文件配置ssh服务ssh连接云电脑使用scp传输文件云端服务软件部署与实现外部访问首先购买云主机,以阿里云服务器 ECS为例子,官网购买就行了,选择默认安装了windows server 2022服务器系统 登录访问云电脑 购买完成进入控制台,能看到创建…

使用CUDA 为Tegra构建OpenCV

返回&#xff1a;OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;MultiArch与Ubuntu/Debian 的交叉编译 下一篇&#xff1a;在iOS中安装 警告&#xff1a; 本教程可能包含过时的信息。 使用CUDA for Tegra 的OpenCV 本文档是构建支持 CUD…

谷歌具身智能最新进展:RT-H 机器人通用灵巧抓取

随着 GPT-4 等大型语言模型与机器人研究的结合愈发紧密&#xff0c;人工智能正在越来越多地走向现实世界&#xff0c;因此具身智能相关的研究也正受到越来越多的关注。在众多研究项目中&#xff0c;谷歌的「RT」系列机器人始终走在前沿&#xff08;参见《大模型正在重构机器人&…

各位老板,你需要的工厂数字孪生可视化库在这

各位老板是不是很喜欢下面这种有逼格的大屏,下面介绍一下怎么实现的,保证有所收获。 Cesium是一个开源的WebGL JavaScript库&#xff0c;用于创建高性能的三维地球、地图和虚拟环境。它支持在浏览器中实现高质量的地球模拟&#xff0c;同时提供了丰富的功能特点&#xff0c;使得…

k8s系列之十五 Istio 部署Bookinfo 应用

Bookinfo 应用中的几个微服务是由不同的语言编写的。 这些服务对 Istio 并无依赖&#xff0c;但是构成了一个有代表性的服务网格的例子&#xff1a;它由多个服务、多个语言构成&#xff0c;并且 reviews 服务具有多个版本。 该应用由四个单独的微服务构成。 这个应用模仿在线书…

模板高级使用(非类型模板参数,特化,分离编译)

文章目录 模板没有实例化取内嵌类型报错问题非类型模板参数模板的特化函数模板的特化类模板的特化1.全特化2.偏特化 模板的分离编译 模板没有实例化取内嵌类型报错问题 首先在这里分享一个模板的常见报错问题。就是模板的在没有实例化的情况下去取模板类里面的内嵌类型这时候的…

代码随想录|Day25|回溯05|491.非递减子序列、46.全排列、47.全排列II

491. 非递减子序列 本题并不能像 90.子集II 那样&#xff0c;使用排序进行树层去重。虽然题目没有明确不能排序&#xff0c;但如果排序了&#xff0c;集合本身就是递增子序列&#xff0c;这是LeetCode示例2中没有出现的。 所以本题的关键在于&#xff0c;如何在不排序的情况下对…

2024格行VS华为VS飞猫哪个是最值得购买随身WiFi?中兴随身WiFi好用吗?

经常出差旅行&#xff0c;或者户外工作的朋友因为长期在外&#xff0c;手机流量经常不够用&#xff0c;想必都是随身WiFi的忠实用户&#xff0c;但是也都被这款产品割韭菜割的头皮发麻。今天&#xff0c;我们统计了市面上最靠谱的、最热销、口碑最好的几款随身WiFi。排名依据来…