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のサンプル・スタックを使用してデプロイします:
をクリックします。
まだサインインしていない場合は、テナンシおよびユーザー資格証明を入力します。
- スタックをデプロイするリージョンを選択します。
- 画面上のプロンプトおよび指示に従ってスタックを作成します。
- スタックを作成したら、「Terraformアクション」をクリックし、「プラン」を選択します。
- ジョブが完了するまで待機し、プランをレビューします。
変更を行うには、「スタックの詳細」ページに戻り、「スタックの編集」をクリックして必要な変更を行います。次に、「プラン」処理を再実行します。
- これ以上変更が不要な場合は、「スタックの詳細」ページに戻り、「Terraformアクション」をクリックして「適用」を選択します。
- GitHubのTerraformコードを使用してデプロイします:
- GitHubにアクセスします。
- リポジトリをローカル・コンピュータにクローニングまたはダウンロードします。
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を参照してください。
-
データ・フローを試行するには、チュートリアル『Oracle Cloud Infrastructure Data Flowスタート・ガイド』を使用します。
- PythonおよびOracle Cloud Infrastructure Data Flowについてさらに学習するには、Oracle LiveLabsワークショップOCIデータ・フローを使用したサンプルPythonアプリケーションを使用します
-
コード・スニペットに表示されるSparkSessionおよびデータセット・クラスの詳細は、Spark Java APIドキュメントを参照してください。
-
Apache Sparkでサポートされているその他のAPIの詳細は、Spark APIドキュメントを参照してください。
Oracle Cloud Infrastructureアーキテクチャの一般的なガイドラインは、「Oracle Cloud Infrastructureのベスト・プラクティスのフレームワーク」を参照してください。