大数据实践-Kyuubi

概述

Kyuubi 是一个分布式多租户 Thrift JDBC/ODBC 服务器,用于大规模数据管理、处理和分析,构建在 Apache Spark 之上,旨在支持更多引擎(即 Flink)。

Kyuubi 通过 Thrift JDBC/ODBC 接口为最终用户提供了一个纯 SQL 网关,以使用预编程和可扩展的 Spark SQL 引擎来操作大规模数据。

我们的目标是使 Kyuubi 成为数据仓库和数据湖的“开箱即用”工具。

这种“开箱即用”的模型最大限度地减少了最终用户在客户端使用 Spark 的障碍和成本。

在服务器端,九笔服务器和引擎的多租户架构为管理员提供了一种实现计算资源隔离、数据安全、高可用、高客户端并发等的途径

架构

在这里插入图片描述
此外,如果您想使用其他 Spark 兼容系统或插件,您只需像将它们与常规 Spark 应用程序一起使用一样照顾它们。例如,您可以在任何集群管理器上运行 Kyuubi 创建的 Spark SQL 引擎,包括 YARN、Kubernetes、Mesos 等……或者,您可以使用 Spark Datasource API 操作来自不同数据源的数据,例如 Delta Lake、Apache Hudi、 Apache Iceberg、Apache Kudu 等……

依赖

在这里插入图片描述

配置

/kyuubi-defaults.conf


## Kyuubi Configurations

#
# kyuubi.authentication           NONE
# kyuubi.frontend.bind.host       localhost
# kyuubi.frontend.bind.port       10009
#

# Details in https://kyuubi.apache.org/docs/latest/deployment/settings.html
#
kyuubi.ha.enabled true
kyuubi.ha.zookeeper.quorum hadoop2,hadoop3,hadoop4
kyuubi.ha.zookeeper.client.port 2181
kyuubi.ha.zookeeper.session.timeout 600000

kyuubi-env.sh

# - JAVA_HOME               Java runtime to use. By default use "java" from PATH.
#
#
# - KYUUBI_CONF_DIR         Directory containing the Kyuubi configurations to use.
#                           (Default: $KYUUBI_HOME/conf)
# - KYUUBI_LOG_DIR          Directory for Kyuubi server-side logs.
#                           (Default: $KYUUBI_HOME/logs)
# - KYUUBI_PID_DIR          Directory stores the Kyuubi instance pid file.
#                           (Default: $KYUUBI_HOME/pid)
# - KYUUBI_MAX_LOG_FILES    Maximum number of Kyuubi server logs can rotate to.
#                           (Default: 5)
# - KYUUBI_JAVA_OPTS        JVM options for the Kyuubi server itself in the form "-Dx=y".
#                           (Default: none).
# - KYUUBI_CTL_JAVA_OPTS    JVM options for the Kyuubi ctl itself in the form "-Dx=y".
#                           (Default: none).
# - KYUUBI_BEELINE_OPTS     JVM options for the Kyuubi BeeLine in the form "-Dx=Y".
#                           (Default: none)
# - KYUUBI_NICENESS         The scheduling priority for Kyuubi server.
#                           (Default: 0)
# - KYUUBI_WORK_DIR_ROOT    Root directory for launching sql engine applications.
#                           (Default: $KYUUBI_HOME/work)
# - HADOOP_CONF_DIR         Directory containing the Hadoop / YARN configuration to use.
#
# - SPARK_HOME              Spark distribution which you would like to use in Kyuubi.
# - SPARK_CONF_DIR          Optional directory where the Spark configuration lives.
#                           (Default: $SPARK_HOME/conf)
#


## Examples ##

 export JAVA_HOME=/java/jdk1.8.0_191
 export SPARK_HOME=/opt/cloudera/parcels/CDH-6.2.1-1.cdh6.2.1.p0.1425774/lib/spark
 export HADOOP_CONF_DIR=/etc/hadoop/conf
 export HIVE_HOME=/opt/cloudera/parcels/CDH-6.2.1-1.cdh6.2.1.p0.1425774/lib/hive
 export HIVE_CONF_DIR=/etc/hive/conf


