OKEを使用したCassandraおよびSparkアクティビティのデータ・ローカリティの改善

はじめに

Apache Cassandraは、各ノードがトークン範囲を所有する分散マスターレス・データベースです。Apache Sparkは、Spark-Cassandraコネクタを使用してCassandraレプリカから読み取れる分散コンピュート・エンジンです。Kubernetesでは、ポッドはデータが存在する場所を知らずにスケジュールされるため、データのローカリティは保証されません。

このチュートリアルでは、OKEがKubernetesプリミティブ(StatefulSets (Cassandraの安定したアイデンティティ)、ノード・ラベル、およびSparkエグゼキュータをCassandraポッドとコロケーションするためのアフィニティ/アンチアフィニティ)を使用して、どのようにローカリティを改善できるかを示します。そのため、読取りは同じノード(理想)または最悪の場合は、同じロケーション・レプリカへの1ホップから提供されます。

目的

前提条件

  1. OCIコンソールでスタックを開くには、次をクリックします:

    Oracle Cloudへのデプロイ

  2. ガイド付きフローに従って、次の操作を行います。

  1. スタックが完了すると、出力セクションに要塞のIPが表示されます。

    スタック出力

タスク2: 要塞への接続とデプロイメントの検証

初期インフラストラクチャ・プロビジョニングは約15分以内に完了しますが、フル・セットアップ(要塞のcloud-init経由)では、Helmのインストール、CassandraとSparkのデプロイ、および読取りジョブの実行に約20分かかります。

  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=trueおよび data-locality=enabledの2つのノードが必要です。

    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. ワーカー・サブネットでフロー・ログを有効にします。

    OCIコンソールで、OKEワーカー・サブネットのフロー・ログを有効にします。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チャネルで無料のラーニング・コンテンツにアクセスしてください。また、Oracle Learning Explorerになるには、education.oracle.com/learning-explorerにアクセスしてください。

製品ドキュメントについては、Oracle Help Centerを参照してください。