在 YARN 上部署 Kyuubi 引擎
在 YARN 上部署 Kyuubi Spark 引擎
前置条件
要在 YARN 上部署 Kyuubi 的 Spark SQL 引擎,你最好先了解以下内容。
了解 在 YARN 上运行 Spark 的基础知识
一份带有 YARN 支持构建的 Spark 二进制发行版
- 你可以使用内置的 Spark 发行版
- 你可以直接从 Spark 官方网站获取
- 你也可以使用
-PyarnMaven 选项构建 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.shSpark 属性
这些属性由 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.instances | 1 | 静态分配时的执行器数量 |
| spark.executor.cores | 1 | 每个执行器使用的内核数 |
| spark.yarn.am.memory | 512m | 客户端模式下 YARN Application Master 使用的内存量 |
| spark.yarn.am.memoryOverhead | amMemory * 0.10,最小为 384 | 客户端模式下每个 AM 进程分配的非堆内存量 |
| spark.driver.memory | 1g | Driver 进程使用的内存量 |
| spark.driver.memoryOverhead | driverMemory * 0.10,最小为 384 | 集群模式下每个 Driver 进程分配的非堆内存量 |
| spark.executor.memory | 1g | 执行器进程使用的内存量 |
| spark.executor.memoryOverhead | executorMemory * 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 二进制发行版
- 从 Flink 官方网站 下载最新版本的 Flink 发行版并解压
一个正常运行的 Apache Hadoop YARN 集群
- 通过运行
yarn top确保你的 YARN 集群已准备好接受 Flink 应用,输出中不应出现任何错误信息
- 通过运行
在 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-applicationYARN 应用模式
Flink 配置
由于 Flink SQL 引擎运行在 JobManager 内部,建议根据您的工作负载调整 JobManager 的资源配置。
相关的 Flink 配置列在下方(更多详情请参阅 Flink Configuration):
| 名称 | 默认值 | 含义 |
|---|---|---|
| yarn.appmaster.vcores | 1 | JobManager(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.jarYARN 会话模式
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.shKerberos
对于 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 引擎,你最好先了解以下内容。
了解 在 YARN 上运行 Hive 的基础知识
Hive 的二进制发行版
一个可用的 Apache Hadoop YARN 集群
- 通过运行
yarn top确认你的 YARN 集群已准备好接收 Hive 应用,输出中不应出现任何错误信息
- 通过运行
一个可用的 Apache Hadoop HDFS 集群
在部署 Kyuubi server 的机器上配置好 Hadoop 客户端配置
一个可用的 Hive Metastore 服务
配置项
环境变量
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评论
登录后参与评论
KnowForge