Apache Kyuubi 讲解与实战操作

news2024/9/24 11:22:23

文章目录

    • 一、概述
    • 二、Spark Kyuubi 架构
    • 三、Hadoop 基础环境安装
      • 1)hadoop 下载部署包
      • 2)创建网络
      • 3)部署MySQL
      • 4)部署 Hadoop Hive
    • 四、Spark Kyuubi 安装
      • 1)下载 Kyuubi
      • 2)下载 Spark3
      • 2)配置 Kyuubi (Spark3)
      • 3)启动 Kyuubi
      • 4)测试使用
    • 五、Apache Kyuubi HA 部署
      • 1)部署 Zookeeper
      • 3)Kyuubi HA 配置
      • 4)启动服务
      • 5)测试

一、概述

Apache Kyuubi,一个分布式多租户网关,用于在 Lakehouse 上提供无服务器 SQL。Kyuubi 是一个基于 Apache Spark 的开源分布式 SQL 引擎,为用户提供了一个统一的 SQL 查询接口,使其能够以标准 SQL 语法查询和分析各种数据源。以下是对 Kyuubi 的详细解释:

  1. 背景和目的
    • Kyuubi 的目标是提供一个高度并发、可扩展且支持多租户的 SQL 引擎,以满足大数据分析的需求。
    • 它构建在 Apache Spark 之上,借助 Spark 的分布式计算能力,能够处理大规模数据集。
  2. 核心特性
    • SQL 兼容性: 支持标准 SQL 查询,使用户能够使用熟悉的 SQL 语法。
    • 分布式查询引擎: 利用 Apache Spark 实现分布式查询和计算。
    • 连接池支持: 提供连接池机制,有效管理和重用连接,提高性能。
    • 多租户支持: 允许多个用户或应用程序共享同一个 Kyuubi 服务器,确保隔离性。
    • 身份验证和授权: 集成了身份验证和授权机制,保障数据访问的安全性。
    • 可扩展的数据源支持: 可以连接多种数据源,包括 Hive、HBase 和其他兼容 Spark 的数据存储。
  3. 架构和工作原理
    Kyuubi 架构上包含客户端、Kyuubi 服务器和 Spark 集群。客户端通过 JDBCODBC 驱动连接到 Kyuubi 服务器,然后 Kyuubi 将查询分发到底层的 Spark 集群进行处理。
  4. 部署和配置
    • Kyuubi 可以通过配置文件进行各种参数的设置,包括连接池、身份验证方式、Spark 应用程序的配置等。详细的配置信息可以参考 Kyuubi 的官方文档。
  5. 使用场景
    • Kyuubi 适用于需要进行大数据分析的场景,尤其是需要支持多用户并发查询的环境。
    • 通过 SQL 查询接口,用户可以方便地从多种数据源中检索和分析数据。
  6. 社区和维护
    • Kyuubi 是一个活跃的开源项目,有一个不断发展的社区。用户可以通过 GitHub 等渠道参与讨论、报告问题和提供贡献。

总体而言,Kyuubi 是一个强大的分布式 SQL 引擎,通过整合 Apache Spark 的计算能力,提供了高性能、多租户支持的 SQL 查询服务。在大数据分析领域,Kyuubi 提供了一种灵活、可扩展的解决方案。

在这里插入图片描述
官方文档:

  • https://kyuubi.apache.org/
  • https://kyuubi.readthedocs.io/en/v1.8.0/
  • https://github.com/apache/kyuubi

Kyuubi 软件跟 Livy 一样都是可以作为 Spark 代理网关,但是 livy 只支持 Spark2.x,如果对 Livy 感兴趣的小伙伴可以参考我以下几篇文章:

  • Spark开源REST服务——Apache Livy(Spark 客户端)
  • 【云原生】Apache Livy on k8s 讲解与实战操作

二、Spark Kyuubi 架构