# export KYUUBI_JAVA_OPTS="-Xmx10g -XX:+UnlockDiagnosticVMOptions -XX:ParGCCardsPerStrideChunk=4096 -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSConcurrentMTEnabled -XX:CMSInitiatingOccupancyFraction=70 -XX:+UseCMSInitiatingOccupancyOnly -XX:+CMSClassUnloadingEnabled -XX:+CMSParallelRemarkEnabled -XX:+UseCondCardMark -XX:MaxDirectMemorySize=1024m  -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./logs -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintTenuringDistribution -Xloggc:./logs/kyuubi-server-gc-%t.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=5M -XX:NewRatio=3 -XX:MetaspaceSize=512m"
# export KYUUBI_BEELINE_OPTS="-Xmx2g -XX:+UnlockDiagnosticVMOptions -XX:ParGCCardsPerStrideChunk=4096 -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSConcurrentMTEnabled -XX:CMSInitiatingOccupancyFraction=70 -XX:+UseCMSInitiatingOccupancyOnly -XX:+CMSClassUnloadingEnabled -XX:+CMSParallelRemarkEnabled -XX:+UseCondCardMark"

安装

1.3. 安装
要安装 Kyuubi,您需要解压 tarball。例如,

tar zxf kyuubi-1.0.2-bin-spark-3.0.1.tgz
这将导致创建一个名为kyuubi-1.0.2-bin-spark-3.0.1如下所示的子目录,其中1.0.2是 Kyuubi 版本,3.0.1是预构建的 Spark 版本。

kyuubi-1.0.2-bin-spark-3.0.1
├── LICENSE
├── RELEASE
├── bin
│ └── kyuubi
├── conf
│ ├── kyuubi-defaults.conf
│ ├── kyuubi-env.sh
│ └── log4j.properties
├── externals
│ ├── engines
│ └── spark-3.0.1-bin-hadoop2.7
├── jars
├── logs
├── pid
└── work
从上到下分别是:

许可证:我们声称遵守的APACHE 许可证 2.0 版。

RELEASE:这个包的构建信息

bin:九尾服务器的入口,kyuubi作为启动脚本。

conf:Kyuubi Server 本身或与 Spark 应用程序创建会话使用的所有默认值。

外在的

引擎:包含我们支持的各种 SQL 引擎,例如 Apache Spark、Apache Flink(即将推出)。

spark-3.0.1-bin-hadoop2.7:预下载的官方 Spark 版本,默认使用。

jars:九尾服务器需要的包。

logs:九尾服务器的日志所在的位置。

pid:存放九笔服务器实例的PID文件。

work:所有分叉子进程的工作目录的根目录,也就是 SQL 引擎。

1.4. 跑九尾
如上所述,对于快速启动部署,您只需要确保您的 java 运行时环境是正确的。

1.4.1. 安装JAVA
您可以在系统范围内设置它,例如在.bashrc文件中。

java -version
java version “1.8.0_251”
Java™ SE Runtime Environment (build 1.8.0_251-b08)
Java HotSpot™ 64-Bit Server VM (build 25.251-b08, mixed mode)
或者,在本地操作系统会话中。export JAVA_HOME=/path/to/java

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-11.0.5.jdk/Contents/Home
java -version
java version “11.0.5” 2019-10-15 LTS
Java™ SE Runtime Environment 18.9 (build 11.0.5+10-LTS)
Java HotSpot™ 64-Bit Server VM 18.9 (build 11.0.5+10-LTS, mixed mode)
推荐的设置位置JAVA_HOME是 K Y U U B I H O M E / c o n f / k y u u b i − e n v . s h ,因为上面的方法太片面了。将 J A V A H O M E 在 KYUUBI_HOME/conf/kyuubi-env.sh,因为上面的方法太片面了。将JAVA_HOME在 KYUUBIHOME/conf/kyuubienv.sh,因为上面的方法太片面了。将JAVAHOMEKYUUBI_HOME/conf/kyuubi-env.sh将别人的优先级。

