部署 Kyuubi

在 YARN 上部署 Kyuubi 引擎

师成师成· 更新于 2026-09-29· 阅读 24 分钟· 0 次阅读

登录后可跨设备保存划线和私人笔记登录

在 YARN 上部署 Kyuubi Spark 引擎

前置条件

要在 YARN 上部署 Kyuubi 的 Spark SQL 引擎,你最好先了解以下内容。

  • 了解 在 YARN 上运行 Spark 的基础知识

  • 一份带有 YARN 支持构建的 Spark 二进制发行版

  • 一个运行中的 Apache Hadoop YARN 集群

  • 一个运行中的 Apache Hadoop HDFS 集群

  • 在 Kyuubi 服务器所在机器上配置 Hadoop 客户端配置

配置

环境变量

HADOOP_CONF_DIR 和 YARN_CONF_DIR 需要配置其一,并指向 Hadoop 客户端配置目录,通常为 $HADOOP_HOME/etc/hadoop。

如果 HADOOP_CONF_DIR 正确指向了 YARN 和 HDFS 集群,你就应该能够在 YARN 上运行 SparkPi 示例。

$ HADOOP_CONF_DIR=/path/to/hadoop/conf $SPARK_HOME/bin/spark-submit \
    --class org.apache.spark.examples.SparkPi \
    --master yarn \
    --queue thequeue \
    $SPARK_HOME/examples/jars/spark-examples*.jar \
    10

如果 SparkPi 运行成功,请在 $KYUUBI_HOME/conf/kyuubi-env.sh 或 $SPARK_HOME/conf/spark-env.sh 中进行配置,例如:

$ echo "export HADOOP_CONF_DIR=/path/to/hadoop/conf" >> $KYUUBI_HOME/conf/kyuubi-env.sh

Spark 属性

这些属性由 Spark 定义,Kyuubi 会将它们传递给 spark-submit 以创建 Spark 应用程序。

注意: 如果某个特定用户的对应应用程序已经存在,这些属性都不会生效。

  • 在 JDBC 连接 URL 中指定,例如 jdbc:hive2://localhost:10009/;#spark.master=yarn;spark.yarn.queue=thequeue
  • 在 $KYUUBI_HOME/conf/kyuubi-defaults.conf 中指定
  • 在 $SPARK_HOME/conf/spark-defaults.conf 中指定

注意: 优先级由上至下依次降低。

Master

设置 spark.master=yarn 会告知 Kyuubi 将 Spark SQL 引擎应用程序提交到 YARN 集群管理器。

队列

在 JDBC 连接字符串中设置 spark.yarn.queue=thequeue,以告知 Kyuubi 在 YARN 集群中使用该队列;否则将默认使用 Kyuubi 服务端配置的队列。

资源规模

通过 JDBC 连接字符串传递以下配置,用于设置 Spark executor 的实例数量,以及 Spark driver、ApplicationMaster 和每个 executor 所占用的 CPU 数量与内存量。

名称默认值含义
spark.executor.instances1静态分配时的执行器数量
spark.executor.cores1每个执行器使用的内核数
spark.yarn.am.memory512m客户端模式下 YARN Application Master 使用的内存量
spark.yarn.am.memoryOverheadamMemory * 0.10,最小为 384客户端模式下每个 AM 进程分配的非堆内存量
spark.driver.memory1gDriver 进程使用的内存量
spark.driver.memoryOverheaddriverMemory * 0.10,最小为 384集群模式下每个 Driver 进程分配的非堆内存量
spark.executor.memory1g执行器进程使用的内存量
spark.executor.memoryOverheadexecutorMemory * 0.10,最小为 384每个执行器进程分配的额外内存量。这部分内存用于涵盖诸如 VM 开销、驻留字符串以及其他本地开销等情况

建议在 Kyuubi 中使用动态分配,因为 SQL 引擎会长时间运行,周期性地执行来自客户端的用户查询,而这些查询对计算资源的需求各不相同。当查询负载较轻或 SQL 引擎处于空闲状态时,让 Spark 释放部分执行器会更好。

调优

你可以指定 spark.yarn.archive 或 spark.yarn.jars,指向 HDFS 上一个所有用户可读的、包含 Spark jar 的位置,这样 YARN 就可以将其缓存在节点上,从而无需在每次应用运行时都重新分发。

其他配置

请参阅 Spark 属性以了解其他可用的配置项。

Kerberos

Kyuubi 目前不支持 Spark 的 YARN 专用 Kerberos 配置,因此现阶段不应使用 spark.kerberos.keytab 和 spark.kerberos.principal。