Kyuubi 系统的基本技术架构如下图所示:
在这里插入图片描述

  • 图的中间部分是 Kyuubi 服务端的主要部分,它处理来自图像左边所示的客户端的连接和执行请求。在 Kyuubi 中,这些连接请求被维护为 Kyuubi Session,执行请求被维护为 Kyuubi Operation,并与相应的 session 进行绑定。

  • Kyuubi Session 的创建可以分为两种情况:轻量级和重量级。大多数 session 的创建都是轻量级的,用户无感知。唯一重量级的情况是在用户的共享域中没有实例化或缓存 SparkContext,这种情况通常发生在用户第一次连接或长时间没有连接的时候。这种一次性成本的 session 维护模式可以满足大部分的 ad-hoc 快速响应需求。

  • Kyuubi 以松耦合的方式维护与 SparkConext 的连接。这些 SparkContexts 可以是本服务实例在客户端部署模式下在本地创建的 Spark 程序,也可以是集群部署模式下在 YarnKubernetes 集群中创建的。在高可用模式下,这些 SparkConext 也可以由其他机器上的 Kyuubi 实例创建,然后由这个实例共享。

  • 这些 SparkConext 实例本质上是由 Kyuubi 服务托管的远程查询执行引擎程序。这些程序在 Spark SQL 上实现,并对 SQL 语句进行端到端编译、优化和执行,以及与元数据(如 Hive Metastore)和存储(如 HDFS)服务进行必要的交互,最大限度地发挥 Spark SQL 的威力。它们可以自行管理自己的生命周期,自行缓存和回收,并且不受 Kyuubi 服务器上故障转移的影响。

三、Hadoop 基础环境安装

可以选择物理部署,如果只是测试的话,也可以选择容器部署,这里为了快速测试就选择容器部署了。物理部署和容器部署教程如下:

  • 大数据Hadoop原理介绍+安装+实战操作(HDFS+YARN+MapReduce)
  • 大数据Hadoop之——数据仓库Hive
  • 大数据Hadoop之——计算引擎Spark
  • 通过 docker-compose 快速部署 Hive 详细教程

1)hadoop 下载部署包

# 下载部署包
git clone https://gitee.com/hadoop-bigdata/docker-compose-hadoop.git

2)创建网络

docker network create hadoop-network

3)部署MySQL

cd docker-compose-hadoop/mysql
docker-compose -f mysql-compose.yaml up -d
docker-compose -f mysql-compose.yaml ps
#root 密码:123456,以下是登录命令,注意一般在公司不能直接在命令行明文输入密码,要不然容易被安全抓,切记,切记!!!
docker exec -it mysql mysql -uroot -p123456

4)部署 Hadoop Hive

# 部署 Hadoop Hive
cd docker-compose-hadoop/hadoop_hive
docker-compose -f docker-compose.yaml up -d
# 查看
docker-compose -f docker-compose.yaml ps
# hive
docker exec -it hive-hiveserver2 hive -e "show databases";
# hiveserver2
docker exec -it hive-hiveserver2 beeline -u jdbc:hive2://hive-hiveserver2:10000  -n hadoop -e "show databases;"

四、Spark Kyuubi 安装

1)下载 Kyuubi

wget https://dlcdn.apache.org/kyuubi/kyuubi-1.8.0/apache-kyuubi-1.8.0-bin.tgz --no-check-certificate

tar zxf apache-kyuubi-1.8.0-bin.tgz

2)下载 Spark3

关于Spark的介绍,可以参考我之前的文章:大数据Hadoop之——计算引擎Spark

 wget https://archive.apache.org/dist/spark/spark-3.3.2/spark-3.3.2-bin-hadoop3.tgz --no-check-certificate

tar -xf spark-3.3.2-bin-hadoop3.tgz

修改配置文件:


# 进入spark配置目录
cd spark-3.3.2-bin-hadoop3/conf
# copy 一个模板配置
cp spark-env.sh.template spark-env.sh

spark-env.sh下加入如下配置

# Hadoop 的配置文件目录
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
# YARN 的配置文件目录
export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
# SPARK 的目录
export SPARK_HOME=/opt/apache/spark-3.3.2-bin-hadoop3
# SPARK 执行文件目录
export PATH=$SPARK_HOME/bin:$PATH

/etc/profile文件中追加如下内容:

export SPARK_HOME=/opt/apache/spark-3.3.2-bin-hadoop3
export PATH=$SPARK_HOME/bin:$PATH

测试:

spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode cluster \
--driver-memory 1G \
--num-executors 3 \
--executor-memory 1G \
--executor-cores 1 \
 /opt/apache/spark-3.3.2-bin-hadoop3/examples/jars/spark-examples_2.12-3.3.2.jar 100

在这里插入图片描述

2)配置 Kyuubi (Spark3)

cp conf/kyuubi-env.sh.template conf/kyuubi-env.sh
echo 'export JAVA_HOME=/opt/apache/jdk1.8.0_212' >> conf/kyuubi-env.sh
echo 'export SPARK_HOME=/opt/apache/spark-3.3.2-bin-hadoop3' >> conf/kyuubi-env.sh

cp conf/kyuubi-defaults.conf.template conf/kyuubi-defaults.conf
# 将kyuubi地址设置为localhost,如果不打开该注释,那么使用localhost是无法连接的,需要填写主机的ip地址
vi conf/kyuubi-defaults.conf
kyuubi.frontend.bind.host   localhost

