使用 OKE 改善 Cassandra 和 Spark 活动的数据局部性

简介

Apache Cassandra 是一个分布式无主数据库,每个节点都拥有令牌范围。Apache Spark 是一个分布式计算引擎,可以使用 Spark – Cassandra 连接器从 Cassandra 副本中读取数据。在 Kubernetes 中,云池是在不了解数据所在位置的情况下调度的,因此无法保证数据位置。

本教程展示了 OKE 如何利用 Kubernetes 基元来提高本地性:StatefulSets(Cassandra 的稳定身份)、节点标签以及与 Cassandra pod 协同定位 Spark 执行器的关联性/反关联性—因此,从同一节点(理想)或最坏的情况下,从一个跃点到同一位置的副本。

目标

Prerequisites

  1. 单击下方可在 OCI 控制台中打开堆栈:

    部署到 Oracle Cloud

  2. 按照引导流进行操作,以便:

  1. 堆栈完成后,您将在输出部分中获取堡垒的 IP。

    堆栈输出

任务 2:连接到堡架并验证部署

初始基础结构预配在大约 15 分钟内完成,但完整设置(通过堡垒上的 cloud-init)需要大约 20 分钟的时间来安装 Helm、部署 Cassandra 和 Spark 并运行读取作业。

  1. 要监视进程,请通过 SSH 进入堡垒:

    ssh -i <path-to-private-key> opc@<bastion_public_ip>

  2. 运行以下命令以监视 cloudinit 脚本的进度。

    tail -f /var/log/oke-automation.log

  3. 当您看到正在读取的 3 种种子 Cassandra 值和 Cloud-init complete 消息时,堆栈将完成。

    Cloud-init 完成

注意:Cloudinit 脚本执行了以下操作:

  1. 从堡垒 VM 确认现有节点:

    kubectl get nodes

  2. 确认地点标签。需要具有 spark-locality=truedata-locality=enabled 的两个节点。

    kubectl get nodes --show-labels | grep -E 'spark-locality|data-locality'

  3. 验证 Cassandra 位置:

    kubectl -n k8ssandra-operator get pods -l app.kubernetes.io/name=cassandra -o wide

  4. 验证 Spark 位置:

    kubectl -n spark get pods -o wide

  5. 检查 Spark 读取作业日志。您应看到 testks.users 中的 3 条记录并成功运行。

    kubectl -n spark logs job/spark-read-cassandra --tail=20

提示:在 Cassandra 和 Spark 云池中匹配 NODE 值可确认共同定位和理想的位置条件。有关更确凿的流日志结果,请使用 cqlsh 将其他行插入到 testks.users 中。较大的数据集将产生更多的读取流量,使局部性与非局部性影响更容易观察。

下面,您可以看到上述命令的示例输出:

节点检查

任务 3:使用 VCN 流日志观察网络效果

使用 VCN 流日志了解 Spark 读取期间的 Cassandra 流量流向。当前的自动化使用 Flannel (VXLAN),这会影响流日志可以看到的内容。

CNI 的变化

  1. 在 worker 子网中启用流日志。

    在 OCI 控制台中,为 OKE Worker 子网启用流日志。重新运行(或等待)Spark 读取作业以生成流量。

  2. 查询流日志(选择与集群匹配的路径)

如果使用此自动化 (Flannel/VXLAN):使用类似于以下内容的高级查询:

   search "<your-flow-log-OCID>"
   | where data.protocolName = 'UDP'
   | where data.destinationPort = <vxlan-port>

替换为实际的流日志资源 OCID,并将替换为叠加使用的端口(在本练习中:14789,请参见下图)。

UDP 流量

如果群集使用 NPN:

注:流日志摄取新条目可能需要几分钟时间。

主要注意事项

提供指向其他资源的链接。此部分是可选的;如果不需要,则删除。

确认

更多学习资源

通过 docs.oracle.com/learn 浏览其他实验室,或者通过 Oracle Learning YouTube 频道访问更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 以成为 Oracle Learning Explorer。

有关产品文档,请访问 Oracle 帮助中心