探索建立無伺服器實例並使用 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 建立呼叫的回應中複製 ID 值,以配置 CRN:
- 動作
- 輸入:
ibmcloud cos config crn Resource Instance ID CRN: ID參數值:
- ID: 來自 Cloud Object Storage 建立呼叫之回應的 ID 值
- 範例
- 輸入:
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: 您選擇的任何名稱
- ID: 來自 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.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>"} }- 範例
- 輸入:
ibmcloud resource service-instance-create test-ae-service ibmanalyticsengine standard-serverless-spark us-south -p @ae_provision.json- 回應
-
此範例傳回:
` 文字在資源群組中建立服務實例 test-ae-service帳戶 以 URL 編碼為: ... 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.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 應用程式。
本指導教學顯示如何將 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返回 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 in range (0,2): data=range (1,20000000) v0 = sc.parallelize (數據,分區[i] ) v1 = v0.map(transformFunc) print(f" v1.count是{v1.count()}。完成") time.sleep(60)
如果__名稱__=='主': 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.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 應用程式:
- 動作
- 輸入:
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 提交呼叫回應的 ID 值
- 範例
- 輸入:
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 實例建立呼叫回應的 Name 或 GUID 值
- RESOURCE_GROUP: 選用參數。 無伺服器實例所在的資源群組名稱
- 範例
- 輸入:
ibmcloud resource service-instance-delete MyServiceInstance -g default -f