ノート:

Oracle Cloud Infrastructure Data FlowでAutonomous DatabaseおよびKafkaで大きなファイルを処理

イントロダクション

Oracle Cloud Infrastructure (OCI) Data Flowは、Apache Spark TMアプリケーションを実行するためのフルマネージド・サービスです。データ・フローは、大規模なファイル、ストリーミング、データベース操作の処理に使用され、非常に高いスケーラブルな処理で多くのアプリケーションを構築できます。Apache Sparkは、クラスタ化されたマシンをスケーリングして使用し、最小構成でジョブをパラレル化できます。

Apache Sparkを管理対象サービス(データ・フロー)として使用すると、クラウド処理能力を乗算する多くのスケーラブル・サービスを追加できます。このチュートリアルでは、次の方法について説明します。

dataflow-use-case.png

このチュートリアルでは、大きいファイルの処理、データベースの問合せおよびデータのマージ/結合に使用される最も一般的なアクティビティを参照して、メモリー内の別の表を作成できます。この膨大なデータを、非常に低コストで高パフォーマンスなKafkaキューに書き込むことができます。

目的

前提条件

タスク1: Object Storage構造の作成

Object Storageは、デフォルトのファイル・リポジトリとして使用されます。他のタイプのファイル・リポジトリを使用できますが、Object Storageは、パフォーマンスに優れたファイルを操作するためのシンプルで低コストの方法です。このチュートリアルでは、両方のアプリケーションがオブジェクト・ストレージから大きなCSVファイルをロードし、Apache Sparkが高速で大量のデータを処理するスマートさを示します。

  1. コンパートメントの作成: コンパートメントは、クラウド・リソースを編成および分離するために重要です。IAMポリシーによってリソースを分離できます。

    • このリンクを使用して、コンパートメントのポリシーを理解および設定できます: コンパートメントの管理

    • 1つのコンパートメントを作成して、このチュートリアルの2つのアプリケーションのすべてのリソースをホストします。analyticsという名前のコンパートメントを作成します。

    • Oracle Cloudのメイン・メニューに移動し、「アイデンティティとセキュリティ」「コンパートメント」を検索します。「コンパートメント」セクションで、「コンパートメントの作成」をクリックし、名前を入力します。

      create-compartment.png

      ノート: ユーザーのグループへのアクセス権を付与し、ユーザーを含める必要があります。

    • 「コンパートメントの作成」をクリックして、コンパートメントを含めます。

  2. オブジェクト・ストレージでのバケットの作成: バケットはオブジェクトを格納するための論理コンテナであるため、このデモに使用されるすべてのファイルはこのバケットに格納されます。

    • Oracle Cloudのメイン・メニューに移動し、「ストレージ」および「バケット」を検索します。「バケット」セクションで、前に作成したコンパートメント(分析)を選択します。

      選択- compartment.png

    • 「バケットの作成」をクリックします。4つのバケットを作成します: apps、data、dataflow-logs、Wallet

      create-bucket.png

    • これらの4つのバケットとともにバケット名情報を入力し、デフォルトの選択で他のパラメータを保守します。

    • バケットごとに、「作成」をクリックします。作成されたバケットを確認できます。

      バケット-dataflow.png

ノート:バケットのIAMポリシーを確認します。デモ・アプリケーションでこれらのバケットを使用する場合は、ポリシーを設定する必要があります。オブジェクト・ストレージの概要およびIAMポリシーで、概念および設定を確認できます。

タスク2: Autonomous Databaseの作成

Oracle Cloud Autonomous Databaseは、Oracle Databaseの管理対象サービスです。このチュートリアルでは、アプリケーションはセキュリティ上の理由からWalletを介してデータベースに接続します。

ノート: Autonomous DatabaseにアクセスするためのIAMポリシーを確認します(Autonomous DatabaseのIAMポリシー)。

タスク3: CSVサンプル・ファイルのアップロード

Apache Sparkのパワーを示すために、アプリケーションは1,000,000行のCSVファイルを読み取ります。このデータは、1つのコマンドラインでAutonomous Data Warehouseデータベースに挿入され、Kafkaストリーミング(Oracle Cloud Streaming)で公開されます。これらのリソースはすべてスケーラブルで、大量のデータに適しています。

GDPPERCAPTAという名前の新しい表が正常にインポートされたことを確認できます。

adw-table-imported.png

タスク4: ADW ADMINパスワード用のシークレットVaultの作成

セキュリティ上の理由から、ADW ADMINパスワードはVaultに保存されます。Oracle Cloud Vaultはこのパスワードをセキュリティでホストでき、アプリケーション上でOCI認証を使用してアクセスできます。

