探索建立無伺服器實例並使用 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,您需要:

現在您可以開始使用 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 中並從應用程式參照的自訂套件來建立程式庫集的相關資訊,請參閱 使用程式庫集

  1. 使用 IBM Cloud® 帳戶登入 IBM Cloud®。

    動作
    輸入:
        ibmcloud api <URL>
        ibmcloud login
    
    範例
    輸入:
        ibmcloud api https://cloud.ibm.com
        ibmcloud login
    
  2. 選取資源群組。 取得您帳戶的資源群組列表,並選擇一個用於建立IBM Analytics Engine無伺服器執行個體的資源群組:

    動作
    輸入:
        ibmcloud target -g RESOURCE_GROUP_NAME
    

    參數值:

    • RESOURCE_GROUP_NAME: 無伺服器實例所在的資源群組名稱
    範例
    輸入:
        ibmcloud resource groups
        ibmcloud target -g default
    
  3. 安裝IBM Cloud Object Storage服務,然後安裝Analytics Engine V3 CLI:

    動作
    輸入:
        ibmcloud plugin install cloud-object-storage
    
    動作
    輸入:
        ibmcloud plugin install analytics-engine-v3
    
  4. 建立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
    
  5. 在前一個步驟中,從 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::
    
  6. 建立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
    
  7. 建立 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 實例。

  1. 建立 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

    
    
  2. 檢查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 實例。

  1. 上傳 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}
    
    
    
  2. 檢查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 應用程式。

  3. 提交 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
    
  4. 檢查您提交之應用程式的詳細資料或狀態:

    動作
    輸入:
        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服務實例。

  1. 建立記載實例:

    動作
    輸入:
        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_idinstance_id 來搜尋。

  2. 啟用平台記載:

    若要檢視 {{site.data.keyword.iae_full_notm}} 平台日誌,您必須使用 {{site.data.keyword.cloud_notm}} 中的「觀察」儀表板來配置平台記載。 請參閱 透過「觀察」儀表板配置平台日誌,以取得您需要遵循以透過「觀察」儀表板啟用記載功能的步驟。

  3. 啟用 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

進一步瞭解

請參閱 IBM Analytics Engine無伺服器 CLI 參考