1.4.2. 启动九尾
bin/kyuubi start
它会在服务器启动期间在屏幕上打印所有必需的环境变量,您可以检查它们是否符合预期。

Starting Kyuubi Server from /Users/kentyao/kyuubi/kyuubi-1.0.2-bin-spark-3.0.1
Using kyuubi.sh environment file /Users/kentyao/kyuubi/kyuubi-1.0.2-bin-spark-3.0.1/conf/kyuubi-env.sh to initialize…
JAVA_HOME: /Library/Java/JavaVirtualMachines/jdk1.8.0_251.jdk/Contents/Home
KYUUBI_HOME: /Users/kentyao/kyuubi/kyuubi-1.0.2-bin-spark-3.0.1
KYUUBI_CONF_DIR: /Users/kentyao/kyuubi/kyuubi-1.0.2-bin-spark-3.0.1/conf
KYUUBI_LOG_DIR: /Users/kentyao/kyuubi/kyuubi-1.0.2-bin-spark-3.0.1/logs
KYUUBI_PID_DIR: /Users/kentyao/kyuubi/kyuubi-1.0.2-bin-spark-3.0.1/pid
KYUUBI_WORK_DIR_ROOT: /Users/kentyao/kyuubi/kyuubi-1.0.2-bin-spark-3.0.1/work
SPARK_HOME: /Users/kentyao/kyuubi/kyuubi-1.0.2-bin-spark-3.0.1/externals/spark-3.0.1-bin-hadoop2.7
SPARK_CONF_DIR:
HADOOP_CONF_DIR:
Starting org.apache.kyuubi.server.KyuubiServer, logging to /Users/kentyao/kyuubi/kyuubi-1.0.2-bin-spark-3.0.1/logs/kyuubi-kentyao-org.apache.kyuubi.server.KyuubiServer-hulk.local.out
Welcome to


/\ /\ \ /\ \ __
\ \ /‘/’ __ __ __ __ __ \ \ _/_
\ \ , < /\ /\ /\ /\ /\ /\ \ \ '
\/\ \ \ \ \\\ \ _\ \ \ _\ \ \ _\ \ \ \L\ \ \
\ _\ _/____ \ \____/\ \____/ \ \_,__/\ \_\ \/_/\/_//
/> // // // //
/_/
/
/
如果一切顺利,这将导致创建 Kyuubi 服务器实例,其中PID存储在$KYUUBI_HOME/pid/kyuubi--org.apache.kyuubi.server.KyuubiServer.pid

然后,您可以在日志文件的末尾获取 JDBC 连接 URL,例如

FrontendService: Starting and exposing JDBC connection at: jdbc:hive2://localhost:10009/
如果出现问题,您也应该能够在日志文件中找到一些线索。

或者,它可以在前台运行,并将日志和其他输出写入 stdout/stderr。如果使用像supervisord.

bin/kyuubi run
1.5. 使用 Hive 直线
Kyuubi服务器兼容Apache Hive beeline,在预建的Spark包 K Y U U B I H O M E / e x t e r n a l s 目录下可以找到内置的 b e e l i n e 工具,例如 KYUUBI_HOME/externals目录下可以找到内置的beeline工具,例如 KYUUBIHOME/externals目录下可以找到内置的beeline工具,例如KYUUBI_HOME/externals/spark-3.0.1-bin-hadoop2.7/bin/beeline

1.5.1. 打开连接
下面的命令将告诉 Kyuubi 服务器与它自己创建一个会话。

bin/beeline -u ‘jdbc:hive2://localhost:10009/’
Connecting to jdbc:hive2://localhost:10009/
Connected to: Spark SQL (version 1.0.2)
Driver: Hive JDBC (version 2.3.7)
Transaction isolation: TRANSACTION_REPEATABLE_READ
Beeline version 2.3.7 by Apache Hive
0: jdbc:hive2://localhost:10009/>
在这种情况下,会话将为名为“anonymous”的用户创建。

