Oracle Cloud Infrastructure Data Flowを使用した外部オブジェクト・ストレージ・ソースからのデータの分析

データはAmazon Web Services S3やAzure Blob Storageなどの異なるクラウドに存在しますが、共通の分析プラットフォームから分析する必要があります。Oracle Cloud Infrastructure Data Flowは、ビッグ・データ・クラスタをデプロイまたは管理することなく、データが存在する場所に関係なくビッグ・データ分析を開発および実行できる完全管理型のSparkサービスです。

アーキテクチャ

このアーキテクチャでは、Amazon Web Service (AWS) S3バケットまたはAzure Blob Storageバケットに接続し、データを分析し、結果をOracle Cloud Infrastructure Object Storageに保存するOracle Cloud Infrastructure Data Flowを示します。

AWSに接続するには、データ・フロー・アプリケーションにAWSアクセス・キーと秘密キーが必要です。Azureに接続するには、データ・フローにAzureアカウント名とアカウント・キーが必要です。

次の図は、この参照アーキテクチャを示しています。



oci- dataflow- architecture: oracle.zip

アーキテクチャには、次のコンポーネントがあります。

  • リージョン

    Oracle Cloud Infrastructureリージョンは、可用性ドメインと呼ばれる1つ以上のデータ・センターを含む、ローカライズされた地理的領域です。地域は他の地域から独立しており、広大な距離で(国または大陸間で)分離できます。

  • Oracle Cloud Infrastructure Data Flow

    Oracle Cloud Infrastructure Data Flowは、クラウド・ベースのサーバーレス・プラットフォームであり、クラスタ、操作チームまたは高度に特化したSparkナレッジを必要とせずに、任意の規模でSparkジョブを作成、編集および実行できます。実行時に、データ・フローはアプリケーション・ソースを取得し、接続を作成し、データを取得して処理し、出力をOracle Cloud Infrastructure Object Storageに書き込みます。

  • オブジェクト・ストレージ

    オブジェクト・ストレージでは、データベースのバックアップ、分析データ、イメージ、ビデオなどのリッチ・コンテンツなど、すべてのコンテンツ・タイプの構造化データおよび非構造化データにすばやくアクセスできます。インターネットから直接またはクラウド・プラットフォーム内から、安全かつセキュアにデータを格納し、取得できます。ストレージは、パフォーマンスやサービスの信頼性を低下させることなく、シームレスに拡張できます。迅速、即時および頻繁にアクセスする必要があるホット・ストレージには標準ストレージを使用します。長期間保持し、ほとんどまたはほとんどアクセスしないコールド・ストレージにアーカイブ・ストレージを使用します。

推奨事項

Oracle Cloud Infrastructure Data Flowを使用して外部オブジェクト・ストレージ・ソースからのデータを分析するための開始点として、次の推奨事項を使用します。

実際の要件は、ここで説明するアーキテクチャとは異なる場合があります。

  • データの場所

    このアーキテクチャは、ユーザーがデータ・フローを使用してSparkアプリケーションを迅速かつ簡単にテストすることを目的としています。実現可能性テストに成功した後、パフォーマンスを向上させ、コストを削減するために、ソース・データをOracle Cloud Infrastructure Object Storageに転送することをお薦めします。

  • オブジェクト・ストレージ

    このアーキテクチャでは、標準のOracle Cloud Infrastructure Object Storageを使用して、他のクラウド・サービスが出力にアクセスしてさらに分析および表示できるように、処理された出力を格納します。

注意事項

Oracle Cloud Infrastructure Data Flowを使用して外部オブジェクト・ストレージ・ソースのデータを分析する場合は、次のデプロイメント・オプションを考慮してください。

  • Sparkアプリケーション

    Amazon Web Services S3またはAzure Blob Storageのデータに対して実行中の既存のSparkアプリケーションがある場合は、Oracle Cloud Infrastructure Data Flowで同じSparkアプリケーションを使用できます。

  • パフォーマンス

    データ・センター間でのデータの読取りは本質的に遅くなります。このアーキテクチャは、概念実証や、機械学習ジョブなどのCPU負荷の高いアプリケーションに適しています。概念実証が成功した場合は、大規模な本番ジョブを実行する前に、ソース・データをOracle Cloud Infrastructure Object Storageにローカルに転送します。

  • セキュリティ

    ポリシーを使用して、Oracle Cloud Infrastructureリソースにアクセスできるユーザーとその程度を制限します。

    Oracle Cloud Infrastructure Identity and Access Management (IAM)を使用して、データ・フローデータ・フロー内の実行管理の両方について、特定のユーザーおよびユーザー・グループに権限を割り当てます。

    暗号化はOracle Cloud Infrastructure Object Storageに対してデフォルトで有効になっており、無効にできません。

  • コスト

    Oracle Cloud Infrastructure Data Flowは従量課金であるため、支払うのはデータ・フロー・アプリケーションを実行したときのみで、作成時ではありません。

    大量のAmazon Web Services S3データを処理すると、データ出力コストが高くなる可能性があります。

