百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

Apache Kyuubi 讲解与实战操作(apache2-utils)

wptr33 2025-01-27 00:38 40 浏览

一、概述

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 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 基础环境安装

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

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 的介绍与部署可以参考我以下几篇文章:

这里为了快速测试就选择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接口介绍与使用可以参考官方文档:Clients  Apache Kyuubi;有任何疑问也可关注我公众号:大数据与云原生技术分享,进行技术交流,如本篇文章对您有所帮助,麻烦帮忙一键三连(点赞、转发、收藏)~

相关推荐

redis的八种使用场景

前言:redis是我们工作开发中,经常要打交道的,下面对redis的使用场景做总结介绍也是对redis举报的功能做梳理。缓存Redis最常见的用途是作为缓存,用于加速应用程序的响应速度。...

基于Redis的3种分布式ID生成策略

在分布式系统设计中,全局唯一ID是一个基础而关键的组件。随着业务规模扩大和系统架构向微服务演进,传统的单机自增ID已无法满足需求。高并发、高可用的分布式ID生成方案成为构建可靠分布式系统的必要条件。R...

基于OpenWrt系统路由器的模式切换与网页设计

摘要:目前商用WiFi路由器已应用到多个领域,商家通过给用户提供一个稳定免费WiFi热点达到吸引客户、提升服务的目标。传统路由器自带的Luci界面提供了工厂模式的Web界面,用户可通过该界面配置路...

这篇文章教你看明白 nginx-ingress 控制器

主机nginx一般nginx做主机反向代理(网关)有以下配置...

如何用redis实现注册中心

一句话总结使用Redis实现注册中心:服务注册...

爱可可老师24小时热门分享(2020.5.10)

No1.看自己以前写的代码是种什么体验?No2.DooM-chip!国外网友SylvainLefebvre自制的无CPU、无操作码、无指令计数器...No3.我认为CS学位可以更好,如...

Apportable:拯救程序员,IOS一秒变安卓

摘要:还在为了跨平台使用cocos2d-x吗,拯救objc程序员的奇葩来了,ApportableSDK:FreeAndroidsupportforcocos2d-iPhone。App...

JAVA实现超买超卖方案汇总,那个最适合你,一篇文章彻底讲透

以下是几种Java实现超买超卖问题的核心解决方案及代码示例,针对高并发场景下的库存扣减问题:方案一:Redis原子操作+Lua脚本(推荐)//使用Redis+Lua保证原子性publicbo...

3月26日更新 快速施法自动施法可独立设置

2016年3月26日DOTA2有一个79.6MB的更新主要是针对自动施法和快速施法的调整本来内容不多不少朋友都有自动施法和快速施法的困扰英文更新日志一些视觉BUG修复就不翻译了主要翻译自动施...

Redis 是如何提供服务的

在刚刚接触Redis的时候,最想要知道的是一个’setnameJhon’命令到达Redis服务器的时候,它是如何返回’OK’的?里面命令处理的流程如何,具体细节怎么样?你一定有问过自己...

lua _G、_VERSION使用

到这里我们已经把lua基础库中的函数介绍完了,除了函数外基础库中还有两个常量,一个是_G,另一个是_VERSION。_G是基础库本身,指向自己,这个变量很有意思,可以无限引用自己,最后得到的还是自己,...

China's top diplomat to chair third China-Pacific Island countries foreign ministers' meeting

BEIJING,May21(Xinhua)--ChineseForeignMinisterWangYi,alsoamemberofthePoliticalBureau...

移动工作交流工具Lua推出Insights数据分析产品

Lua是一个适用于各种职业人士的移动交流平台,它在今天推出了一项叫做Insights的全新功能。Insights是一个数据平台,客户可以在上面实时看到员工之间的交流情况,并分析这些情况对公司发展的影响...

Redis 7新武器:用Redis Stack实现向量搜索的极限压测

当传统关系型数据库还在为向量相似度搜索的性能挣扎时,Redis7的RedisStack...

Nginx/OpenResty详解,Nginx Lua编程,重定向与内部子请求

重定向与内部子请求Nginx的rewrite指令不仅可以在Nginx内部的server、location之间进行跳转,还可以进行外部链接的重定向。通过ngx_lua模块的Lua函数除了能实现Nginx...