CLI を使用したサーバーレス・インスタンスの作成およびアプリケーションのサブミットについて説明します。
IBM Analytics Engine CLI を使用して、サーバーレス・インスタンスを作成および管理し、Spark アプリケーションをサブミットおよびモニターするために必要なサービスを作成する方法について説明します。
サーバーレス・インスタンスを作成するには、IBM Analytics Engine 標準サーバーレス・プランを選択します。 サーバーレス・インスタンスがプロビジョンされると、Apache Spark クラスターが作成されます。このクラスターでは、任意のライブラリー・パッケージを使用してカスタマイズでき、Spark アプリケーションを実行できます。
目標
CLI を使用するために必要な以下のサービスおよびコンポーネントをインストールしてセットアップする方法について説明します。
- IBM Analytics Engine インスタンスがカスタム・アプリケーション・ライブラリーおよび Spark 履歴イベントを保管する IBM Cloud Object Storage インスタンス。
- アプリケーション・ファイルおよびデータ・ファイル用の Object Storage バケット。
- IBM Analytics Engine サーバーレス・インスタンス。 このインスタンスには、Spark ワークロードがデプロイされるたびに、オンデマンドでコンピュート・リソースとメモリー・リソースが割り振られます。 アプリケーションが実行状態でない場合、インスタンスにコンピューティング・リソースは割り振られません。 料金は、インスタンスによって消費されるリソースの実際の使用量に基づいており、1 秒単位で請求されます。
- ロギング・サービス。IBM Analytics Engine インスタンスおよびサブミットされたアプリケーションで発生する可能性がある問題をトラブルシューティングしたり、アプリケーションによって生成された出力を表示したりするのに役立ちます。 ロギングを有効にしてアプリケーションを実行すると、ログは IBM Log Analysis サービスに転送されて、索引付けされます。これにより、生成されたすべてのメッセージの全文検索が可能になり、特定のフィールドに基づいて簡単に照会できるようになります。
開始前に
Analytics Engine V3 CLI の使用を開始するには、以下が必要です。
- IBM Cloud® アカウント。
- IBM Cloud CLI のインストール。 CLI をダウンロードしてインストールする手順については、IBM Cloud CLI の概要を参照してください。
これで、Analytics Engine V3 CLI の使用を開始できます。 ステップ 3 で Spark アプリケーションをアップロードしてサブミットする前に、ステップ 1 と 2 の指示に従って必要なサービスをインストールする必要があります。 ステップ 4 は、ロギング・インスタンスを作成してロギングを有効にする方法を示しています。 ステップ 5 は、Analytics Engine インスタンスを削除する方法を示していますが、このステップはオプションです。
Cloud Object Storage インスタンスの作成と資格情報の取得
Analytics Engine サーバーレス CLI を使用して、IBM Cloud Object Storage インスタンスを作成し、Cloud Object Storage 資格情報 (サービス・キー) を取得します。
作成する Cloud Object Storage インスタンスは、IBM Analytics Engine インスタンスによって、Spark の履歴イベント用のインスタンス・ホーム・ストレージ、およびアプリケーションで使用するカスタム・ライブラリーまたはパッケージとして、使用されます。 インスタンス・ホームを参照してください。
Cloud Object Storage に保管され、アプリケーションから参照されるライブラリー・セットをカスタム・パッケージを使用して作成する方法について詳しくは、ライブラリー・セットの使用を参照してください。
-
IBM Cloud® アカウントを使用して IBM Cloud® にログインします。
アクション :Enter:
ibmcloud api <URL> ibmcloud login
例 :Enter:
ibmcloud api https://cloud.ibm.com ibmcloud login
-
リソース・グループを選択します。 アカウントのリソース・グループのリストを取得し、IBM Analytics Engine サーバーレス・インスタンスを作成するリソース・グループを選択します。
アクション :Enter:
ibmcloud target -g RESOURCE_GROUP_NAME
パラメーター値:
- RESOURCE_GROUP_NAME: サーバーレス・インスタンスが存在するリソース・グループの名前
例 :Enter:
ibmcloud resource groups ibmcloud target -g default
-
IBM Cloud Object Storage サービスをインストールしてから、Analytics Engine V3 CLI をインストールします。
アクション :Enter:
ibmcloud plugin install cloud-object-storage
アクション :Enter:
ibmcloud plugin install analytics-engine-v3
-
Cloud Object Storage インスタンスを作成します。
アクション :Enter:
ibmcloud resource service-instance-create INSTANCE_NAME cloud-object-storage PLAN global
パラメーター値:
- INSTANCE_NAME: 選択した任意の名前
- PLAN: インスタンスの作成時に使用する Cloud Object Storage プラン
例 :Enter:
ibmcloud resource service-instance-create test-cos-object cloud-object-storage standard global
応答 この例では、以下が返されます。
Service instance test-cos-object was created. Name: test-cos-object ID: crn:v1:bluemix:public:cloud-object-storage:global:a/867d444f64594fd68c7ebf4baf8f6c90:ebad3176-8a1a-41f2-a803-217621bf6309:: GUID: ebad3176-8a1a-41f2-a803-217621bf6309 Location: global State: active Type: service_instance Sub Type: Allow Cleanup: false Locked: false Created at: 2021-12-27T07:57:56Z Updated at: 2021-12-27T07:57:58Z Last Operation: Status create succeeded Message Completed create instance operation
-
前のステップの Cloud Object Storage 作成呼び出しの応答から ID の値をコピーして、CRN を構成します。
アクション :Enter:
ibmcloud cos config crn Resource Instance ID CRN: ID
パラメーター値:
- ID: Cloud Object Storage 作成呼び出しの応答から取得した ID の値
例 :Enter:
ibmcloud cos config crn Resource Instance ID CRN: crn:v1:bluemix:public:cloud-object-storage:global:a/867d444f64594fd68c7ebf4baf8f6c90:ebad3176-8a1a-41f2-a803-217621bf6309::
-
Cloud Object Storage バケットを作成します。
アクション :Enter:
ibmcloud cos bucket-create --bucket BUCKET_NAME [--class CLASS_NAME] [--ibm-service-instance-id ID] [--region REGION] [--output FORMAT]
パラメーター値:
- BUCKET_NAME: 選択した任意の名前
- ID: Cloud Object Storage 作成呼び出しの応答から取得した GUID の値
- REGION: Cloud Object Storage インスタンスが作成された IBM Cloud リージョン
- FORMAT: 出力フォーマットは JSON またはテキストにすることができます。
例 :Enter:
ibmcloud cos bucket-create --bucket test-cos-storage-bucket --region us-south --ibm-service-instance-id ebad3176-8a1a-41f2-a803-217621bf6309 --output json
-
Cloud Object Storage サービス・キーを作成します。
アクション :Enter:
ibmcloud resource service-key-create NAME [ROLE_NAME] ( --instance-id SERVICE_INSTANCE_ID | --instance-name SERVICE_INSTANCE_NAME | --alias-id SERVICE_ALIAS_ID | --alias-name SERVICE_ALIAS_NAME) [--service-id SERVICE_ID] [-p, --parameters @JSON_FILE|JSON_TEXT] [-g RESOURCE_GROUP] [--service-endpoint SERVICE_ENDPOINT_TYPE] [--output FORMAT] [-f, --force] [-q, --quiet]
Parameter values: - NAME: Any name of your choice - [ROLE_NAME]: This parameter is optional. The access role, for example, `Writer` or `Reader` - SERVICE_INSTANCE_ID: The value of GUID from the response the of Cloud Object Storage creation call - SERVICE_INSTANCE_NAME: The value of NAME from the response the of Cloud Object Storage creation call - JSON_TEXT: The authentication to access Cloud Object Storage. Currently only HMAC keys are supported.
例 :Enter:
ibmcloud resource service-key-create test-service-key-cos-bucket Writer --instance-name test-cos-object --parameters '{"HMAC":true}'
- 応答
- この例では、以下が返されます。
Creating service key of service instance test-cos-object under account Test OK Service key crn:v1:bluemix:public:cloud-object-storage:global:a/183**93b485e:9ee135f9-4667-4797-8478-b20**ce-key:21a310e1-bbd6-**bf1f4 was created. Name: test-service-key-cos-bucket ID: crn:v1:bluemix:public:cloud-object-** Created At: Mon Dec 27 12:52:49 UTC 2021 State: active Credentials: apikey: 3a4Ncm**o-WJGFaEzwfY cos_hmac_keys: access_key_id: 21a31**f1f4 secret_access_key: c5a23**b6792d3e0a6c endpoints: https://control.cloud-object-storage.cloud.ibm.com/v2/endpoints iam_apikey_description: Auto-generated for key crn:v1:bluemix:public:cloud-object-storage:global:a/1836f778**c93b485e:9ee**8478-b2019a4b4e20:resource-key:21a3**05a9bf1f4 iam_apikey_name: test-service-key-cos-bucket iam_role_crn: crn:v1:bluemix:public:iam::::serviceRole:Writer iam_serviceid_crn: crn:v1:bluemix:public:iam-identity::a/1836f77885e521c5ab2523aac93b485e::serviceid:ServiceId-702ca222-3615-464c-92d3-1849c03170cc resource_instance_id: crn:v1:bluemix:public:cloud-object-storage:global:a/1836f7**3b485e:9ee135f9-4667-479**4e20::
Analytics Engine サーバーレス・インスタンスの作成
CLI を使用して、Analytics Engine サーバーレス・インスタンスを作成します。
-
Analytics Engine サービス・インスタンスを作成します。
アクション :Enter:
ibmcloud resource service-instance-create INSTANCE_NAME ibmanalyticsengine standard-serverless-spark us-south -p @provision.json
パラメーター値:
- INSTANCE_NAME: 選択した任意の名前
- @provision.json: 以下の例に示されているように JSON ファイルを構造化します。 Cloud Object Storage サービス・キー作成呼び出しの応答から取得したアクセス・キーと秘密鍵を使用します。
- provision.json ファイルの例
- サンプル JSON ファイル:
{ "default_runtime": { "spark_version": "3.4" }, "instance_home": { "region": "us-south", "endpoint": "https://s3.direct.us-south.cloud-object-storage.appdomain.cloud", "hmac_access_key": "<your-hmac-access-key>", "hmac_secret_key": "<your-hmac-secret-key>"} }
例 :Enter:
ibmcloud resource service-instance-create test-ae-service ibmanalyticsengine standard-serverless-spark us-south -p @ae_provision.json
応答 この例では、以下が返されます。
アカウントの 次になります。 ... OK Service instance test-ae-service was created. Name: test-ae-service ID: crn:v1:bluemix:public:ibmanalyticsengine:us-south:a/183**aac93b485e:181ea**be1-70978**1b:: GUID: 181ea**9ee01b Location: us-south State: provisioning Type: service_instance Sub Type: Service Endpoints: public Allow Cleanup: false Locked: false Created at: 2022-01-03T08:40:25Z Updated at: 2022-01-03T08:40:26Z Last Operation: Status create in progress Message Started create instance operation ```
-
Analytics Engine サービスの状況を確認します。
アクション :Enter:
ibmcloud ae-v3 instance show –id INSTANCE_ID
パラメーター値:
- INSTANCE_ID: Analytics Engine インスタンス作成呼び出しの応答から取得した GUID の値
例 :Enter:
ibmcloud ae-v3 instance show –id 181ea**9ee01b
応答 この例では、以下が返されます。
{ "default_runtime": { "spark_version": "3.4" }, "id": "181ea**9ee01b ", "instance_home": { "bucket": "do-not-delete-ae-bucket-e96**5d-b7**a82", "endpoint": "https://s3.direct.us-south.cloud-object-storage.appdomain.cloud", "hmac_access_key": "**", "hmac_secret_key": "**", "provider": "ibm-cos", "region": "us-south", "type": "objectstore" }, "state": "active", "state_change_time": "**" }
Analytics Engine サービスの状態がアクティブな場合にのみ、Spark アプリケーションをサブミットしてください。
Spark アプリケーションのアップロードおよびサブミット
アプリケーション・ファイルを Cloud Object Storage にアップロードし、Spark アプリケーションをサブミットします。
このチュートリアルでは、Analytics Engine インスタンスがインスタンス・ホーム として使用する Cloud Object Storage インスタンス・バケットに、Spark アプリケーションを追加する方法を示します。 インスタンス関連ファイルを、アプリケーションの実行に使用するファイル (アプリケーション・ファイル自体、データ・ファイル、分析の結果など) から分離する場合は、同じ Cloud Object Storage インスタンス内で別のバケットを使用することも、別の Cloud Object Storage インスタンスを使用することもできます。
-
Spark アプリケーション・ファイルをアップロードします。
アクション :Enter:
ibmcloud cos upload --bucket BUCKET_NAME --key KEY --file PATH [--concurrency VALUE] [--max-upload-parts PARTS] [--part-size SIZE] [--leave-parts-on-errors] [--cache-control CACHING_DIRECTIVES] [--content-disposition DIRECTIVES] [--content-encoding CONTENT_ENCODING] [--content-language LANGUAGE] [--content-length SIZE] [--content-md5 MD5] [--content-type MIME] [--metadata STRUCTURE] [--region REGION] [--output FORMAT] [--json]
パラメーター値:
- BUCKET_NAME: バケットの作成時に使用したバケット名
- KEY: アプリケーション・ファイル名
- PATH: Spark アプリケーション・ファイルのファイル名とパス
例 :Enter:
ibmcloud cos upload --bucket test-cos-storage-bucket --key test-math.py --file test-math.py
- サンプル・アプリケーション・ファイル
test-math.py
のサンプル:from pyspark.sql import SparkSession import time import random import cmath
def init_spark () の場合: spark =SparkSession.builder.appName("test-math").getOrCreate() sc =spark.sparkContext return spark,sc
deftransformFunc(x): cmath.sqrt(x) +cmath.log(x)+cmath.log10(x) を返します。
def main(): spark、sc = init_spark () partitions=[10,5] for i の範囲 (0, 2): データ = 範囲 (1,20000000) v0=sc.parallelize(data,[partitionsi]) v1 = v0.map(transformFunc) print(fv1.countis{v1.count()}.完了") time.sleep(60)
if__name__=='main': main()
{: codeblock}
-
Analytics Engine サービスの状況を確認します。
アクション :Enter:
ibmcloud ae-v3 instance show –id INSTANCE ID
パラメーター値:
- INSTANCE_ID: Analytics Engine インスタンス作成呼び出しの応答から取得した GUID の値
例 :Enter:
ibmcloud ae-v3 instance show –id 181ea**9ee01b
応答 この例では、以下が返されます。
{ "default_runtime": { "spark_version": "3.4" }, "id": "181ea**9ee01b ", "instance_home": { "bucket": "do-not-delete-ae-bucket-e96**5d-b7**a82", "endpoint": "https://s3.direct.us-south.cloud-object-storage.appdomain.cloud", "hmac_access_key": "**", "hmac_secret_key": "**", "provider": "ibm-cos", "region": "us-south", "type": "objectstore" }, "state": "active", "state_change_time": "**" }
Analytics Engine サービスの状態がアクティブな場合にのみ、Spark アプリケーションをサブミットしてください。
-
Sparkアプリケーションをサブミットします:
アクション :Enter:
ibmcloud ae-v3 spark-app submit --instance-id INSTANCE_ID -–app APPLICATION_PATH
パラメーター値:
- INSTANCE_ID: Analytics Engine インスタンス作成呼び出しの応答から取得した GUID の値
- APPLICATION_PATH: Spark アプリケーション・ファイルのファイル名とパス
IOS および Linux の場合の例 :Enter:
ibmcloud ae-v3 spark-app submit --instance-id 181ea**9ee01b --app "cos://test-cos-storage-bucket.mycos/test-math.py" --conf '{"spark.hadoop.fs.cos.mycos.endpoint": "https://s3.direct.us-south.cloud-object-storage.appdomain.cloud", "spark.hadoop.fs.cos.mycos.access.key": "21**bf1f4", "spark.hadoop.fs.cos.mycos.secret.key": "c5a**d3e0a6c"}'
Windows の場合の例 (Powershell ではない)。 Windows では、引用符をエスケープする必要があることに注意してください。 :Enter:
ibmcloud ae-v3 spark-app submit --instance-id myinstanceid --app "cos://matrix.mycos/test-math.py" --conf "{\"spark.hadoop.fs.cos.mycos.endpoint\": \"https://s3.direct.us-south.cloud-object-storage.appdomain.cloud\", \"spark.hadoop.fs.cos.mycos.access.key\": \"mykey\", \"spark.hadoop.fs.cos.mycos.secret.key\": \"mysecret\"}"
応答 この例では、以下が返されます。
id 7f7096d2-5c44-4d9a-ac01-b904c7611b7b state accepted
-
サブミットしたアプリケーションの詳細または状況を確認します。
アクション :Enter:
ibmcloud ae-v3 spark-app show --instance-id INSTANCE_ID --app-id APPLICATION_ID
パラメーター値:
- INSTANCE_ID: Analytics Engine 作成呼び出しの応答から取得した GUID の値
- APPLICATION_ID: spark-app サブミット呼び出しの応答から取得した ID の値
例 :Enter:
ibmcloud ae-v3 spark-app show --instance-id 181ea**9ee01b --app-id 7f7096d2-5c44-4d9a-ac01-b904c7611b7b
応答 この例では、以下が返されます。
application_details <Nested Object> id 7f7096d2-5c44-4d9a-ac01-b904c7611b7b state finished start_time 2022-03-01T12:58:54.000Z finish_time 2022-03-01T13:09:14.000Z
アプリケーションの完了には 2 分から 5 分かかる場合があります。
ログを表示するロギング・サービスの作成
Analytics Engine CLI を使用してロギングを有効にし、IBM Analytics Engine の問題のトラブルシューティングに役立てることができます。 ロギングを有効にする前に、ログの転送先となる IBM Log Analysis サービス・インスタンスを作成する必要があります。
-
ロギング・インスタンスを作成します。
アクション :Enter:
ibmcloud resource service-instance-create NAME logdna SERVICE_PLAN_NAME LOCATION
パラメーター値:
- NAME: IBM Log Analysis サービス・インスタンス用に選択した任意の名前
- SERVICE_PLAN_NAME: サービス・プランの名前。 有効な値については、サービス・プランを参照してください。
- LOCATION: Analytics Engine が IBM Log Analysis にログを送信するロケーション。 有効なロケーションについては、コンピュート・サーバーレス・サービスを参照してください。
例 :Enter:
ibmcloud resource service-instance-create my-log-instance logdna 7-day us-south
{: codeblock}
ロギング・サービスが作成されると、{{site.data.keyword.Bluemix_short}} にログインし、ロギング・サービス・インスタンスを検索して、モニター・ダッシュボードをクリックできます。 モニター・ダッシュボードでは、ドライバーと実行プログラムのログ、および Spark アプリケーションのすべてのアプリケーション・ログを表示できます。
application_id
またはinstance_id
を使用して検索してください。 -
プラットフォーム・ロギングを有効にします。
{{site.data.keyword.iae_full_notm}}プラットフォーム・ログを表示するには、{{site.data.keyword.cloud_notm}}のプログラム識別情報ダッシュボードを使用して、プラットフォーム・ロギングを構成する必要があります。 プログラム識別情報ダッシュボードを使用してロギングを有効にするために実行する必要があるステップについては、プログラム識別情報ダッシュボードを使用したプラットフォーム・ログの構成を参照してください。
-
Analytics Engineのロギングを有効にします。
アクション :Enter:
ibmcloud analytics-engine-v3 log-config COMMAND [arguments...] [command options]
パラメーター値:
analytics-engine-v3
:ae-v3
(v3 CLI コマンドを使用) を使用します- COMMAND:
update
コマンド (ロギングを有効にする) を使用します
例 :Enter:
ibmcloud ae-v3 log-config update --instance-id 181ea**9ee01b --enable --output json
Analytics Engine インスタンスの削除
CLI を使用してインスタンスを削除することができます。例えば、より大きなワークロードを処理するためにまったく異なる構成のインスタンスが必要な場合などです。
必要な期間 Analytics Engine インスタンスを保持し、必要に応じて同じインスタンスに対して Spark アプリケーションをサブミットすることができます。
Analytics Engine インスタンスを削除する場合は、以下のようにします。
アクション :Enter:
ibmcloud resource service-instance-delete NAME|ID [-g RESOURCE_GROUP] -f
パラメーター値:
- NAME | ID: Analytics Engine インスタンス作成呼び出しの応答から取得した名前または GUID の値
- RESOURCE_GROUP: オプション・パラメーター。 サーバーレス・インスタンスが存在するリソース・グループの名前
例 :Enter:
ibmcloud resource service-instance-delete MyServiceInstance -g default -f
詳細情報
IBM Analytics Engine サーバーレス CLI リファレンスを参照してください。