探索如何使用 CLI 创建无服务器实例和提交应用程序
了解如何使用 IBM Analytics Engine CLI 来创建创建和管理无服务器实例所需的服务,以及提交和监视 Spark 应用程序。
通过选择 IBM Analytics Engine 标准无服务器计划来创建无服务器实例。 供应无服务器实例时,将创建 Apache Spark 集群,您可以使用自己选择的库包对其进行定制,并在其中运行 Spark 应用程序。
目标
您将学习如何安装和设置需要使用 CLI 的以下服务和组件:
- IBM Cloud Object Storage 实例,其中 IBM Analytics Engine 实例存储定制应用程序库和 Spark 历史记录事件。
- 应用程序文件和数据文件的 Object Storage 存储区。
- IBM Analytics Engine 无服务器实例。 每当部署 Spark 工作负载时,都会随需应变地分配此实例的计算和内存资源。 当应用程序未处于运行状态时,不会为实例分配任何计算资源。 价格基于实例耗用的资源的实际使用情况,按每秒计费。
- 日志记录服务可帮助您对 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 实例并检索凭证
创建 IBM Cloud Object Storage 实例,并使用 Analytics Engine Serverless CLI 检索 Cloud Object Storage 凭证 (服务密钥)。
IBM Analytics Engine 实例需要您创建的 Cloud Object Storage 实例作为其 实例主目录 存储器,以用于 Spark 历史记录事件以及要在应用程序中使用的任何定制库或包。 请参阅 实例主目录。
有关如何使用存储在 Cloud Object Storage 中并从应用程序引用的定制包来创建库集的更多信息,请参阅 使用库集。
-
使用 IBM Cloud® 帐户登录到 IBM Cloud®。
- 操作
- 输入:
ibmcloud api <URL> ibmcloud login
- 示例
- 输入:
ibmcloud api https://cloud.ibm.com ibmcloud login
-
选择资源组。 获取帐户的资源组列表,并选择要在其中创建 IBM Analytics Engine 无服务器实例的资源组:
- 操作
- 输入:
ibmcloud target -g RESOURCE_GROUP_NAME
参数值:
- RESOURCE_GROUP_NAME: 无服务器实例所在的资源组的名称
- 示例
- 输入:
ibmcloud resource groups ibmcloud target -g default
-
安装 IBM Cloud Object Storage 服务,然后安装 Analytics Engine V3 CLI:
- 操作
- 输入:
ibmcloud plugin install cloud-object-storage
- 操作
- 输入:
ibmcloud plugin install analytics-engine-v3
-
创建 Cloud Object Storage 实例:
- 操作
- 输入:
ibmcloud resource service-instance-create INSTANCE_NAME cloud-object-storage PLAN global
参数值:
- INSTANCE_NAME: 您选择的任何名称
- PLAN: 要在创建实例时使用的 Cloud Object Storage 计划
- 示例
- 输入:
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 创建调用的响应中的标识值来配置 CRN:
- 操作
- 输入:
ibmcloud cos config crn Resource Instance ID CRN: ID
参数值:
- 标识: 来自 Cloud Object Storage 创建调用的响应的标识值
- 示例
- 输入:
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 存储区:
- 操作
- 输入:
ibmcloud cos bucket-create --bucket BUCKET_NAME [--class CLASS_NAME] [--ibm-service-instance-id ID] [--region REGION] [--output FORMAT]
参数值:
- BUCKET_NAME: 您选择的任何名称
- 标识: 来自 Cloud Object Storage 创建调用的响应的 GUID 值
- REGION: 在其中创建了 Cloud Object Storage 实例的 IBM Cloud 区域
- FORMAT: 输出格式可以是 JSON 或文本。
- 示例
- 输入:
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 服务密钥:
- 操作
- 输入:
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.
- 示例
- 输入:
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 服务实例:
- 操作
- 输入:
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.3" }, "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>"} }
- 示例
- 输入:
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/183aac93b485e:181eabe1-709781b:: GUID: 181ea9ee01b 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 服务的状态:
- 操作
- 输入:
ibmcloud ae-v3 instance show –id INSTANCE_ID
参数值:
- INSTANCE_ID: Analytics Engine 实例创建调用的响应中 GUID 的值
- 示例
- 输入:
ibmcloud ae-v3 instance show –id 181ea**9ee01b
- 响应
- 示例返回:
{ "default_runtime": { "spark_version": "3.3" }, "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 应用程序。
本教程说明如何将 Spark 应用程序添加到 Analytics Engine 实例用作 实例主目录 的 Cloud Object Storage 实例存储区。 如果要将实例相关文件与用于运行应用程序的文件 (例如,应用程序文件本身,数据文件和任何分析结果) 分开,那么可以在同一 Cloud Object Storage 实例中使用其他存储区,也可以使用其他 Cloud Object Storage 实例。
-
上载 Spark 应用程序文件:
- 操作
- 输入:
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 应用程序文件的文件名和路径
- 示例
- 输入:
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
def transformFunc(x): return cmath.sqrt(x) +cmath.log(x)+cmath.log10(x)
def main(): spark,sc = init_spark () partitions=[10,5] for i 在范围 (0,2) 内: data=range (1,20000000) v0 = sc.parallelize(数据,分区[i]) v1 = v0.map(transformFunc) print (f "v1.count 是 {v1.count()}。完成 ") time.sleep(60) 如果 name == "main": main()
{: codeblock}
-
检查 Analytics Engine 服务的状态:
- 操作
- 输入:
ibmcloud ae-v3 instance show –id INSTANCE ID
参数值:
- INSTANCE_ID: Analytics Engine 实例创建调用的响应中 GUID 的值
- 示例
- 输入:
ibmcloud ae-v3 instance show –id 181ea**9ee01b
- 响应
- 示例返回:
{ "default_runtime": { "spark_version": "3.3" }, "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 应用程序:
- 操作
- 输入:
ibmcloud ae-v3 spark-app submit --instance-id INSTANCE_ID -–app APPLICATION_PATH
参数值:
- INSTANCE_ID: Analytics Engine 实例创建调用的响应中 GUID 的值
- APPLICATION_PATH: Spark 应用程序文件的文件名和路径
- IOS 和 Linux 示例
- 输入:
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 上,需要对引号进行转义。
- 输入:
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
-
检查您提交的应用程序的详细信息或状态:
- 操作
- 输入:
ibmcloud ae-v3 spark-app show --instance-id INSTANCE_ID --app-id APPLICATION_ID
参数值:
- INSTANCE_ID: Analytics Engine 创建调用的响应中 GUID 的值
- APPLICATION_ID: 来自 spark-app submit 调用响应的标识值
- 示例
- 输入:
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 服务实例。
-
创建日志记录实例:
- 操作
- 输入:
ibmcloud resource service-instance-create NAME logdna SERVICE_PLAN_NAME LOCATION
参数值:
- NAME: 您为 IBM Log Analysis 服务实例选择的任何名称
- SERVICE_PLAN_NAME: 服务套餐的名称。 有关有效值,请参阅 服务套餐。
- LOCATION: 启用 Analytics Engine 以将日志发送到 IBM Log Analysis的位置。 有关有效位置,请参阅 计算无服务器服务。
- 示例
- 输入:
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启用日志记录:
- 操作
- 输入:
ibmcloud analytics-engine-v3 log-config COMMAND [arguments...] [command options]
参数值:
analytics-engine-v3
: 使用ae-v3
以使用 v3 CLI 命令- COMMAND: 使用
update
命令来启用日志记录
- 示例
- 输入:
ibmcloud ae-v3 log-config update --instance-id 181ea**9ee01b --enable --output json
删除 Analytics Engine 实例
可以使用 CLI 来删除实例,例如,如果需要具有完全不同的配置的实例来处理更大的工作负载。
只要您需要,就可以保留 Analytics Engine 实例,并根据需要针对同一实例提交 Spark 应用程序。
如果要删除 Analytics Engine 实例:
- 操作
- 输入:
ibmcloud resource service-instance-delete NAME|ID [-g RESOURCE_GROUP] -f
参数值:
- NAME | ID: 来自 Analytics Engine 实例创建调用响应的名称或 GUID 的值
- RESOURCE_GROUP: 可选参数。 无服务器实例所在的资源组的名称
- 示例
- 输入:
ibmcloud resource service-instance-delete MyServiceInstance -g default -f