IBM Cloud Docs
Criação de um conjunto de bibliotecas para outros pacotes ou download de arquivos

Criação de um conjunto de bibliotecas para outros pacotes ou download de arquivos

Para customizar a instância incluindo bibliotecas em um conjunto de bibliotecas cujas fontes sejam diferentes dos repositórios conda ou pip, deve-se usar customização baseada em script.

Se você estiver usando apenas um conjunto de arquivos JAR ou arquivos PY, você deve usar os argumentos "application_details" > "conf" > "spark.submit.pyFiles" ou "application_details" > "jars" em sua carga útil de envio do aplicativo Spark e apenas criar um conjunto de bibliotecas se este método não funcionar para você. Para obter mais informações, consulte Enviando um aplicativo Spark

Com customização baseada em script, você cria um script Python usando a convenção de nomenclatura do módulo esperada pelo IBM Analytics Engine. Além disso, é necessário implementar uma função Python que atue como ponto de entrada executável para o script. Nesse script, é possível incluir sua própria lógica para fazer download das bibliotecas e colocá-las em um diretório pré-designado, que é /home/spark/shared/user-libs/<libraryset_name>/custom/<subdir_if_applicable>, para que se tornem parte do conjunto de bibliotecas e sejam armazenadas para consumo posterior em seu aplicativo.

Criando um conjunto de bibliotecas usando customização baseada em script

Execute estas etapas para criar um conjunto de bibliotecas usando customização baseada em script:

  1. Crie um arquivo Python denominado customization_script.py. O componente de customização do Analytics Engine procura por um módulo Python com esse nome.

  2. Em seu customization_script.py, impleta uma função chamada customize(<install_path>, <params>), em que <install_path> é o local pré-designado onde as bibliotecas são baixadas para, a saber, /home/spark/shared/user-libs/<libraryset_name>/custom/<subdir_if_applicable>. Você não pode mudar este caminho. <params> é uma lista dos parâmetros exigidos pelo script de customização.

  3. Armazene o arquivo customization_script.py em IBM Cloud Object Storage ou no GitHub.

  4. Passe o local do arquivo customization_script.py para o aplicativo Spark de customização por meio do parâmetro "application_details" > "conf" > "spark.submit.pyFiles".

    A seção "arguments" na carga útil de envio do aplicativo Spark deve conter uma seção "library_set" com detalhes, como "action" e "name", conforme mostrado na carga útil de amostra a seguir.

    Exemplo da carga útil:

    {
      "application_details": {
      "application": "/opt/ibm/customization-scripts/customize_instance_app.py",
        "arguments": ["{\"library_set\":{\"action\":\"add\",\"name\":\"customize_integration_custom_lib\",\"script\":{\"source\":\"py_files\",\"params\":[\"https://s3.direct.<CHANGEME_REGION>.cloud-object-storage.appdomain.cloud\",\"<CHANGEME_BUCKET_NAME>\",\"libcalc.so\",\"<CHANGEME_ACCESS_KEY>\",\"<CHANGEME_SECRET_KEY>\"]}}}"],
        "conf": {
          "spark.hadoop.fs.cos.dev-cos.endpoint":"https://s3.direct.<CHANGEME_REGION>.cloud-object-storage.appdomain.cloud",
          "spark.hadoop.fs.cos.dev-cos.access.key":"<CHANGEME_ACCESS_KEY>",
          "spark.hadoop.fs.cos.dev-cos.secret.key":"<CHANGEME_SECRET_KEY>",
          "spark.submit.pyFiles":"cos://<CHANGEME_BUCKET_NAME>.dev-cos/customization_script.py"
        }
      }
    }
    

    Exemplo de customization_script.py:

    import cos_utils
    import os
    import sys
    
    def customize(install_path, params):
      print ("inside base install_misc_package(), override this to implement your own implementation.")
      for param in params:
       print(param)
      endpoint = params[0]
      bucket_name = params[1]
      log_config_file = params[2]
      access_key = params[3]
      secret_key = params[4]
      cos = cos_utils.get_cos_object(access_key, secret_key, endpoint)
    
      retCode = cos_utils.download_file(log_config_file, cos, bucket_name, "{}/{}".format(install_path, log_config_file))
      if (retCode != 0):
           print("non-zero return code while downloading file    {}".format(str(retCode)))
           sys.exit(retCode)
      else:
           print("Successfully downloaded file...")
    

Usando o conjunto de bibliotecas criado usando customização baseada em script

Ao utilizar um conjunto de bibliotecas criado por meio de um script, é necessário incluir o caminho da biblioteca em determinadas variáveis de ambiente para que o conjunto de bibliotecas possa ser acessado pelo aplicativo Spark.

Por exemplo, se a biblioteca customizada for um arquivo .so, será necessário incluir "EXTRA_LD_LIBRARY_PATH" na seção "env" da chamada de envio do aplicativo Spark com o valor /home/spark/shared/user-libs/<libraryset_name>/custom/<subdir_if_applicable>. Isso prece "EXTRA_LD_LIBRARY_PATH" para "LD_LIBRARY_PATH", garantindo que esse seja o primeiro caminho para o arquivo .so que é procurado.

Se a sua biblioteca personalizada for um arquivo JAR e você precisar que ele esteja acessível no classpath do Spark, você deve especificar o arquivo JAR no caminho extra de classe para driver / executor dependendo de onde você necessitá o arquivo JAR. Por exemplo, para adicioná-lo em frente ao classpath do driver, inclua a propriedade a seguir, onde o nome do conjunto da biblioteca é java_library:

"spark.driver.extraClassPath":"/home/spark/shared/user-libs/java_library/custom/*"

Se a sua biblioteca customizada for um arquivo de certificado, por exemplo um certificado auto assinado ICD Postgres, você poderá especificá-lo na URL de conexão da seguinte maneira:

sslrootcert=/home/spark/shared/user-libs/customize_integration_custom_lib/custom/postgres.cert`

Para obter detalhes, consulte Usando IBM Cloud Databases for PostgreSQL como metastore externa.

Se a sua biblioteca customizada é um arquivo de configuração, ele é disponibilizado para os drivers e executores do Spark automaticamente.

Exemplo de script de customização com um download de vários arquivos

Os parâmetros, e o script mencionado na seção anterior são apenas uma amostra. Você pode implementar lógica adicional se precisar, como para download de um diretório ou vários arquivos ou download de fonte diferente, e assim por diante.

Por exemplo, para fazer o download de vários arquivos de um diretório no Cloud Object Storage, veja Script script.