ノート: OCI VaultのIAMポリシーを確認します(OCI Vault IAMポリシー)。

タスク5: Oracle Cloud StreamingサービスでのKafkaストリーミングの作成

Oracle Cloud Streamingは、マネージド・ストリーミング・サービスなどのKafkaです。Kafka APIおよび共通SDKを使用してアプリケーションを開発できます。このチュートリアルでは、ストリーミングのインスタンスを作成し、大量のデータを公開して消費するために、両方のアプリケーションで実行されるように構成します。

  1. Oracle Cloudのメイン・メニューから、「アナリティクスとAI」「ストリーム」に移動します。

  2. コンパートメントをanalyticsに変更します。このデモのすべてのリソースは、このコンパートメントに作成されます。これにより、IAMをより安全で簡単に制御できます。

  3. 「ストリームの作成」をクリックします。

    create-stream.png

  4. 名前をkafka_like (たとえば)と入力し、他のすべてのパラメータをデフォルト値で保守できます。

    save-create-stream.png

  5. 「作成」をクリックしてインスタンスを初期化します。

  6. 「アクティブ」ステータスを待機します。これでインスタンスを使用できます。

    ノート:ストリーミング作成プロセスでは、「デフォルトのストリーム・プールの自動作成」オプションを選択して、デフォルト・プールを自動的に作成できます。

  7. DefaultPoolリンクをクリックします。

    default-pool-option.png

  8. 接続設定を表示します。

    stream-conn-settings.png

    kafka-conn.png

  9. この情報は次のステップで必要になるため、注釈を付けます。

ノート: OCIストリーミングのIAMポリシーを確認します(OCIストリーミングのIAMポリシー)。

タスク6: KafkaにアクセスするためのAUTH TOKENの生成

OCI IAM上のユーザーに関連付けられた認証トークンを使用して、Oracle CloudのOCIストリーミング(Kafka API)およびその他のリソースにアクセスできます。Kafka接続設定では、SASL接続文字列には、前のタスクで説明したパスワードおよびAUTH_TOKEN値というパラメータがあります。OCIストリーミングへのアクセスを有効にするには、OCIコンソールのユーザーに移動し、AUTH TOKENを作成する必要があります。

  1. Oracle Cloudのメイン・メニューから、「アイデンティティとセキュリティ」「ユーザー」に移動します。

    ノート: AUTH TOKENを作成する必要があるユーザーは、これまでに作成されたリソースのOCI CLIおよびすべてのIAMポリシー構成で構成されているユーザーであることに注意してください。リソースは次のとおりです。

    • Oracle Cloud Autonomous Data Warehouse
    • Oracle Cloudストリーミング
    • Oracle Object Storage
    • Oracle Data Flow
  2. ユーザー名をクリックして詳細を表示します。

    auth_token_create.png

  3. コンソールの左側にある「認証トークン」オプションをクリックし、「トークンの生成」をクリックします。

    ノート: トークンはこのステップでのみ生成され、ステップの完了後は表示されません。そのため、値をコピーして保存します。トークン値を失った場合は、認証トークンを再度生成する必要があります。

    auth_token_1.png

    auth_token_2.png

タスク7: デモ・アプリケーションの設定

このチュートリアルには、必要な情報を設定する2つのデモ・アプリケーションがあります。

  1. 次のリンクを使用してアプリケーションをダウンロードします。

  2. Oracle Cloudコンソールで、次の詳細を確認します。

    • テナンシ・ネームスペース

      テナンシ-namespace-1.png

      tenancy-namespace-detail.png

    • パスワード・シークレット

      ボールト-adw.png

      vault-adw-detail.png

      シークレット-adw.png

    • ストリーミング接続設定

      kafka-conn.png

    • 認証トークン

      auth_token_create.png

      auth_token_2.png

  3. ダウンロードしたzipファイル(Java-CSV-DB.zipおよびJavaConsumeKafka.zip)を開きます。/src/main/java/exampleフォルダに移動し、Example.javaコードを見つけます。

    コード-variables.png

    • これらは、テナンシ・リソース値で変更する必要がある変数です。

      変数名 リソース名 情報タイトル
      ネームスペース テナンシ・ネームスペース テナント
      OBJECT_STORAGE_NAMESPACE テナンシ・ネームスペース テナント
      PASSWORD_SECRET_OCID PASSWORD_SECRET_OCID OCID
      streamPoolId ストリーミング接続設定 SASL接続文字列のocid1.streampool.oc1.iad.....値
      kafkaUsername ストリーミング接続設定 SASL接続文字列内の" " "内のusenameの値
      kafkaPassword 認証トークン 値は作成ステップでのみ表示されます。