作为替代方案,你可以通过 Kyuubi Server 所在本机上的 crontab 任务定期执行 kinit 进程,或者直接使用 Kyuubi Kinit。

在 YARN 上部署 Kyuubi Flink 引擎

环境要求

要在 YARN 上部署 Kyuubi 的 Flink SQL 引擎,你最好先了解以下内容。

  • 了解 在 YARN 上运行 Flink 的基础知识

  • 一个启用了 YARN 支持的 Flink 二进制发行版

  • 一个正常运行的 Apache Hadoop YARN 集群

    • 通过运行 yarn top 确保你的 YARN 集群已准备好接受 Flink 应用,输出中不应出现任何错误信息
  • 一个正常运行的对象存储集群,例如 HDFS、S3 和 Minio 等

  • 在 Kyuubi Server 所在的机器上配置好 Hadoop 客户端

Flink 部署模式

目前,Flink 在 YARN 上支持两种部署模式:YARN 应用模式 和 YARN 会话模式。

  • YARN 应用模式:在此模式下,Kyuubi 会启动一个专用的 Flink 应用集群,并在其上运行 SQL 引擎。
  • YARN 会话模式:在此模式下,Kyuubi 会在本地启动 Flink SQL 引擎,并连接到一个正在运行的 Flink YARN 会话集群。

由于 Kyuubi 必须在启动 SQL 引擎之前确定部署模式,因此需要在 Kyuubi 配置中指定部署模式。

# candidates: yarn-application, yarn-session
flink.execution.target=yarn-application

YARN 应用模式

Flink 配置

由于 Flink SQL 引擎运行在 JobManager 内部,建议根据您的工作负载调整 JobManager 的资源配置。

相关的 Flink 配置列在下方(更多详情请参阅 Flink Configuration):

名称默认值含义
yarn.appmaster.vcores1JobManager(YARN 应用程序主节点)使用的虚拟核数(vcores)。
jobmanager.memory.process.size(无)JobManager 进程的内存总大小。

请注意,Flink 应用模式目前不支持多作业的 HA,这也适用于 Kyuubi 的 Flink SQL 引擎。如果 JobManager 失败并重启,已提交的作业不会被恢复,需要重新提交。

环境

需要配置 HADOOP_CONF_DIR 或 YARN_CONF_DIR 并将其指向 Hadoop 客户端配置目录,通常为 $HADOOP_HOME/etc/hadoop。

您可以通过以下命令验证您的配置:

# we assume to be in the root directory of
# the unzipped Flink distribution

# (0) export HADOOP_CLASSPATH
export HADOOP_CLASSPATH=`hadoop classpath`

# (1) submit a Flink job and ensure it runs successfully
./bin/flink run -m yarn-cluster ./examples/streaming/WordCount.jar

YARN 会话模式

Flink 配置

execution.target: yarn-session
# YARN Session Cluster application id.
yarn.application.id: application_00000000XX_00XX

环境

需要配置 HADOOP_CONF_DIR 或 YARN_CONF_DIR,并使其指向 Hadoop 客户端配置目录,通常为 $HADOOP_HOME/etc/hadoop。

如果 HADOOP_CONF_DIR 正确指向了 YARN 和 HDFS 集群,并且设置了 HADOOP_CLASSPATH 环境变量,你就可以启动一个 Flink on YARN 会话,并提交一个示例作业:

# we assume to be in the root directory of
# the unzipped Flink distribution

# (0) export HADOOP_CLASSPATH
export HADOOP_CLASSPATH=`hadoop classpath`

# (1) Start YARN Session
./bin/yarn-session.sh --detached

# (2) You can now access the Flink Web Interface through the
# URL printed in the last lines of the command output, or through
# the YARN ResourceManager web UI.

# (3) Submit example job
./bin/flink run ./examples/streaming/TopSpeedWindowing.jar

# (4) Stop YARN session (replace the application id based
# on the output of the yarn-session.sh command)
echo "stop" | ./bin/yarn-session.sh -id application_XXXXX_XXX

如果 TopSpeedWindowing 通过,请在 $KYUUBI_HOME/conf/kyuubi-env.sh 中对其进行配置。

$ echo "export HADOOP_CONF_DIR=/path/to/hadoop/conf" >> $KYUUBI_HOME/conf/kyuubi-env.sh

必需的环境变量

同样需要设置 FLINK_HADOOP_CLASSPATH。

