AnalyticDB for MySQL Sparkのデフォルトイメージがビジネス要件を満たさない場合、Sparkジョブに必要なソフトウェアパッケージと依存関係をデフォルトイメージに追加してカスタムイメージを作成し、そのカスタムイメージをContainer Registryに公開できます。 AnalyticDB for MySQL Sparkジョブを開発するときに、実行環境としてカスタムイメージを指定できます。
背景情報
次のシナリオでは、AnalyticDB for MySQL Sparkのデフォルトイメージがビジネス要件を満たしていない場合があります。
Sparkジョブを実行する前に、複雑な初期化操作が必要です。 たとえば、大きなモデルファイルを特定のオンプレミスディレクトリにダウンロードするか、特定のLinux開発キットをインストールしてアップグレードする必要があります。
Pythonを使用して機械学習またはデータマイニングを実行する場合、依存するCおよびC ++ バージョンはデフォルトイメージと互換性がありません。
virtualenv
を使用してPython環境をアップロードすることはできません。カスタムSparkカーネルを設定するか、プレビューバージョンのSparkカーネルの機能を使用する必要があります。
上記の問題を解決するには、AnalyticDB for MySQL Sparkのカスタムイメージ機能を使用して、デフォルトのSparkイメージをカスタムイメージに置き換えます。
前提条件
Elastic Compute Service (ECS) インスタンスが作成されました。 この例では、ECSインスタンスはAlibaba Cloud Linux 3.2104 LTS 64ビットOSを使用します。 詳細については、「クイック起動タブのサブスクリプションECSインスタンスの作成」をご参照ください。
手順
Container Registryインスタンスを作成します。 インスタンスの名前空間とイメージリポジトリを作成します。 詳細については、「Container Registry Enterprise Editionインスタンスの作成」をご参照ください。
Container Registryインスタンスは、Enterprise EditionおよびPersonal Editionで使用できます。 Container Registry Enterprise Editionインスタンスを作成して、データアクセスとストレージの高効率な配布と高いセキュリティを実現することを推奨します。 この例では、Enterprise Editionインスタンスが作成されます。 詳細については、「Personal EditionインスタンスとEnterprise Editionインスタンスの違い」をご参照ください。
説明カスタムイメージを作成すると、イメージはContainer Registryインスタンスにプッシュされます。 次に、AnalyticDB for MySQL Sparkは、ジョブの送信時にインスタンスからイメージを取得します。
Container Registry Enterprise Editionインスタンスの作成時に課金されます。 詳細については、「Container Registry Enterprise Editionインスタンスの課金」をご参照ください。
ECSインスタンスの仮想プライベートクラウド (VPC) とvSwitchをContainer Registryインスタンスのアクセス制御リスト (ACL) に追加して、2つのインスタンス間の接続を確立します。 詳細については、「VPC ACLの設定」をご参照ください。
ECSインスタンスで次のコマンドを実行し、AnalyticDB for MySQL Sparkのデフォルトイメージをダウンロードします。
docker pull registry.cn-hangzhou.aliyuncs.com/adb-public-image/adb-spark-public-image:3.2.32
docker images
コマンドを実行して、デフォルトイメージがコンピュータにダウンロードされているかどうかを確認できます。デフォルトイメージはAnolis OSに基づいてカプセル化され、RPMパッケージマネージャー (RPM) を使用します。 次の表に、AnalyticDB for MySQL Sparkのデフォルトイメージのプリセットディレクトリを示します。 AnalyticDB for MySQL Sparkの機能が期待どおりに機能するように、ディレクトリの内容を変更しないことを推奨します。
ディレクトリ
コンテンツ
説明
/opt /スパーク
AnalyticDB for MySQL Sparkのインストールディレクトリ。
/opt/spark/adb_jars
は、組み込みのSparkコネクタ
を提供します。 ディレクトリを上書きまたは削除しないことを推奨します。/opt /インテル
ネイティブ実行エンジンのインストールディレクトリ。
ディレクトリを変更すると、ベクトル化が失敗する可能性があります。
/opt /プロメテウス
Managed Service for Prometheusのインストールディレクトリ。
ディレクトリを変更すると、パフォーマンスの監視と診断が失敗する可能性があります。
/opt /ツール
デバッグツールのインストールディレクトリ。
パフォーマンストレースおよびトラブルシューティングツールをディレクトリにインストールすることを推奨します。
/opt/entrypoint.sh
起動スクリプトファイル。
ブートスクリプトファイルを変更すると、Java仮想マシン (JVM) の起動に失敗し、リソースが効率的に使用されない場合があります。
/usr/java/jdk1.8.0_321-amd64
環境変数JAVA_HOMEで指定されるJava Development Kit (JDK) のインストールディレクトリ。
JDKを変更するには、
JAVA_HOME
環境変数を変更して新しいインストールパスを指定することを推奨します。/usr/local/lib/python3.6
デフォルトのPython環境のサードパーティパッケージのインストールディレクトリ。
Python環境を変更するには、
spark.pyspark.python
パラメーターを変更して新しいインストールパスを指定することを推奨します。説明LinuxシステムのデフォルトのPythonバージョンを上書きすると、RPMが応答しないことがあります。
vim Dockerfile
コマンドを実行し、Dockerfileを作成します。 次のコンテンツをDockerfileに追加します。この例では、Python 3.8と最新バージョンのTensorflowがカスタムイメージにインストールされています。
FROM registry.cn-hangzhou.aliyuncs.com/adb-public-image/adb-spark-public-image:3.2.32 RUN wget https://www.python.org/ftp/python/3.8.11/Python-3.8.3.tgz RUN tar xzf Python-3.8.11.tgz RUN cd Python-3.8.11 && sudo ./configure --enable-optimizations && sudo make altinstall RUN pip3.8 install --upgrade pip && pip3.8 install tensorflow ENV PYSPARK_PYTHON="/usr/local/bin/python3.8" RUN echo "import tensorflow as tf\nprint("TensorFlow version:", tf.__version__)\n" > /tmp/test.py
Dockerfilesについては、「Dockerfileリファレンス」をご参照ください。
カスタムイメージを作成し、手順1で作成したイメージリポジトリにイメージをプッシュします。
カスタムイメージを構築するための構文:
docker build -t <image repository endpoint >:< カスタムイメージのバージョン>
カスタムイメージをプッシュするための構文:
docker push <image repository endpoint >:< custom Image version>
イメージリポジトリエンドポイント: イメージリポジトリの [詳細] ページでエンドポイントを取得できます。
サンプルコード:
docker build -t my-spark-****repo.cn-hangzhou.cr.aliyuncs.com/adb-public/spark:3.2.32 . docker push my-spark-****repo.cn-hangzhou.cr.aliyuncs.com/test/spark:3.2.32
イメージリポジトリにイメージをプッシュすると、イメージリポジトリの [タグ] ページでイメージを表示できます。
Sparkジョブを開発するには、AnalyticDB for MySQLコンソールで次のパラメーターを設定します。 サンプルコード:
{ "file": "local:///tmp/test.py", "name": "MyImage", "conf": { "spark.driver.resourceSpec": "small", "spark.executor.instances": 1, "spark.executor.resourceSpec": "small", "spark.adb.customImage.enabled": "true", "spark.kubernetes.container.image": "my-spark-****repo.cn-hangzhou.cr.aliyuncs.com/test/spark:3.2.0", "spark.adb.acr.instanceId": "cri-jim1hhv0vxqy****", "spark.adb.eni.enabled": "true", "spark.adb.eni.vswitchId": "vsw-bp1o49nlrhc5q8wxt****", "spark.adb.eni.securityGroupId": "sg-bp10fw6e31xyrryu****" } }
下表に、各パラメーターを説明します。
パラメーター
例
説明
spark.adb.customImage.enabled
true
カスタムイメージ機能を有効にするかどうかを指定します。 パラメーターをtrueに設定します。 有効な値:
true
false (デフォルト)
spark.kubernetes.container.image
my-spark-**** repo.cn-hangzhou.cr.aliyuncs.com/test/spark:3.2.0
Container Registryインスタンスのイメージリポジトリのエンドポイント。
spark.adb.acr.instanceId
cri-jim1hhv0vxqy ****
Container Registry Enterprise EditionインスタンスのID。 IDは、Container Registryコンソールで取得できます。 このパラメーターは、Container Registry Enterprise Editionインスタンスに対してのみ設定する必要があります。
spark.adb.eni.enabled
true
Elastic Network Interface (ENI) を有効にするかどうかを指定します。 パラメーターをtrueに設定します。 有効な値:
true
false (デフォルト)
spark.adb.eni.vswitchId
vsw-bp1o49nlrhc5q8wxt ****
ENIのvSwitch ID。 手順2でContainer RegistryインスタンスのACLに追加されたvSwitch IDを選択することを推奨します。
Container Registry Personal Editionインスタンスを使用する場合は、権限を持つvSwitchを選択できます。
spark.adb.eni.securityGroupId
sg-bp10fw6e31xyrryu ****
ENIのセキュリティグループID。 セキュリティグループは、前述のvSwitchと同じVPCに存在する必要があります。
上記のコードを実行した後、[アプリケーション] タブに移動し、[操作] 列の [ログ] をクリックしてログ情報を表示します。 Sparkアプリケーションの詳細については、「概要」をご参照ください。