3)启动 Kyuubi

bin/kyuubi start

在这里插入图片描述

4)测试使用

使用kyuubi自带的beeline客户端工具

bin/beeline -u 'jdbc:hive2://localhost:10009/' -n hadoop

在这里插入图片描述
Apache Kyuubi 不仅仅支持 Spark3 代理也支持 Presto、Flink 等组件的代理。
在这里插入图片描述
在这里插入图片描述

五、Apache Kyuubi HA 部署

目前Kyuubi支持负载均衡,使整个系统高可用。负载均衡旨在优化所有 Kyuubi 服务单元的使用,最大化吞吐量,最小化响应时间,并避免单个单元过载。使用具有负载平衡功能的多个 Kyuubi 服务单元而不是单个单元可以通过冗余来提高可靠性和可用性。

Kyuubi 通过使用Apache ZooKeeper来利用组中的冗余服务实例,在一个或多个组件发生故障时提供连续服务。
在这里插入图片描述

1)部署 Zookeeper

关于 Zookeeper 的介绍与部署可以参考我以下几篇文章:

  • 分布式开源协调服务——Zookeeper
  • 【云原生】zookeeper + kafka on k8s 环境部署
  • 【中间件】通过 docker-compose 快速部署 Zookeeper 保姆级教程

这里为了快速测试就选择docker-compose部署Zookeeper了。

3)Kyuubi HA 配置

vim /opt/kyuubi/conf/kyuubi-defaults.conf

kyuubi.ha.addresses 192.168.182.110:31181,192.168.182.110:32181,192.168.182.110:33181
kyuubi.ha.namespace kyuubi

4)启动服务

bin/kyuubi restart

5)测试

bin/beeline -u 'jdbc:hive2://192.168.182.110:31181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=kyuubi' -n hadoop

在这里插入图片描述


Apache Kyuubi 讲解与实战操作就先到这里了,更多API接口介绍与使用可以参考官方文档:https://kyuubi.readthedocs.io/en/master/client/index.html;有任何疑问也可关注我公众号:大数据与云原生技术分享,进行技术交流,如本篇文章对您有所帮助,麻烦帮忙一键三连(点赞、转发、收藏)~

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

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

相关文章

final的详解

在Java中,final 关键字用于表示不可改变的实体,可以应用于变量、方法、类和指令重排序。它有不同的作用,具体取决于它被应用的上下文。 1.对于变量: 如果一个变量被声明为 final,则该变量的值在一旦被赋予后就不能再被…

excel该如何实现生成条形码/二维码?

如何在Excel中制作条形码/二维码? 1.首先,打开电脑上的Excel。进入后,在上方菜单栏中找到并点击“开发工具”。如果没有找到开发工具,就先点击“文件”,在弹出菜单中再点击“选项”。 2.打开Excel选项窗口后&#xff0…

循环栅栏:CyclicBarrier

CyclicBarrier可以理解为循环栅栏,栅栏就是一种障碍物, 比如通常在私人宅院的周围就可以围上一圈栅栏,阻止闲杂人等入内。 这里当然就是用来阻止线程继续执行,要求线程在栅栏外等待。 前面的Cyclic意为循环,也就是说这…

【轻量化篇】YOLOv8改进实战 | 更换主干网络 Backbone 之 RepGhostnet,重参数化实现硬件高效的Ghost模块

YOLOv8专栏导航:点击此处跳转 前言 轻量化网络设计是一种针对移动设备等资源受限环境的深度学习模型设计方法。下面是一些常见的轻量化网络设计方法: 网络剪枝:移除神经网络中冗余的连接和参数,以达到模型压缩和加速的目的。分组卷积:将卷积操作分解为若干个较小的卷积操…

cpp_04_类_对象_this指针_常对象_常(成员)函数

1 类 1.1 类的定义 类的作用是抽象事物(抽取事物特征)的规则。 类的外化表现是用户自定义的复合数据类型(包括成员变量、成员函数): 成员变量用于表达事物的属性,成员函数用于表达事物的行为。 类的表现…

基于LSTM的情感分析

本文以情感分析为主题,介绍了其在自然语言处理中的重要性以及应用场景。传统的循环神经网络(RNN)在处理长序列时存在问题,而引入了记忆细胞、输入门、输出门和遗忘门的LSTM模型能够有效解决这一问题。数据集和预处理在机器学习和自…

内外联动——记建行江门鹤山支行营业部成功堵截诈骗

