本ブログは、オラクル・クラウドの個人シリーズ・ブログの1つです。
初めに
Oracle Cloud Infrastructure(OCI)Data Flowは、Apache Spark ™アプリケーションを実行するためのフルマネージド・サービスです。特に大規模なデータの処理に向きます。
OCIオブジェクト・ストレージ上のファイルを読み込み、Autnomous DBへのデータロード処理を例にして、OCI Data Flowでの実現方法を三回を分けて紹介したいと思います。
- Part 1: Apache Sparkを使って、ローカル環境でPythonプログラムを実行する方法
- Part 2 (本文): アプリケーションをOCIへデプロイし、実行する方法
-
Part 3: プライベート・エンドポイントを経由し、ADBへデータをロードする方法。
ステップ
1. 事前準備
1-1. 関連OCIリソースの作成
リソース・タイプ | 名前 | コメント |
---|---|---|
コンパートメント | PoC | 検証用コンパートメント |
バケット | dataflow-logs | データ・ロード・ログの格納先 |
グループ | Data_Flow_Grp | 検証用ユーザーを入れる |
ポリシー | Data_Flow_Policy | |
Autnomous DB | ADW_Data_Flow | 接続タイプ:パブリック・アクセス |
Computeインスタンス | Linux8-Java11-Data-Flow | 用途: 1.ローカル環境での動作確認 2. アーカイブファイルの作成 |
ポリシーのステートメント:
Allow group Data_Flow_Grp to read buckets in compartment PoC
Allow group Data_Flow_Grp to manage dataflow-family in compartment PoC
Allow group Data_Flow_Grp to manage objects in compartment PoC where ALL {target.bucket.name='dataflow-logs', any {request.permission='OBJECT_CREATE', request.permission='OBJECT_INSPECT'}}
1-2. ローカル環境での動作確認
アプリケーションをOCIへデプロイする前、ローカル環境での動作確認を強く推奨します。詳細は、前回(Part 1)の記事をご参照ください。
1-3. Docker のインストールと起動
Docker のインストール
sudo dnf install -y dnf-utils zip unzip
sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
sudo dnf install -y docker-ce --nobest
Docker の起動
[opc@linux8-java11-data-flow ]$ sudo systemctl start docker
[opc@linux8-java11-data-flow ]$ sudo systemctl enable docker
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service ¨ /usr/lib/systemd/system/docker.service.
[opc@linux8-java11-data-flow ]$
1-4. アーカイブ(archive.zip)の作成
パッケージャ・ツール・イメージをダウンロードします。
sudo docker pull phx.ocir.io/oracle/dataflow/dependency-packager:latest
一時フォルダ(/tmp/shared
)を用意してください。requirements.txt
(1行のみ)を作成し、関連のJARファイルと共にその下に保存します。
mkdir /tmp/shared
chmod 777 /tmp/shared
echo oci > /tmp/shared/requirements.txt
cp /home/opc/download/ojdbc/ojdbc11.jar /tmp/shared
cp /home/opc/download/ojdbc/ucp11.jar /tmp/shared
cp /home/opc/download/ojdbc/oraclepki.jar /tmp/shared
cp /home/opc/download/hdfs/third-party/lib/bcpkix-jdk15on-1.70.jar /tmp/shared
cp /home/opc/download/hdfs/third-party/lib/bcprov-jdk15on-1.70.jar /tmp/shared
dockerコマンドでアーカイブを作成します。
コマンド:sudo docker run --rm -v $(pwd):/opt/dataflow --pull always -it phx.ocir.io/oracle/dataflow/dependency-packager:latest -p 3.8
[opc@linux8-java11-data-flow ~]$ cd /tmp/shared
[opc@linux8-java11-data-flow shared]$ ll
total 15452
-rw-r--r--. 1 opc opc 963713 Mar 11 05:01 bcpkix-jdk15on-1.70.jar
-rw-r--r--. 1 opc opc 5867298 Mar 11 05:01 bcprov-jdk15on-1.70.jar
-rw-r--r--. 1 opc opc 6971601 May 7 11:34 ojdbc11.jar
-rw-r--r--. 1 opc opc 490830 May 7 13:02 oraclepki.jar
-rw-rw-r--. 1 opc opc 4 May 7 11:37 requirements.txt
-rw-r--r--. 1 opc opc 1513648 Mar 29 08:57 ucp11.jar
[opc@linux8-java11-data-flow shared]$ sudo docker run --rm -v $(pwd):/opt/dataflow --pull always -it phx.ocir.io/oracle/dataflow/dependency-packager:latest -p 3.8
<中略>
The following jar files will be included in the archive.zip:
/opt/dataflow/bcpkix-jdk15on-1.70.jar
/opt/dataflow/bcprov-jdk15on-1.70.jar
/opt/dataflow/ojdbc11.jar
/opt/dataflow/ucp11.jar
/opt/dataflow/oraclepki.jar
Are you sure you want to put all these jar files(5) into archive.zip? [Y/n]y
<中略>
archive.zip is generated!
[opc@linux8-java11-data-flow shared]$
archive.zip
とversion.txt
の2つファイルが作成されました。archive.zip
をOCIオブジェクト・ストレージにアップロードしてください。
OCI-CLIは既にインストールと設定済であれば、次のように実行するとOKです。
コマンド例:oci os object put -bn MyBucket --file archive.zip
2. OCIでアプリケーションの作成と実行
2-1. アプリケーションの作成
OCIメニュー → Analytics & AI → Data Lake → Data Flow → Create application
アプリケーション名を入力し、Sparkバージョンとシェイプを選択します。
プログラムのタイプ(Python)と置き場所を指定してください。
アーカイブファイルとログの置き場所を指定し、作成ボタンをクリックします。
(dataflow-logs
というバケットを事前に作成しておく)。
アプリケーション・ログ:oci://<bucket-name>@<Object_Storage_Namespace>
2-2. アプリケーションの実行
アプリケーション詳細画面に、Run (実行)をクリックして、実行を開始します。
実行する前、シェイプの指定ができますが、この例ではデフォルトのままで進みます。
ステータス変更:
Accepted (受入れ済) → In progress (進行中) → Succeed (成功)、或いは Failed (失敗)
この例では、受入れ済から進行中まで約10分間かかり、進行中から成功完了までの実行時間(Duration)は、2分21秒でした。
パブリック・アクセスのADBを例にして紹介しました。次回は、プライベート・エンドポイントを経由し、プライベート・サブネットに格納されるADBへロードする方法を紹介したいと思います。
以上です。
関連記事
オラクル・クラウドの個人シリーズ・ブログ
OCI Data Flowを使ってオブジェクト・ストレージからADBへデータをロードする -- Part 1
OCI Data Flowを使ってオブジェクト・ストレージからADBへデータをロードする -- Part 3
OCI データ・フロー・ドキュメント
製品サイト
オフィシャル・ドキュメント
データ・フロー・チュートリアル
データ・フロー・アプリケーションへのサードパーティ・ライブラリの追加