Plantilla de Cloud Storage a JDBC

Usa la plantilla de Cloud Storage a JDBC de Serverless para Apache Spark para extraer datos de Cloud Storage a bases de datos JDBC.

Usar la plantilla

Ejecuta la plantilla con la CLI de gcloud o la API de Dataproc.

gcloud

Antes de usar los datos de los comandos que se indican a continuación, haz los siguientes cambios:

  • PROJECT_ID: obligatorio. El ID de tu proyecto, que aparece en la sección Configuración de gestión de identidades y accesos. Google Cloud
  • REGION: obligatorio. Región de Compute Engine.
  • SUBNET: opcional. Si no se especifica ninguna subred, se seleccionará la subred de la red default de la región especificada.

    Ejemplo: projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME

  • JDBC_CONNECTOR_CLOUD_STORAGE_PATH: obligatorio. Ruta completa de Cloud Storage, incluido el nombre de archivo, donde se almacena el archivo JAR del conector JDBC. Puedes usar los siguientes comandos para descargar conectores JDBC y subirlos a Cloud Storage:
    • MySQL:
      wget http://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.30.tar.gz
            
    • Postgres SQL:
      wget https://jdbc.postgresql.org/download/postgresql-42.2.6.jar
            
    • Microsoft SQL Server:
        
      wget https://repo1.maven.org/maven2/com/microsoft/sqlserver/mssql-jdbc/6.4.0.jre8/mssql-jdbc-6.4.0.jre8.jar
            
    • Oracle:
      wget https://repo1.maven.org/maven2/com/oracle/database/jdbc/ojdbc8/21.7.0.0/ojdbc8-21.7.0.0.jar
            
  • CLOUD_STORAGE_PATH: obligatorio. Ruta de Cloud Storage donde se almacenan los archivos de entrada.

    Ejemplo: gs://dataproc-templates/cloud_storage_to_jdbc_input

  • FORMAT: obligatorio. Formato de los datos de salida. Opciones: avro, parquet, csv o orc. Valor predeterminado: avro. Nota: Si avro, debes añadir "file:///usr/lib/spark/connector/spark-avro.jar" a la marca jars de la CLI de gcloud o al campo de la API.

    Ejemplo (el prefijo file:// hace referencia a un archivo JAR de Serverless para Apache Spark):

    --jars=file:///usr/lib/spark/connector/spark-avro.jar, [, ... otros frascos]
  • MODE: opcional. Modo de escritura de la salida de Cloud Storage. Opciones: Append, Overwrite, Ignore o ErrorIfExists. Valor predeterminado: ErrorIfExists.
  • Las siguientes variables se usan para crear el JDBC_CONNECTION_URL obligatorio:
    • JDBC_HOST
    • JDBC_PORT
    • JDBC_DATABASE o, en el caso de Oracle, JDBC_SERVICE
    • JDBC_USERNAME
    • JDBC_PASSWORD

    Crea el JDBC_CONNECTION_URL con uno de los siguientes formatos específicos del conector:

    • MySQL:
      jdbc:mysql://JDBC_HOST:JDBC_PORT/JDBC_DATABASE?user=JDBC_USERNAME&password=JDBC_PASSWORD
              
    • Postgres SQL:
      jdbc:postgresql://JDBC_HOST:JDBC_PORT/JDBC_DATABASE?user=JDBC_USERNAME&password=JDBC_PASSWORD
              
    • Microsoft SQL Server:
      jdbc:sqlserver://JDBC_HOST:JDBC_PORT;databaseName=JDBC_DATABASE;user=JDBC_USERNAME;password=JDBC_PASSWORD
              
    • Oracle:
      jdbc:oracle:thin:@//JDBC_HOST:JDBC_PORT/JDBC_SERVICE?user=JDBC_USERNAME&password=
              
  • JDBC_TABLE: obligatorio. Nombre de la tabla en la que se escribirán los resultados.
  • DRIVER: obligatorio. El controlador JDBC que se usa para la conexión:
    • MySQL:
      com.mysql.cj.jdbc.Driver
              
    • Postgres SQL:
      org.postgresql.Driver
              
    • Microsoft SQL Server:
        
      com.microsoft.sqlserver.jdbc.SQLServerDriver
              
    • Oracle:
      oracle.jdbc.driver.OracleDriver
              
  • TEMPLATE_VERSION: obligatorio. Especifique latest para la versión más reciente de la plantilla o la fecha de una versión específica (por ejemplo, 2023-03-17_v0.1.0-beta). Consulte gs://dataproc-templates-binaries o ejecute gcloud storage ls gs://dataproc-templates-binaries para ver una lista de las versiones de plantilla disponibles.
  • LOG_LEVEL: opcional. Nivel de registro. Puede ser uno de los siguientes: ALL, DEBUG, ERROR, FATAL, INFO, OFF, TRACE o WARN. Valor predeterminado: INFO.
  • NUM_PARTITIONS: opcional. Número máximo de particiones que se pueden usar para el paralelismo de las escrituras de tablas. Si se especifica, este valor se usa para la conexión de salida JDBC. El valor predeterminado son las particiones iniciales definidas por Spark read().
  • BATCH_SIZE: opcional. Número de registros que se insertarán por viaje de ida y vuelta. Valor predeterminado: 1000.
  • SERVICE_ACCOUNT: opcional. Si no se proporciona, se usa la cuenta de servicio predeterminada de Compute Engine.
  • PROPERTY y PROPERTY_VALUE: opcional. Lista de pares propiedad de Spark=value separados por comas.
  • LABEL y LABEL_VALUE: opcional. Lista de pares label=value separados por comas.
  • KMS_KEY: opcional. La clave de Cloud Key Management Service que se va a usar para el cifrado. Si no se especifica ninguna clave, los datos se cifran en reposo con una Google-owned and Google-managed encryption key.

    Ejemplo: projects/PROJECT_ID/regions/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME

Ejecuta el siguiente comando:

Linux, macOS o Cloud Shell

gcloud dataproc batches submit spark \
    --class=com.google.cloud.dataproc.templates.main.DataProcTemplate \
    --project="PROJECT_ID" \
    --region="REGION" \
    --version="1.2" \
    --jars="gs://dataproc-templates-binaries/TEMPLATE_VERSION/java/dataproc-templates.jar,JDBC_CONNECTOR_CLOUD_STORAGE_PATH" \
    --subnet="SUBNET" \
    --kms-key="KMS_KEY" \
    --service-account="SERVICE_ACCOUNT" \
    --properties="PROPERTY=PROPERTY_VALUE" \
    --labels="LABEL=LABEL_VALUE" \
    -- --template=GCSTOJDBC \
    --templateProperty project.id="PROJECT_ID" \
    --templateProperty log.level="LOG_LEVEL" \
    --templateProperty gcs.jdbc.input.location="CLOUD_STORAGE_PATH" \
    --templateProperty gcs.jdbc.input.format="FORMAT" \
    --templateProperty gcs.jdbc.output.saveMode="MODE" \
    --templateProperty gcs.jdbc.output.url="JDBC_CONNECTION_URL" \
    --templateProperty gcs.jdbc.output.table="JDBC_TABLE" \
    --templateProperty gcs.jdbc.output.driver="DRIVER" \
    --templateProperty gcs.jdbc.spark.partitions="NUM_PARTITIONS" \
    --templateProperty gcs.jdbc.output.batchInsertSize="BATCH_SIZE"

Windows (PowerShell)

gcloud dataproc batches submit spark `
    --class=com.google.cloud.dataproc.templates.main.DataProcTemplate `
    --project="PROJECT_ID" `
    --region="REGION" `
    --version="1.2" `
    --jars="gs://dataproc-templates-binaries/TEMPLATE_VERSION/java/dataproc-templates.jar,JDBC_CONNECTOR_CLOUD_STORAGE_PATH" `
    --subnet="SUBNET" `
    --kms-key="KMS_KEY" `
    --service-account="SERVICE_ACCOUNT" `
    --properties="PROPERTY=PROPERTY_VALUE" `
    --labels="LABEL=LABEL_VALUE" `
    -- --template=GCSTOJDBC `
    --templateProperty project.id="PROJECT_ID" `
    --templateProperty log.level="LOG_LEVEL" `
    --templateProperty gcs.jdbc.input.location="CLOUD_STORAGE_PATH" `
    --templateProperty gcs.jdbc.input.format="FORMAT" `
    --templateProperty gcs.jdbc.output.saveMode="MODE" `
    --templateProperty gcs.jdbc.output.url="JDBC_CONNECTION_URL" `
    --templateProperty gcs.jdbc.output.table="JDBC_TABLE" `
    --templateProperty gcs.jdbc.output.driver="DRIVER" `
    --templateProperty gcs.jdbc.spark.partitions="NUM_PARTITIONS" `
    --templateProperty gcs.jdbc.output.batchInsertSize="BATCH_SIZE"

Windows (cmd.exe)

gcloud dataproc batches submit spark ^
    --class=com.google.cloud.dataproc.templates.main.DataProcTemplate ^
    --project="PROJECT_ID" ^
    --region="REGION" ^
    --version="1.2" ^
    --jars="gs://dataproc-templates-binaries/TEMPLATE_VERSION/java/dataproc-templates.jar,JDBC_CONNECTOR_CLOUD_STORAGE_PATH" ^
    --subnet="SUBNET" ^
    --kms-key="KMS_KEY" ^
    --service-account="SERVICE_ACCOUNT" ^
    --properties="PROPERTY=PROPERTY_VALUE" ^
    --labels="LABEL=LABEL_VALUE" ^
    -- --template=GCSTOJDBC ^
    --templateProperty project.id="PROJECT_ID" ^
    --templateProperty log.level="LOG_LEVEL" ^
    --templateProperty gcs.jdbc.input.location="CLOUD_STORAGE_PATH" ^
    --templateProperty gcs.jdbc.input.format="FORMAT" ^
    --templateProperty gcs.jdbc.output.saveMode="MODE" ^
    --templateProperty gcs.jdbc.output.url="JDBC_CONNECTION_URL" ^
    --templateProperty gcs.jdbc.output.table="JDBC_TABLE" ^
    --templateProperty gcs.jdbc.output.driver="DRIVER" ^
    --templateProperty gcs.jdbc.spark.partitions="NUM_PARTITIONS" ^
    --templateProperty gcs.jdbc.output.batchInsertSize="BATCH_SIZE"

REST

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • PROJECT_ID: obligatorio. El ID de tu proyecto, que aparece en la sección Configuración de gestión de identidades y accesos. Google Cloud
  • REGION: obligatorio. Región de Compute Engine.
  • SUBNET: opcional. Si no se especifica ninguna subred, se seleccionará la subred de la red default de la región especificada.

    Ejemplo: projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME

  • JDBC_CONNECTOR_CLOUD_STORAGE_PATH: obligatorio. Ruta completa de Cloud Storage, incluido el nombre de archivo, donde se almacena el archivo JAR del conector JDBC. Puedes usar los siguientes comandos para descargar conectores JDBC y subirlos a Cloud Storage:
    • MySQL:
      wget http://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.30.tar.gz
            
    • Postgres SQL:
      wget https://jdbc.postgresql.org/download/postgresql-42.2.6.jar
            
    • Microsoft SQL Server:
        
      wget https://repo1.maven.org/maven2/com/microsoft/sqlserver/mssql-jdbc/6.4.0.jre8/mssql-jdbc-6.4.0.jre8.jar
            
    • Oracle:
      wget https://repo1.maven.org/maven2/com/oracle/database/jdbc/ojdbc8/21.7.0.0/ojdbc8-21.7.0.0.jar
            
  • CLOUD_STORAGE_PATH: obligatorio. Ruta de Cloud Storage donde se almacenan los archivos de entrada.

    Ejemplo: gs://dataproc-templates/cloud_storage_to_jdbc_input

  • FORMAT: obligatorio. Formato de los datos de salida. Opciones: avro, parquet, csv o orc. Valor predeterminado: avro. Nota: Si avro, debes añadir "file:///usr/lib/spark/connector/spark-avro.jar" a la marca jars de la CLI de gcloud o al campo de la API.

    Ejemplo (el prefijo file:// hace referencia a un archivo JAR de Serverless para Apache Spark):

    --jars=file:///usr/lib/spark/connector/spark-avro.jar, [, ... otros frascos]
  • MODE: opcional. Modo de escritura de la salida de Cloud Storage. Opciones: Append, Overwrite, Ignore o ErrorIfExists. Valor predeterminado: ErrorIfExists.
  • Las siguientes variables se usan para crear el JDBC_CONNECTION_URL obligatorio:
    • JDBC_HOST
    • JDBC_PORT
    • JDBC_DATABASE o, en el caso de Oracle, JDBC_SERVICE
    • JDBC_USERNAME
    • JDBC_PASSWORD

    Crea el JDBC_CONNECTION_URL con uno de los siguientes formatos específicos del conector:

    • MySQL:
      jdbc:mysql://JDBC_HOST:JDBC_PORT/JDBC_DATABASE?user=JDBC_USERNAME&password=JDBC_PASSWORD
              
    • Postgres SQL:
      jdbc:postgresql://JDBC_HOST:JDBC_PORT/JDBC_DATABASE?user=JDBC_USERNAME&password=JDBC_PASSWORD
              
    • Microsoft SQL Server:
      jdbc:sqlserver://JDBC_HOST:JDBC_PORT;databaseName=JDBC_DATABASE;user=JDBC_USERNAME;password=JDBC_PASSWORD
              
    • Oracle:
      jdbc:oracle:thin:@//JDBC_HOST:JDBC_PORT/JDBC_SERVICE?user=JDBC_USERNAME&password=
              
  • JDBC_TABLE: obligatorio. Nombre de la tabla en la que se escribirán los resultados.
  • DRIVER: obligatorio. El controlador JDBC que se usa para la conexión:
    • MySQL:
      com.mysql.cj.jdbc.Driver
              
    • Postgres SQL:
      org.postgresql.Driver
              
    • Microsoft SQL Server:
        
      com.microsoft.sqlserver.jdbc.SQLServerDriver
              
    • Oracle:
      oracle.jdbc.driver.OracleDriver
              
  • TEMPLATE_VERSION: obligatorio. Especifique latest para la versión más reciente de la plantilla o la fecha de una versión específica (por ejemplo, 2023-03-17_v0.1.0-beta). Consulte gs://dataproc-templates-binaries o ejecute gcloud storage ls gs://dataproc-templates-binaries para ver una lista de las versiones de plantilla disponibles.
  • LOG_LEVEL: opcional. Nivel de registro. Puede ser uno de los siguientes: ALL, DEBUG, ERROR, FATAL, INFO, OFF, TRACE o WARN. Valor predeterminado: INFO.
  • NUM_PARTITIONS: opcional. Número máximo de particiones que se pueden usar para el paralelismo de las escrituras de tablas. Si se especifica, este valor se usa para la conexión de salida JDBC. El valor predeterminado son las particiones iniciales definidas por Spark read().
  • BATCH_SIZE: opcional. Número de registros que se insertarán por viaje de ida y vuelta. Valor predeterminado: 1000.
  • SERVICE_ACCOUNT: opcional. Si no se proporciona, se usa la cuenta de servicio predeterminada de Compute Engine.
  • PROPERTY y PROPERTY_VALUE: opcional. Lista de pares propiedad de Spark=value separados por comas.
  • LABEL y LABEL_VALUE: opcional. Lista de pares label=value separados por comas.
  • KMS_KEY: opcional. La clave de Cloud Key Management Service que se va a usar para el cifrado. Si no se especifica ninguna clave, los datos se cifran en reposo con una Google-owned and Google-managed encryption key.

    Ejemplo: projects/PROJECT_ID/regions/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME

Método HTTP y URL:

POST https://dataproc.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/batches

Cuerpo JSON de la solicitud:


{
  "environmentConfig": {
    "executionConfig": {
      "subnetworkUri": "SUBNET",
      "kmsKey": "KMS_KEY",
      "serviceAccount": "SERVICE_ACCOUNT"
    }
  },
  "labels": {
    "LABEL": "LABEL_VALUE"
  },
  "runtimeConfig": {
    "version": "1.2",
    "properties": {
      "PROPERTY": "PROPERTY_VALUE"
    }
  },
  "sparkBatch": {
    "mainClass": "com.google.cloud.dataproc.templates.main.DataProcTemplate",
    "args": [
      "--template=GCSTOJDBC",
      "--templateProperty","project.id=PROJECT_ID",
      "--templateProperty","log.level=LOG_LEVEL",
      "--templateProperty","gcs.jdbc.input.location=CLOUD_STORAGE_PATH",
      "--templateProperty","gcs.jdbc.input.format=FORMAT",
      "--templateProperty","gcs.jdbc.output.saveMode=MODE",
      "--templateProperty","gcs.jdbc.output.url=JDBC_CONNECTION_URL",
      "--templateProperty","gcs.jdbc.output.table=JDBC_TABLE",
      "--templateProperty","gcs.jdbc.output.driver=DRIVER",
      "--templateProperty","gcs.jdbc.spark.partitions=NUM_PARTITIONS",
      "--templateProperty","gcs.jdbc.output.batchInsertSize=BATCH_SIZE"
    ],
    "jarFileUris": [
      "gs://dataproc-templates-binaries/TEMPLATE_VERSION/java/dataproc-templates.jar", "JDBC_CONNECTOR_CLOUD_STORAGE_PATH"
    ]
  }
}

Para enviar tu solicitud, despliega una de estas opciones:

Deberías recibir una respuesta JSON similar a la siguiente:


{
  "name": "projects/PROJECT_ID/regions/REGION/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.dataproc.v1.BatchOperationMetadata",
    "batch": "projects/PROJECT_ID/locations/REGION/batches/BATCH_ID",
    "batchUuid": "de8af8d4-3599-4a7c-915c-798201ed1583",
    "createTime": "2023-02-24T03:31:03.440329Z",
    "operationType": "BATCH",
    "description": "Batch"
  }
}