Explore a criação de instâncias serverless e o envio de aplicativos usando a CLI

Aprenda a usar a CLI do IBM Analytics Engine para criar os serviços que você precisa para criar e gerenciar uma instância serverless e enviar e monitorar seus aplicativos Spark.

É possível criar uma instância serverless selecionando o plano serverless do IBM Analytics Engine Standard. Quando uma instância serverless é provisionada, um cluster do Apache Spark é criado, que pode ser customizado com pacotes de bibliotecas de sua escolha e no qual é possível executar seus aplicativos Spark.

Objetivos

Você aprenderá a instalar e configurar os serviços e componentes a seguir que precisarão usar a CLI:

  • Uma instância do IBM Cloud Object Storage na qual sua instância do IBM Analytics Engine armazena bibliotecas de aplicativos e eventos de histórico do Spark customizados.
  • Um depósito do Object Storage para arquivos de aplicativos e arquivos de dados.
  • Uma instância serverless do IBM Analytics Engine. Esta instância é alocada com recursos de computação e de memória on demand sempre que as cargas de trabalho do Spark são implementadas. Quando um aplicativo não está em estado de execução, nenhum recurso de computação é alocado para a instância. O preço é baseado no uso real dos recursos consumidos pela instância, faturados em uma segunda base.
  • Serviço de criação de log para ajudá-lo a solucionar problemas que possam ocorrer na instância do IBM Analytics Engine e no aplicativo enviado, bem como para visualizar qualquer saída gerada pelo seu aplicativo. Ao executar aplicativos com a criação de log ativada, os logs são encaminhados para um serviço IBM Log Analysis no qual eles são indexados, permitindo a procura de texto completo em todas as mensagens geradas e consulta conveniente com base em campos específicos.

Antes de Iniciar

Para começar a usar a CLI do Analytics Engine V3, é necessária:

  • Uma conta do IBM Cloud®.
  • Para instalar a CLI do IBM Cloud. Consulte Introdução à CLI do IBM Cloud para obter as instruções para fazer download e instalar a CLI.

Agora é possível começar a usar a CLI do Analytics Engine V3. Deve-se seguir as instruções nas etapas 1 e 2 para instalar os serviços necessários antes de iniciar com a etapa 3 para fazer upload e enviar os aplicativos Spark. A etapa 4 mostra como criar uma instância de criação de log e ativar a criação de log. A etapa 5 mostra como excluir uma instância do Analytics Engine, embora esta etapa seja opcional.

Criar uma instância do Cloud Object Storage e recuperar credenciais

Crie uma instância do IBM Cloud Object Storage e recupere as credenciais do Cloud Object Storage (chaves de serviço) usando a CLI do Analytics Engine Serverless.

A instância do Cloud Object Storage que você cria é necessária pela instância do IBM Analytics Engine como seu armazenamento de início da instância para eventos de histórico do Spark e quaisquer bibliotecas ou pacotes customizados que você deseja utilizar em seus aplicativos. Consulte Início da instância.

Para obter mais informações sobre como você pode criar um conjunto de bibliotecas com pacotes customizados que são armazenados no Cloud Object Storage e referenciados a partir de seu aplicativo, consulte Usando um conjunto de bibliotecas.

  1. Efetue login no IBM Cloud® usando sua conta IBM Cloud®.

    Ação :Enter:

        ibmcloud api <URL>
        ibmcloud login
    

    Exemplo :Enter:

        ibmcloud api https://cloud.ibm.com
        ibmcloud login
    
  2. Selecione o grupo de recursos. Obtenha a lista dos grupos de recursos para sua conta e selecione uma para criar a instância serverless do IBM Analytics Engine:

    Ação :Enter:

        ibmcloud target -g RESOURCE_GROUP_NAME
    

    Valores de parâmetro:

    • RESOURCE_GROUP_NAME: o nome do grupo de recursos no qual a instância serverless deve residir

    Exemplo :Enter:

        ibmcloud resource groups
        ibmcloud target -g default
    
  3. Instale o serviço IBM Cloud Object Storage e, em seguida, a CLI do Analytics Engine V3:

    Ação :Enter:

        ibmcloud plugin install cloud-object-storage
    

    Ação :Enter:

        ibmcloud plugin install analytics-engine-v3
    
  4. Crie uma instância do Cloud Object Storage:

    Ação :Enter:

        ibmcloud resource service-instance-create INSTANCE_NAME cloud-object-storage PLAN global
    

    Valores de parâmetro:

    • INSTANCE_NAME: qualquer nome de sua escolha
    • PLAN: o plano do Cloud Object Storage a ser usado ao criar a instância

    Exemplo :Enter:

        ibmcloud resource service-instance-create test-cos-object cloud-object-storage standard global
    
    Resposta
    O exemplo retorna:
        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. Configure o CRN copiando o valor do ID a partir da resposta da chamada de criação do Cloud Object Storage na etapa anterior:

    Ação :Enter:

        ibmcloud cos config crn
        Resource Instance ID CRN: ID
    

    Valores de parâmetro:

    • ID: o valor do ID a partir da resposta da chamada de criação do Cloud Object Storage

    Exemplo :Enter:

        ibmcloud cos config crn
        Resource Instance ID CRN: crn:v1:bluemix:public:cloud-object-storage:global:a/867d444f64594fd68c7ebf4baf8f6c90:ebad3176-8a1a-41f2-a803-217621bf6309::
    
  6. Crie um depósito do Cloud Object Storage:

    Ação :Enter:

        ibmcloud cos bucket-create --bucket BUCKET_NAME [--class CLASS_NAME] [--ibm-service-instance-id ID] [--region REGION] [--output FORMAT]
    

    Valores de parâmetro:

    • BUCKET_NAME: qualquer nome de sua escolha
    • ID: o valor do GUID a partir da resposta da chamada de criação do Cloud Object Storage
    • REGION: a região da IBM Cloud na qual a instância do Cloud Object Storage foi criada
    • FORMAT: o formato de saída que pode ser JSON ou texto.

    Exemplo :Enter:

        ibmcloud cos bucket-create --bucket test-cos-storage-bucket --region us-south --ibm-service-instance-id ebad3176-8a1a-41f2-a803-217621bf6309 --output json
    
  7. Crie chaves de serviço Cloud Object Storage:

    Ação :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.
    

    Exemplo :Enter:

        ibmcloud resource service-key-create test-service-key-cos-bucket Writer --instance-name test-cos-object --parameters '{"HMAC":true}'
    
    Resposta
    O exemplo retorna:
    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::
    