デプロイ

このリファレンス・アーキテクチャのTerraformコードは、Oracle Cloud Infrastructure Resource Managerのサンプル・スタックとして使用できます。このサンプルTerraformスタックでは、OCIデータ・フロー・アプリケーション環境が、IAMポリシーおよびOCIオブジェクト・ストレージ・バケット(サードパーティ・ストレージではない)とともにデプロイされます。デフォルトでは、デモPython Sparkアプリケーションもデプロイされます。GitHubからコードをダウンロードし、特定の要件に合せてカスタマイズすることもできます。

  • Oracle Cloud Infrastructure Resource Managerのサンプル・スタックを使用してデプロイします:
    1. Oracle Cloudへのデプロイをクリックします。

      まだサインインしていない場合は、テナンシおよびユーザー資格証明を入力します。

    2. スタックをデプロイするリージョンを選択します。
    3. 画面上のプロンプトおよび指示に従ってスタックを作成します。
    4. スタックを作成したら、「Terraformアクション」をクリックし、「プラン」を選択します。
    5. ジョブが完了するまで待機し、プランをレビューします。

      変更を行うには、「スタックの詳細」ページに戻り、「スタックの編集」をクリックして必要な変更を行います。次に、「プラン」処理を再実行します。

    6. これ以上変更が不要な場合は、「スタックの詳細」ページに戻り、「Terraformアクション」をクリックして「適用」を選択します。
  • GitHubのTerraformコードを使用してデプロイします:
    1. GitHubにアクセスします。
    2. リポジトリをローカル・コンピュータにクローニングまたはダウンロードします。
    3. READMEドキュメントの手順に従います。

GitHubで提供されるTerraformコードに加えて、次のコード・スニペットは、Amazon Web Services S3への接続方法およびデータの問合せ方法を示しています。

  • S3に接続してデータを問い合せるには、hadoop-aws.jarおよびaws-java-sdk.jarパッケージを含める必要があります。これらのパッケージは、次のようにpom.xmlファイルで参照できます。
    <dependency>
    	<groupId>org.apache.hadoop</groupId>
    	<artifactId>hadoop-aws</artifactId>
    	<version>2.9.2</version>
    	<exclusions>
    	<exclusion>
    		<groupId>org.apache.hadoop</groupId>
    		<artifactId>hadoop-common</artifactId>
    	</exclusion>
    	</exclusions>
    </dependency>
    <dependency>
    	<groupId>com.amazonaws</groupId>
    	<artifactId>aws-java-sdk</artifactId>
    	<version>1.7.4</version>
    </dependency>
  • 次のようなコードを使用して、Amazon Web Services S3に接続します。アクセス・キーと秘密キーを指定する必要があります。次のスニペットでは、これらの値はそれぞれ変数ACCESSおよびSECRETで表されています。
    SparkSession spark = SparkSession.builder().master("local")
    	.config("spark.hadoop.fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem")
    	.config("spark.hadoop.fs.s3a.access.key", ACCESS)
    	.config("spark.hadoop.fs.s3a.secret.key", SECRET)
    	.config("fs.s3a.connection.ssl.enabled", "false")
    	.getOrCreate();
  • 次のようなコードを使用して、S3の場所と指定した表名を使用してデータを問い合せます。
    Dataset<Row> ds = sqlContext.read().format("csv").option("header","true").load("<S3 Location>");
    ds.createOrReplaceTempView("<Table Name>");
    Dataset<Row> result_ds = sqlContext.sql("<SQL Query Using <Table Name>>");

まとめの問題

このアーキテクチャの機能の詳細を参照してください。

Oracle Cloud Infrastructure Data Flowの場合:
Apache Spark:
  • コード・スニペットに表示されるSparkSessionおよびデータセット・クラスの詳細は、Spark Java APIドキュメントを参照してください。

  • Apache Sparkでサポートされているその他のAPIの詳細は、Spark APIドキュメントを参照してください。

Oracle Cloud Infrastructureアーキテクチャの一般的なガイドラインは、「Oracle Cloud Infrastructureのベスト・プラクティスのフレームワーク」を参照してください。

変更ログ

このログには、重要な変更がリストされます。