IBM Cloud Docs
Trabalhando com o catálogo do Apache Hudi

Trabalhando com o catálogo do Apache Hudi

O tópico descreve o procedimento para executar um aplicativo Spark que alimenta dados em um Catálogo do Apache Hudi

  1. Crie um armazenamento com o catálogo Apache Hudi para armazenar dados usados no aplicativo Spark. Para criar armazenamento com o catálogo do Apache Hudi, consulte Incluindo um par de catálogo de armazenamento.

  2. Associe o armazenamento ao mecanismo do Spark externo Para obter mais informações, consulte Associando um catálogo a um mecanismo.

  3. Crie o Cloud Object Storage (COS) para armazenar o aplicativo Spark. Para criar Cloud Object Storage e um depósito, consulte Criando um depósito de armazenamento.

  4. Registre o Cloud Object Storage em watsonx.data. Para obter mais informações, consulte Incluindo um par de catálogos de armazenamento

  5. Salve o aplicativo Spark a seguir (arquivoPython ) em sua máquina local. Aqui, hudi_demo.py..

    O aplicativo Spark Python demonstra a funcionalidade a seguir:

    • Ele cria um banco de dados dentro do catálogo Apache Hudi (que você criou para armazenar dados). Aqui, <database_name>..
    • Ele cria uma tabela no banco de dados <database_name>, chamada <table_name>.
    • Ele insere dados na <table_name> e faz a operação de consulta SELECT.
    • Ele elimina a tabela e o esquema após o uso
        from pyspark.sql import SparkSession
    
        def init_spark():
            spark = SparkSession.builder \
                .appName("CreateHudiTableInCOS") \
                .enableHiveSupport() \
                .getOrCreate()
            return spark
    
        def main():
    
            try:
                spark = init_spark()
                spark.sql("show databases").show()
                spark.sql("create database if not exists spark_catalog.<database_name> LOCATION 's3a://<data_storage_name>/'").show()
                spark.sql("create table if not exists spark_catalog.<database_name>.<table_name> (id bigint, name string, location string) USING HUDI OPTIONS ('primaryKey' 'id', hoodie.write.markers.type= 'direct', hoodie.embed.timeline.server= 'false')").show()
                spark.sql("insert into <database_name>.<table_name> VALUES (1, 'Sam','Kochi'), (2, 'Tom','Bangalore'), (3, 'Bob','Chennai'), (4, 'Alex','Bangalore')").show()
                spark.sql("select * from spark_catalog.<database_name>.<table_name>").show()
                spark.sql("drop table spark_catalog.<database_name>.<table_name>").show()
                spark.sql("drop schema spark_catalog.<database_name> CASCADE").show()
    
            finally:
                spark.stop()
    
        if __name__ == '__main__':
            main()
    
  6. Faça upload do aplicativo Spark para o COS, consulte Fazendo upload de dados.

  7. Para enviar o aplicativo Spark com dados que residem no Cloud Object Storage, especifique os valores de parâmetro e execute o comando curl a seguir

    curl --request POST \
    --url https://api.<region>.ae.cloud.ibm.com/v3/analytics_engines/<iae-instance-guid>/spark_applications \
    --header 'Authorization: Bearer <token>' \
    --header 'Content-Type: application/json' \
    --data '{
    		"conf": {
            "spark.serializer" : "org.apache.spark.serializer.KryoSerializer",
            "spark.hadoop.fs.s3a.bucket.<data_storage_name>.endpoint" : "<your_data_bucket_direct_endpoint>",
            "spark.hadoop.fs.s3a.bucket.<data_storage_name>.access.key" : "<data_bucket_access_key>",
            "spark.hadoop.fs.s3a.bucket.<data_storage_name>.secret.key" : "<data_bucket_secret_key>",
            "spark.hadoop.fs.s3a.path.style.access" : "true",
            "spark.hadoop.fs.s3a.impl" : "org.apache.hadoop.fs.s3a.S3AFileSystem",
            "spark.hive.metastore.uris" : "<metastore URL>",
            "spark.hive.metastore.use.SSL" : "true",
            "spark.hive.metastore.truststore.path" : "file:///opt/ibm/jdk/lib/security/cacerts",
            "spark.hive.metastore.truststore.password" : "changeit",
            "spark.hive.metastore.truststore.type" : "JKS",
            "spark.hive.metastore.client.auth.mode" : "PLAIN",
            "spark.hive.metastore.client.plain.username" : "ibmlhapikey",
            "spark.hive.metastore.client.plain.password" : "<wxd_api_key>",
            "spark.driver.extraJavaOptions" : "-Dcom.sun.jndi.ldap.object.disableEndpointIdentification=true -Djdk.tls.trustNameService=true",
            "spark.executor.extraJavaOptions" : "-Dcom.sun.jndi.ldap.object.disableEndpointIdentification=true -Djdk.tls.trustNameService=true",
            "spark.hadoop.hive.metastore.schema.verification" : "false",
            "spark.hadoop.hive.metastore.schema.verification.record.version" : "false",
        "spark.sql.extensions": "org.apache.spark.sql.hudi.HoodieSparkSessionExtension",
           "spark.kryo.registrator": "org.apache.spark.HoodieSparkKryoRegistrar",
           "spark.sql.catalog.spark_catalog.type": "hudi",
            "spark.sql.catalog.spark_catalog": "org.apache.spark.sql.hudi.catalog.HoodieCatalog"
    
    		},
    		"application": "s3a://<data_storage_name>/hudi_demo.py"
    	}
    

Valores de parâmetro:

  • <region>: a região na qual você provisiona a instância do mecanismo do Analytics.

  • <iae-instance-guid>: o GUID da instância do mecanismo do Analytics. Para obter isso, consulte Recuperando detalhes de uma instância sem servidor

  • <token>: O token de portador. Para obter mais informações sobre como gerar o token, consulte token do IAM.

  • <your_data_bucket_direct_endpoint> : o terminal direto para acessar o depósito de dados Exemplo, s3.us-south.cloud-object-storage.appdomain.cloud para um depósito de armazenamento de objeto de nuvem na região us-south. Para obter mais informações, consulte Credenciais de serviço

  • <data_bucket_access_key> : a chave de acesso para o armazenamento do Cloud Object (armazenamento de dados). Para obter mais informações, consulte Criar credenciais do HMAC usando a CLI.

  • <data_bucket_secret_key> : a chave secreta para o armazenamento do Cloud Object (armazenamento de dados). Para obter mais informações, consulte Criar credenciais do HMAC usando a CLI.

  • <metastore URL>: O site URL do catálogo. Para obter mais informações, consulte Obtendo o ponto de extremidade MDS.

  • <wxd_api_key>: para gerar a chave de API, efetue login no console watsonx.data e navegue para Perfil> Perfil e configurações> Chaves de API e gere uma nova chave de API.

  1. Após enviar o aplicativo Spark, você receberá uma mensagem de confirmação com o ID do aplicativo e a versão do Spark. Guarde para referência.
  2. Efetue login no cluster watsonx.data, acesse a página Detalhes do mecanismo. Na guia Aplicativos, use o ID do aplicativo para listar o aplicativo e controlar os estágios Para obter mais informações, consulte Visualizar e gerenciar aplicativos