Antes de comenzar
Si aún no lo hiciste, configura un proyecto de Google Cloud y dos (2) buckets de Cloud Storage.
Configura tu proyecto
- Accede a tu cuenta de Google Cloud. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
-
En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.
-
Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.
-
Habilita las API de Dataproc, Compute Engine, Cloud Storage, and Cloud Functions .
- Instala Google Cloud CLI.
-
Para inicializar la CLI de gcloud, ejecuta el siguiente comando:
gcloud init
-
En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.
-
Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.
-
Habilita las API de Dataproc, Compute Engine, Cloud Storage, and Cloud Functions .
- Instala Google Cloud CLI.
-
Para inicializar la CLI de gcloud, ejecuta el siguiente comando:
gcloud init
Crea o usa dos buckets (2) de Cloud Storage en tu proyecto.
Necesitarás dos buckets de Cloud Storage en tu proyecto: uno para los archivos de entrada y otro para los resultados.
- En la consola de Google Cloud, ve a la página Buckets de Cloud Storage.
- Haga clic en Crear bucket.
- En la página Crear un bucket, ingresa la información de tu bucket. Para ir al paso siguiente, haz clic en Continuar.
- En Nombre de tu bucket, ingresa un nombre que cumpla con los requisitos de nomenclatura de buckets.
-
En Elige dónde almacenar tus datos, haz lo siguiente:
- Selecciona una opción de Tipo de ubicación.
- Selecciona una opción de Ubicación.
- Para Elegir una clase de almacenamiento predeterminada para tus datos, selecciona una clase de almacenamiento.
- En Elige cómo controlar el acceso a los objetos, selecciona una opción de Control de acceso.
- Para la Configuración avanzada (opcional), especifica un método de encriptación, una política de retención o etiquetas de bucket.
- Haga clic en Crear.
Crea una plantilla de flujo de trabajo
Copia y ejecuta los comandos que se indican a continuación en una ventana de la terminal local o en Cloud Shell para crear y definir una plantilla de flujo de trabajo.
Notas:
- Los comandos especifican la región “us-central1”. Puedes especificar una región diferente o borrar la marca
--region
si ejecutastegcloud config set compute/region
para establecer la propiedad de la región. - La secuencia "-- " (guion guion espacio) pasa argumentos al archivo jar.
El comando
wordcount input_bucket output_dir
ejecutará la aplicación de conteo de palabras del archivo jar en los archivos de texto contenidos en elinput_bucket
de Cloud Storage y, luego, enviará los archivos de conteo de palabras a unoutput_bucket
. Parametriza el argumento del bucket de entrada de conteo de palabras para permitir que la función proporcione este argumento.
- Crea la plantilla de flujo de trabajo.
gcloud dataproc workflow-templates create wordcount-template \ --region=us-central1
- Agrega el trabajo de conteo de palabras a la plantilla de flujo de trabajo.
-
Especifica tu output-bucket-name antes de ejecutar el comando (tu función proporcionará el bucket de entrada).
Después de insertar el nombre de bucket de salida, este debe leerse de la siguiente manera:
gs://your-output-bucket/wordcount-output"
. - El ID del paso “count” es obligatorio y, además, identifica el trabajo de Hadoop agregado.
gcloud dataproc workflow-templates add-job hadoop \ --workflow-template=wordcount-template \ --step-id=count \ --jar=file:///usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar \ --region=us-central1 \ -- wordcount gs://input-bucket gs://output-bucket-name/wordcount-output
-
Especifica tu output-bucket-name antes de ejecutar el comando (tu función proporcionará el bucket de entrada).
Después de insertar el nombre de bucket de salida, este debe leerse de la siguiente manera:
- Usa un clúster administrado y de un solo nodo para ejecutar el flujo de trabajo. Dataproc creará el clúster, ejecutará el flujo de trabajo en él y, luego, borrará el clúster cuando este se complete.
gcloud dataproc workflow-templates set-managed-cluster wordcount-template \ --cluster-name=wordcount \ --single-node \ --region=us-central1
- Haz clic en el nombre
wordcount-template
en la página Flujos de trabajo de Dataproc en la consola de Google Cloud para abrir la página Detalles de la plantilla de flujo de trabajo. Confirme los atributos de la plantilla de conteo de palabras.
Parametriza la plantilla de flujo de trabajo.
Parametriza la variable del bucket de entrada que se pasará a la plantilla de flujo de trabajo.
- Exportar la plantilla de flujo de trabajo a un archivo de texto
wordcount.yaml
para parametrizarlagcloud dataproc workflow-templates export wordcount-template \ --destination=wordcount.yaml \ --region=us-central1
- Con un editor de texto, abre
wordcount.yaml
y agrega un bloqueparameters
al final del archivo YAML para que el INPUT_BUCKET_URI de Cloud Storage pueda pasarse comoargs[1]
al objeto binario de recuento de palabras cuando se active el flujo de trabajo.A continuación, se muestra un ejemplo de un archivo YAML exportado. Puedes implementar uno de estos dos enfoques para actualizar tu plantilla:
- Copia y pega todo el archivo para reemplazar tu
wordcount.yaml
exportado después de reemplazar your-output_bucket por el nombre de tu bucket de salida. - Copia y pega solo la sección
parameters
al final del archivowordcount.yaml
exportado.
jobs: - hadoopJob: args: - wordcount - gs://input-bucket - gs://your-output-bucket/wordcount-output mainJarFileUri: file:///usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar stepId: count placement: managedCluster: clusterName: wordcount config: softwareConfig: properties: dataproc:dataproc.allow.zero.workers: 'true' parameters: - name: INPUT_BUCKET_URI description: wordcount input bucket URI fields: - jobs['count'].hadoopJob.args[1]
- Copia y pega todo el archivo para reemplazar tu
- Importa el archivo de texto
wordcount.yaml
con parámetros. Escribe “Y” cuando se te solicite reemplazar la plantilla.gcloud dataproc workflow-templates import wordcount-template \ --source=wordcount.yaml \ --region=us-central1
Crea una función de Cloud Functions
Abre la página Cloud Functions de Google Cloud Console y haz clic en CREAR FUNCIÓN.
En la página Crear función, ingresa o selecciona la siguiente información:
- Nombre: Recuento de palabras.
- Memoria asignada: Mantén la selección predeterminada.
- Activador:
- Cloud Storage
- Tipo de evento: Finalizar/Crear.
- Bucket: Selecciona tu bucket de entrada (consulta Crea un bucket de Cloud Storage en tu proyecto). Cuando se agrega un archivo a este bucket, la función activará el flujo de trabajo. El flujo de trabajo ejecutará la aplicación de recuento de palabras, que procesará todos los archivos de texto en el bucket.
Código de origen:
- Editor directo
- Entorno de ejecución: Node.js 8
- Pestaña
INDEX.JS
: Reemplaza el fragmento de código predeterminado por el siguiente código y, luego, edita la líneaconst projectId
para proporcionar -your-project-id- (sin un "-" al principio ni al final).
const dataproc = require('@google-cloud/dataproc').v1; exports.startWorkflow = (data) => { const projectId = '-your-project-id-' const region = 'us-central1' const workflowTemplate = 'wordcount-template' const client = new dataproc.WorkflowTemplateServiceClient({ apiEndpoint: `${region}-dataproc.googleapis.com`, }); const file = data; console.log("Event: ", file); const inputBucketUri = `gs://${file.bucket}/${file.name}`; const request = { name: client.projectRegionWorkflowTemplatePath(projectId, region, workflowTemplate), parameters: {"INPUT_BUCKET_URI": inputBucketUri} }; client.instantiateWorkflowTemplate(request) .then(responses => { console.log("Launched Dataproc Workflow:", responses[1]); }) .catch(err => { console.error(err); }); };
- Pestaña
PACKAGE.JSON
: Reemplaza el fragmento de código predeterminado por el siguiente código.
{ "name": "dataproc-workflow", "version": "1.0.0", "dependencies":{ "@google-cloud/dataproc": ">=1.0.0"} }
- Función que se ejecutará: Insert: "startWorkflow".
Haga clic en CREAR.
Prueba la función
Copia el archivo público
rose.txt
en tu bucket para activar la función. Inserta your-input-bucket-name (el bucket que se usa para activar la función) en el comando.gsutil cp gs://pub/shakespeare/rose.txt gs://your-input-bucket-name
Espera 30 segundos y, luego, ejecuta el siguiente comando para verificar que la función se haya completado correctamente.
gcloud functions logs read wordcount
... Function execution took 1348 ms, finished with status: 'ok'
Para ver los registros de funciones desde la página de la lista Funciones en Google Cloud Console, haz clic en el nombre de la función
wordcount
y, luego, en VER REGISTROS en la página Detalles de la función.Puedes ver la carpeta
wordcount-output
en el bucket de salida desde la página Navegador de Storage en la consola de Google Cloud.Una vez que se complete el flujo de trabajo, los detalles del trabajo se conservan en la consola de Google Cloud. Haz clic en el trabajo
count...
que aparece en la página Trabajos de Dataproc para ver los detalles del trabajo de flujo de trabajo.
Realice una limpieza
El flujo de trabajo de este instructivo borra su clúster administrado cuando se completa. Para evitar costos recurrentes, puedes borrar otros recursos asociados con este instructivo.
Borra un proyecto
- En la consola de Google Cloud, ve a la página Administrar recursos.
- En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
- En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.
Borra depósitos de Cloud Storage
- En la consola de Google Cloud, ve a la página Navegador de Cloud Storage.
- Haz clic en la casilla de verificación del bucket que deseas borrar.
- Para borrar el bucket, haz clic en Borrar y sigue las instrucciones.
Borra la plantilla de flujo de trabajo
gcloud dataproc workflow-templates delete wordcount-template \ --region=us-central1
Borra tu función de Cloud Functions
Abre la página Cloud Functions de la consola de Google Cloud, selecciona la casilla a la izquierda de la función wordcount
y haz clic en BORRAR.
¿Qué sigue?
- Consulta Descripción general de las plantillas de flujos de trabajo de Dataproc
- Consulta Soluciones de programación del flujo de trabajo