ノート:このチュートリアルで作成されるすべてのリソースは、US-ASHBURN-1リージョンにあります。作業するリージョンをチェックインします。リージョンを変更する場合は、2つのコード・ファイルで次の詳細を変更する必要があります。

タスク8: Javaコードの理解

このチュートリアルはJavaで作成され、このコードはPythonにも移植できます。チュートリアルは2つの部分に分かれています。

効率性とスケーラビリティを証明するために、両方のアプリケーションが開発され、統合プロセスの一般的なユース・ケースでいくつかの可能性が示されました。したがって、両方のアプリケーションのコードは、次の例を示しています。

このデモはローカル・マシンで実行でき、データ・フロー・インスタンスにデプロイしてジョブ実行として実行できます。

ノート:データ・フロー・ジョブとローカル・マシンの両方で、OCI CLI構成を使用してOCIリソースにアクセスします。データ・フロー側では、すべてが事前構成されているため、パラメータを変更する必要はありません。ローカル・マシン側で、OCI CLIをインストールし、OCIリソースにアクセスするためのテナント、ユーザーおよび秘密キーを構成します。

Example.javaコードをセクションに表示します:

タスク9: Mavenを使用したアプリケーションのパッケージ化

Apache Sparkでジョブを実行する前に、アプリケーションをMavenでパッケージ化する必要があります。Mavenは、ライブラリおよびプラグインを使用してアプリケーションをパッケージ化する最も既知のユーティリティの1つです。

注意:

  1. Java-CSV-DBパッケージ

    1. /Java-CSV-DBフォルダに移動し、次のコマンドを実行します。

      mvn package

    2. Mavenがパッケージを開始していることがわかります。

      maven-package-1a.png

    3. すべてが正しい場合は、「成功」メッセージが表示されます。

      maven-success-1a.png

    4. ローカルApache Sparkマシンでアプリケーションをテストするには、次のコマンドを実行します:

      spark-submit --class example.Example target/loadadw-1.0-SNAPSHOT.jar

  2. JavaConsumeKafkaパッケージ

    1. /JavaConsumeKafkaフォルダに移動し、次のコマンドを実行します。

      mvn package

    2. Mavenがパッケージを開始していることがわかります。

      maven-package-2a.png

    3. すべてが正しい場合は、「成功」メッセージが表示されます。

      maven-success-2a.png

    4. ローカルApache Sparkマシンでアプリケーションをテストするには、次のコマンドを実行します:

      spark-submit --class example.Example target/loadkafka-1.0-SNAPSHOT.jar

タスク10: 実行の確認

  1. ADW挿入の確認

    1. Oracle Cloudのメイン・メニューに移動し、「Oracle Database」および「Autonomous Data Warehouse」を選択します。

    2. 「処理済ログ」インスタンスをクリックして詳細を表示します。

    3. 「データベース・アクション」をクリックして、データベース・ユーティリティに移動します。

      adw-actions.png

    4. ADMINユーザーの資格証明を入力します。

      adw-login.png

    5. 「SQL」オプションをクリックして、問合せユーティリティに移動します。

      adw-select-sql.png

    6. 問合せを実行して、表の1,000,000行を表示します。

      ADW問合せ-organizations.png

  2. 実行ログの確認

    • ジョブがデータセットにアクセスしてロードできる場合は、実行ログで確認できます。

      spark-csv-results.png

タスク11: データ・フロー・ジョブの作成および実行

これで、両方のアプリケーションがローカルApache Sparkマシンで正常に実行され、テナンシのOracle Cloudデータ・フローにデプロイできるようになりました。

  1. Oracle Cloudのメイン・メニューから、「アナリティクスとAI」および「データ・フロー」に移動します。

  2. データ・フロー・アプリケーションを作成する前に、必ずanalyticsコンパートメントを選択してください。

  3. 「アプリケーションの作成」をクリックします。

    create-dataflow-app.png

  4. 次のイメージに示すように、パラメータを完了します。

    データフロー-app.png

  5. 「作成」をクリックします。

  6. 作成後、「デモのスケーリング」リンクをクリックして詳細を表示します。

  7. 「実行」をクリックして、ジョブを実行します。

  8. パラメータを確認し、「実行」を再度クリックします。

    dataflow-run-job.png

  9. ジョブのステータスを表示し、「ステータス」が「成功」に変わり、結果が表示されるまで待ちます。

    dataflow-run-status.png

    dataflow-run-success.png

次のステップ

最初のアプリケーションは、データをKafka Streamingに公開します。2番目のアプリケーションは、Kafkaからこのデータを消費します。

謝辞

その他の学習リソース

docs.oracle.com/learnで他のラボをご覧いただくか、Oracle Learning YouTubeチャネルでより無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスして、Oracle Learning Explorerになります。

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