Criar uma instância serverless do Analytics Engine

Criar uma instância serverless do Analytics Engine usando a CLI.

  1. Crie a instância de serviço Analytics Engine:

    Ação :Enter:

        ibmcloud resource service-instance-create INSTANCE_NAME ibmanalyticsengine standard-serverless-spark us-south -p @provision.json
    

    Valores de parâmetro:

    • INSTANCE_NAME: qualquer nome de sua escolha
    • @provision.json: estruture o arquivo JSON conforme mostrado no exemplo a seguir. Use a chave de acesso e secreta a partir da resposta da chamada de criação de chave de serviço Cloud Object Storage.
    Exemplo do arquivo provision.json
    arquivo JSON de amostra:
        {
           "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>"}
        }
    

    Exemplo :Enter:

        ibmcloud resource service-instance-create test-ae-service ibmanalyticsengine standard-serverless-spark us-south -p @ae_provision.json
    
    Resposta

    O exemplo retorna: ` text Criando instância de serviço test-ae-service no grupo de recursos de conta como ...

    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. Verifique o status do serviço Analytics Engine:

    Ação :Enter:

        ibmcloud ae-v3 instance show –id INSTANCE_ID
    

    Valores de parâmetro:

    • INSTANCE_ID: o valor do GUID a partir da resposta da chamada de criação de instância do Analytics Engine

    Exemplo :Enter:

        ibmcloud ae-v3 instance show –id 181ea**9ee01b
    

    Resposta
    O exemplo retorna:
        {
           "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": "**"
        }
    

    Envie o seu aplicativo Spark apenas quando o estado do serviço Analytics Engine estiver ativo.

Fazer upload e enviar um aplicativo Spark

Faça upload de um arquivo de aplicativo para Cloud Object Storage e envie um aplicativo Spark.

Este tutorial mostra como incluir o aplicativo Spark no depósito de instância do Cloud Object Storage que é usado como início da instância pela instância do Analytics Engine . Se você deseja separar os arquivos relacionados da instância dos arquivos que você usa para executar seus aplicativos, por exemplo, os próprios arquivos de aplicativos, arquivos de dados e quaisquer resultados de sua análise, é possível usar um depósito diferente na mesma instância do Cloud Object Storage ou usar uma instância do Cloud Object Storage diferente.

  1. Faça upload do arquivo do aplicativo Spark:

    Ação :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]
    

    Valores de parâmetro:

    • BUCKET_NAME: o nome do depósito usado quando o depósito foi criado
    • KEY: o nome do arquivo de aplicativo
    • PATH: o nome e caminho do arquivo para o arquivo de aplicativo do Spark

    Exemplo :Enter:

        ibmcloud cos upload --bucket test-cos-storage-bucket --key test-math.py --file test-math.py
    

    Arquivo de aplicativo de amostra
    Amostra do 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 retornar spark,sc

    def transformFunc(x): retornar cmath.sqrt(x) +cmath.log(x)+cmath.log10(x)

    def main(): spark, sc = init_spark () partições=[10,5] para i no intervalo (0, 2): data=range (1.20000000) v0 = sc.parallelize(data, [partitionsi]) v1 = v0.map(transformFunc) print(fv1.count is {v1.count()}. Done") time.sleep(60)

    se name =='main': main()

    {: codeblock}
    
    
    
  2. Verifique o status do serviço Analytics Engine:

    Ação :Enter:

        ibmcloud ae-v3 instance show –id INSTANCE ID
    

    Valores de parâmetro:

    • INSTANCE_ID: o valor do GUID a partir da resposta da chamada de criação de instância do Analytics Engine

    Exemplo :Enter:

        ibmcloud ae-v3 instance show –id 181ea**9ee01b
    

    Resposta
    O exemplo retorna:
        {
           "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": "**"
        }
    

    Envie o seu aplicativo Spark apenas quando o estado do serviço Analytics Engine estiver ativo.

  3. Envie o aplicativo Spark:

    Ação :Enter:

        ibmcloud ae-v3 spark-app submit --instance-id INSTANCE_ID -–app APPLICATION_PATH
    

    Valores de parâmetro:

    • INSTANCE_ID: o valor do GUID a partir da resposta da chamada de criação de instância do Analytics Engine
    • APPLICATION_PATH: o nome e o caminho do arquivo para o arquivo de aplicativo do Spark

    Exemplo para IOS e 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"}'
    

    Exemplo para Windows (não Powershell). Observe que, no Windows, as aspas precisam ser escapadas. :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\"}"
    

    Resposta
    O exemplo retorna:
        id      7f7096d2-5c44-4d9a-ac01-b904c7611b7b
        state   accepted
    
  4. Confira os detalhes ou o status do aplicativo que você enviou:

    Ação :Enter:

        ibmcloud ae-v3 spark-app show --instance-id INSTANCE_ID --app-id APPLICATION_ID
    

    Valores de parâmetro:

    • INSTANCE_ID: o valor do GUID a partir da resposta da chamada de criação do Analytics Engine
    • APPLICATION_ID: o valor do ID a partir da resposta da chamada de envio spark-app

    Exemplo :Enter:

        ibmcloud ae-v3 spark-app show --instance-id 181ea**9ee01b --app-id 7f7096d2-5c44-4d9a-ac01-b904c7611b7b
    

    Resposta
    O exemplo retorna:
        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
    

    O aplicativo pode levar entre 2 a 5 minutos para ser concluído..

Gere um serviço de criação de log para ver os logs

É possível usar a CLI do Analytics Engine para ativar a criação de log para ajudar a solucionar problemas no IBM Analytics Engine. Antes de ativar a criação de log, é necessário criar uma instância de serviço IBM Log Analysis para a qual os logs são encaminhados.

  1. Gere uma instância de criação de log:

    Ação :Enter:

        ibmcloud resource service-instance-create NAME logdna SERVICE_PLAN_NAME LOCATION
    

    Valores de parâmetro:

    • NAME: qualquer nome de sua escolha para a instância de serviço IBM Log Analysis
    • SERVICE_PLAN_NAME: o nome do plano de serviço. Para obter valores válidos, consulte Planos de serviço.
    • LOCAL: localidades em que o Analytics Engine está ativado para enviar logs para o IBM Log Analysis. Para locais válidos, consulte Serviços de computação serverless.

    Exemplo :Enter:

        ibmcloud resource service-instance-create my-log-instance logdna 7-day us-south
    
     {: codeblock}
    

    Uma vez gerado o serviço de criação de log, é possível efetuar login no {{site.data.keyword.Bluemix_short}}, procurar a instância de serviço de criação de log e clicar no painel de monitoramento. Lá é possível visualizar os logs do driver e do executor, bem como todos os logs de aplicativos para o seu aplicativo Spark.

    Procure usando application_id ou instance_id.

  2. Ativar criação de log da plataforma:

    Para visualizar os logs da plataforma {{site.data.keyword.iae_full_notm}}, deve-se usar o painel Observabilidade em {{site.data.keyword.cloud_notm}} para configurar a criação de log da plataforma. Consulte Configurando logs da plataforma por meio do Painel de observabilidade para conhecer as etapas que devem ser seguidas para ativar a criação de log por meio do painel Observabilidade.

  3. Ative a criação de log para o Analytics Engine:

    Ação :Enter:

        ibmcloud analytics-engine-v3 log-config COMMAND [arguments...] [command options]
    

    Valores de parâmetro:

    • analytics-engine-v3: use ae-v3 para usar os comandos da CLI v3
    • COMMAND: use o comando update para ativar a criação de log

    Exemplo :Enter:

       ibmcloud ae-v3 log-config update --instance-id 181ea**9ee01b --enable --output json
    

Excluir instância do Analytics Engine

É possível usar a CLI para excluir uma instância, por exemplo, se você precisar de uma instância com uma configuração completamente diferente para manipular cargas de trabalho maiores.

É possível reter uma instância do Analytics Engine desde que você deseja enviar seus aplicativos Spark com relação à mesma instância em uma base necessária.

Se você deseja excluir uma instância do Analytics Engine:

Ação :Enter:

    ibmcloud resource service-instance-delete NAME|ID [-g RESOURCE_GROUP] -f

Valores de parâmetro:

  • NAME|ID: o valor do Nome ou do GUID a partir da resposta da chamada de criação de instância do Analytics Engine
  • RESOURCE_GROUP: parâmetro opcional. O nome do grupo de recursos no qual a instância serverless reside

Exemplo :Enter:

    ibmcloud resource service-instance-delete MyServiceInstance  -g default  -f

Saiba mais

Consulte a Referência da CLI serverless do IBM Analytics Engine.