Kyuubi 将使用kyuubi-spark-sql-engine-.jar. 在完全建立会话之前,应用程序准备好需要一段时间。否则,现有的应用程序将被重新启动,这里的时间成本可以忽略不计。

类似地,您可以为另一个用户(或主体、主题,以及您定义的其他内容)创建一个会话,例如 named kentyao,

bin/beeline -u ‘jdbc:hive2://localhost:10009/’ -n kentyao
在这种情况下,之前为用户 ‘anonymous’ 创建的 Spark 应用程序将不会被重用,而是会为用户 ‘kentyao’ 提交一个全新的应用程序。

然后,您可以看到在您的本地环境中运行了 3 个进程,其中 1 个KyuubiServer实例和 2 个SparkSubmit实例作为 SQL 引擎。

75730 Jps
70843 KyuubiServer
72566 SparkSubmit
75356 SparkSubmit
1.5.2. 执行语句
如果 beeline 会话连接成功,那么您现在可以运行 Spark SQL 支持的任何查询。例如,

0: jdbc:hive2://localhost:10009/> select timestamp ‘2018-11-17’;
2020-11-02 20:51:49.019 INFO operation.ExecuteStatement:
Spark application name: kyuubi_kentyao_spark_20:44:57.240
application ID: local-1604321098626
application web UI: http://10.242.189.214:64922
master: local[*]
deploy mode: client
version: 3.0.1
Start time: 2020-11-02T12:44:57.398Z
User: kentyao
2020-11-02 20:51:49.501 INFO codegen.CodeGenerator: Code generated in 13.673142 ms
2020-11-02 20:51:49.625 INFO spark.SparkContext: Starting job: collect at ExecuteStatement.scala:49
2020-11-02 20:51:50.129 INFO scheduler.DAGScheduler: Job 0 finished: collect at ExecuteStatement.scala:49, took 0.503838 s
2020-11-02 20:51:50.151 INFO codegen.CodeGenerator: Code generated in 9.685752 ms
2020-11-02 20:51:50.228 INFO operation.ExecuteStatement: Processing kentyao’s query[d80a2664-342d-4f38-baaa-82e88e68a43b]: RUNNING_STATE -> FINISHED_STATE, statement: select timestamp ‘2018-11-17’, time taken: 1.211 seconds
±---------------------------------+
| TIMESTAMP ‘2018-11-17 00:00:00’ |
±---------------------------------+
| 2018-11-17 00:00:00.0 |
±---------------------------------+
1 row selected (1.466 seconds)
如上例所示,您可以在直线控制台中检索所有操作日志、结果模式和结果到您的客户端。

此外,操作日志中还会打印一些有关与此连接关联的后台 Spark SQL 应用程序的有用信息。例如,您可以从日志中获取 Spark Web UI 以进行调试或调整。

…/_images/spark_jobs_page.png

1.5.3. 关闭连接
通过执行关闭 beeline 和 Kyuubi 服务器之间的会话!quit,例如,

0: jdbc:hive2://localhost:10009/> !quit
Closing: 0: jdbc:hive2://localhost:10009/
1.6. 停止九尾
通过在$KYUUBI_HOME目录中运行以下命令来停止 Kyuubi :

bin/kyuubi.sh stop
该KyuubiServer实例将立即停止,而 SQL 引擎的应用程序仍将活动一段时间。

如果在 SQL 引擎应用程序自行终止之前再次启动 Kyuubi,它将重新连接到新创建的KyuubiServer实例。

参考资料

https://kyuubi.apache.org/docs/stable/quick_start/quick_start.htm
https://jishuin.proginn.com/p/763bfbd673bb
https://blog.csdn.net/u011598442/article/details/120540377

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猿与禅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值