对于使用 Hadoop 3.x 的用户,推荐使用 Hadoop shaded client 代替 Hadoop 原生 jar 包。对于使用 Hadoop 2.x 的用户,应将 FLINK_HADOOP_CLASSPATH 设置为 hadoop classpath,以使用 Hadoop 原生 jar 包。对于完全不使用 Hadoop 服务(如 HDFS、YARN)的用户,同样需要 Hadoop 客户端 jar 包,并建议像 Hadoop 3.x 用户那样使用 Hadoop shaded client。

关于 Hadoop shaded client 的详细信息,请参阅 HADOOP-11656。

要使用 Hadoop shaded client,请按如下方式配置 $KYUUBI_HOME/conf/kyuubi-env.sh:

$ echo "export FLINK_HADOOP_CLASSPATH=/path/to/hadoop-client-runtime-3.3.2.jar:/path/to/hadoop-client-api-3.3.2.jar" >> $KYUUBI_HOME/conf/kyuubi-env.sh

要使用 Hadoop 原生 jar 包,请按如下方式配置 $KYUUBI_HOME/conf/kyuubi-env.sh:

$ echo "export FLINK_HADOOP_CLASSPATH=`hadoop classpath`" >> $KYUUBI_HOME/conf/kyuubi-env.sh

Kerberos

对于 YARN application 模式,Flink 原生支持 Kerberos,详情参见 Flink Kerberos 配置。

对于 YARN session 模式,security.kerberos.login.keytab 和 security.kerberos.login.principal 并不生效,因为 Kyuubi 的 Flink SQL 引擎主要依赖 Flink SQL client,而它目前尚不支持 Flink Kerberos 配置。

作为替代方案,你可以在托管 Kyuubi server 的本地机器上通过 crontab 任务定时执行 kinit 进程,或者直接使用 Kyuubi Kinit。

在 YARN 上部署 Kyuubi Hive 引擎

前置条件

要在 YARN 上部署 Kyuubi 的 Hive SQL 引擎,你最好先了解以下内容。

配置项

环境变量

HADOOP_CONF_DIR 或 YARN_CONF_DIR 中至少配置其一,并指向 Hadoop 客户端配置目录,通常为 $HADOOP_HOME/etc/hadoop。

如果 HADOOP_CONF_DIR 已正确指向 YARN 和 HDFS 集群,你就应该能够在 YARN 上运行 Hive SQL 示例了。

$ $HIVE_HOME/bin/hiveserver2
# In another terminal
$ $HIVE_HOME/bin/beeline -u 'jdbc:hive2://localhost:10000/default'
0: jdbc:hive2://localhost:10000/default> CREATE TABLE pokes (foo INT, bar STRING);
0: jdbc:hive2://localhost:10000/default> INSERT INTO TABLE pokes VALUES (1, 'hello');

如果 Hive SQL 执行通过,并且在 YARN Web UI 中可以看到对应的作业,就说明 Hive 环境正常。

必需的环境变量

HIVE_HADOOP_CLASSPATH 同样是必需的。它应包含 commons-collections-*.jar、hadoop-client-runtime-*.jar、hadoop-client-api-*.jar 和 htrace-core4-*.jar。这四个 jar 都位于 HADOOP_HOME 中。

例如,在 Hadoop 3.1.0 版本中,它们的位置如下。

  • ${HADOOP_HOME}/share/hadoop/common/lib/commons-collections-3.2.2.jar
  • ${HADOOP_HOME}/share/hadoop/client/hadoop-client-runtime-3.1.0.jar
  • ${HADOOP_HOME}/share/hadoop/client/hadoop-client-api-3.1.0.jar
  • ${HADOOP_HOME}/share/hadoop/common/lib/htrace-core4-4.1.0-incubating.jar

可以在 $KYUUBI_HOME/conf/kyuubi-env.sh 或 $HIVE_HOME/conf/hive-env.sh 中进行配置,例如:

$ echo "export HADOOP_CONF_DIR=/path/to/hadoop/conf" >> $KYUUBI_HOME/conf/kyuubi-env.sh
$ echo "export HIVE_HADOOP_CLASSPATH=${HADOOP_HOME}/share/hadoop/common/lib/commons-collections-3.2.2.jar:${HADOOP_HOME}/share/hadoop/client/hadoop-client-runtime-3.1.0.jar:${HADOOP_HOME}/share/hadoop/client/hadoop-client-api-3.1.0.jar:${HADOOP_HOME}/share/hadoop/common/lib/htrace-core4-4.1.0-incubating.jar" >> $KYUUBI_HOME/conf/kyuubi-env.sh

评论

登录后参与评论

正在加载评论…