“谢谢,太谢谢你们了!真没想到,现在骗子手段这么高了,冒充我孙儿太像了。要不是你们一直拦着我,差点就把养老钱汇出去了!”近日,在建行江门鹤山支行营业部大厅里,一位老人家肖婆婆对…

鸿蒙Harmony4.0开发-ArkTS基础知识运用

概念 1.渲染控制语法: 条件渲染:使用if/else进行条件渲染。 Column() {if (this.count > 0) {Text(count is positive)} }循环渲染:开发框架提供循环渲染(ForEach组件)来迭代数组,并为每个数组项创建…

王道考研--》单链表课后习题C语言代码实现(冲刺)

考研是许多计算机科学专业学生追求高学历、寻求更好就业前景的途径。在考研过程中,数据结构是一个非常重要的科目,而代码实现题更是其中的难点之一。在这篇文章中,我们将探讨如何通过实现数据结构代码问题来提升考研成绩。无论您是否有编程经…

重温经典struts1之自定义转换器及注册的两种方式(Servlet,PlugIn)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 前言 Struts的ActionServlet接收用户在浏览器发送的请求,并将用户输入的数据,按照FormBean中定义的数据类型,赋值给FormBean中每个变量&a…

YOLOv8改进 | 2023注意力篇 | HAttention(HAT)超分辨率重建助力小目标检测 (全网首发)

一、本文介绍 本文给大家带来的改进机制是HAttention注意力机制,混合注意力变换器(HAT)的设计理念是通过融合通道注意力和自注意力机制来提升单图像超分辨率重建的性能。通道注意力关注于识别哪些通道更重要,而自注意力则关注于图…

【Python动漫系列】小香香(完整代码)

文章目录 环境需求完整代码程序分析系列文章环境需求 python3.11.4及以上版本PyCharm Community Edition 2023.2.5pyinstaller6.2.0(可选,这个库用于打包,使程序没有python环境也可以运行,如果想发给好朋友的话需要这个库哦~)【注】 python环境搭建请见:https://want595.…

《论文阅读28》Unsupervised 3D Shape Completion through GAN Inversion

GAN,全称GenerativeAdversarialNetworks,中文叫生成式对抗网络。顾名思义GAN分为两个模块,生成网络以及判别网络,其中 生成网络负责根据随机向量产生图片、语音等内容,产生的内容是数据集中没有见过的,也可…

C语言—每日选择题—Day56

指针相关博客 打响指针的第一枪:指针家族-CSDN博客 深入理解:指针变量的解引用 与 加法运算-CSDN博客 第一题 1. 以下叙述中正确的是() A:\0 表示字符 0 B:"a" 表示一个字符常量 C:表…

机器学习与深度学习傻傻分不清?快来!

导读:本文探讨机器学习和深度学习之间的关键区别和相互联系,目的是为大家提供一个清晰的框架,帮助大家理解这两种技术的特点、应用场景以及选择适当方法的依据。(理论辨析,无实践代码,放心食用)…

js之零碎工具(四)

一、数组的去重 简单类型的去重 let arr [1, 2, 2, 3, 4, 4, 5]; let uniqueArr [...new Set(arr)]; console.log(uniqueArr); // 输出:[1, 2, 3, 4, 5]在这个例子中,我们首先创建了一个新的 Set 对象,并将数组 arr 作为参数传递给 Set 的…

令人惊叹的代码技巧

在编程世界中,有一些令人惊叹的代码技巧和巧妙的实现方式。以下是一些我见过的令人印象深刻的代码技巧: 函数式编程魔法: 使用函数式编程的一些特性,比如高阶函数、匿名函数和Lambda表达式,可以使代码更为简洁、易读。…

C# 使用NUnit进行单元测试

写在前面 NUnit是一个开源的.Net单元测试框架,经常被用来在.Net体系下做白盒测试。 NUnit.org GitHub 本文记录一个简单的使用NUnit进行单元测试的完整流程。 代码实现 新建一个目标类库NUnitTester,添加待测试的类文件,内容如下&#…

hyper-v ubuntu2204指定静态ip地址

虚拟机静态IP设置 虚拟机每次重新启动,都会动态分配IP,这导致我们无法使用一个固定的ip连接到虚拟机内部。解决该问题的最直接有效的办法就是给虚拟机绑定2张网卡,一张用于连接外网、一张用于连接内网。 init 0 关机,也可以从管…

Python正则表达式与replace函数,空格问题轻松搞定!

更多资料获取 📚 个人网站:ipengtao.com 在数据处理中,清理文本数据是一个常见而关键的任务。空格是文本中常见的干扰项之一,可能存在于字符串的开头、结尾或中间。Python提供了正则表达式和replace函数两种强大的工具&#xff0…