En este documento, se describe cómo instalar y usar la extensión de JupyterLab en una máquina o una VM autoadministrada que tenga acceso a los servicios de Google. También se describe cómo desarrollar e implementar código de notebooks de Spark sin servidores.
Instala la extensión en cuestión de minutos para aprovechar las siguientes funciones:
- Inicia notebooks de Spark y BigQuery sin servidores para desarrollar código rápidamente
- Explora y obtén una vista previa de los conjuntos de datos de BigQuery en JupyterLab
- Edita archivos de Cloud Storage en JupyterLab
- Cómo programar un notebook en Composer
Antes de comenzar
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that you have the permissions required to complete this guide.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Dataproc API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Instala Google Cloud CLI.
-
Si usas un proveedor de identidad externo (IdP), primero debes acceder a la gcloud CLI con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that you have the permissions required to complete this guide.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Dataproc API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Instala Google Cloud CLI.
-
Si usas un proveedor de identidad externo (IdP), primero debes acceder a la gcloud CLI con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init
Roles obligatorios
Se requieren ciertos roles de IAM para ejecutar los ejemplos de esta página. Según las políticas de la organización, es posible que estos roles ya se hayan otorgado. Para verificar las asignaciones de roles, consulta ¿Necesitas otorgar roles?.
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
Funciones de usuario
Para obtener los permisos que necesitas para crear una sesión de notebook interactiva, pídele a tu administrador que te otorgue los siguientes roles de IAM:
- Editor de Dataproc (
roles/dataproc.editor) en el proyecto - Usuario de cuenta de servicio (
roles/iam.serviceAccountUser) en la cuenta de servicio predeterminada de Compute Engine
Función de cuenta de servicio
Para asegurarte de que la cuenta de servicio predeterminada de Compute Engine tenga los permisos necesarios para crear una sesión interactiva, pídele a tu administrador que le otorgue el rol de IAM de trabajador de Dataproc (roles/dataproc.worker) a la cuenta de servicio predeterminada de Compute Engine en el proyecto.
Instala la extensión de JupyterLab
Puedes instalar y usar la extensión de JupyterLab en una máquina o VM que tenga acceso a los servicios de Google, como tu máquina local o una instancia de VM de Compute Engine.
Para instalar la extensión, sigue estos pasos:
Descarga e instala Python 3.11 o una versión posterior desde
python.org/downloads.- Verifica la instalación de Python 3.11 o una versión posterior.
python3 --version
- Verifica la instalación de Python 3.11 o una versión posterior.
Virtualiza el entorno de Python.
pip3 install pipenv
- Crea una carpeta de instalación.
mkdir jupyter
- Cambia a la carpeta de instalación.
cd jupyter
- Crea un entorno virtual.
pipenv shell
- Crea una carpeta de instalación.
Instala JupyterLab en el entorno virtual.
pipenv install jupyterlab
Instala la extensión de JupyterLab.
pipenv install bigquery-jupyter-plugin
jupyter lab
Se abrirá la página del Launcher de JupyterLab en tu navegador. Contiene una sección de Trabajos y sesiones de Dataproc. También puede contener las secciones Notebooks de Dataproc Serverless y Notebooks de clúster de Dataproc si tienes acceso a notebooks o clústeres de Managed Service para Apache Spark con el componente opcional de Jupyter en ejecución en tu proyecto.
De forma predeterminada, tu sesión interactiva se ejecuta en el proyecto y la región que estableciste cuando ejecutaste
gcloud initen Antes de comenzar. Puedes cambiar la configuración del proyecto y la región de tus sesiones desde Configuración > Google Cloud Configuración > Google Cloud Configuración del proyecto de JupyterLab.Debes reiniciar la extensión para que se apliquen los cambios.
Crea una plantilla de entorno de ejecución de Managed Service para Apache Spark
Las plantillas de tiempo de ejecución de Managed Service para Apache Spark (también llamadas plantillas de sesión) contienen parámetros de configuración para ejecutar código de Spark en una sesión. Puedes crear y administrar plantillas de tiempo de ejecución con JupyterLab o Google Cloud CLI.
JupyterLab
Haz clic en la tarjeta
New runtime templateen la sección Notebooks de Dataproc Serverless de la página Selector de JupyterLab.
Completa el formulario de Plantilla de entorno de ejecución.
Información de la plantilla:
- Nombre visible, ID de tiempo de ejecución y Descripción: Acepta o completa un nombre visible, un ID de tiempo de ejecución y una descripción de la plantilla.
Configuración de ejecución: Selecciona Cuenta de usuario para ejecutar notebooks con la identidad del usuario en lugar de la identidad de la cuenta de servicio de Dataproc.
- Cuenta de servicio: Si no especificas una cuenta de servicio, se usa la cuenta de servicio predeterminada de Compute Engine.
- Versión del entorno de ejecución: Confirma o selecciona la versión del entorno de ejecución
2.3. - Imagen de contenedor personalizada: De manera opcional, especifica el URI de una imagen de contenedor personalizada.
- Bucket de etapa de pruebas: De manera opcional, puedes especificar el nombre de un bucket de etapa de pruebas de Cloud Storage para que lo use Managed Service para Apache Spark.
- Repositorio de paquetes de Python: De forma predeterminada, los paquetes de Python se descargan y se instalan desde la caché de transferencia de PyPI cuando los usuarios ejecutan comandos de instalación de
pipen sus notebooks. Puedes especificar el repositorio de artefactos privados de tu organización para que los paquetes de Python se usen como el repositorio predeterminado de paquetes de Python.
Encriptación: Acepta el valor predeterminado Google-owned and Google-managed encryption key o selecciona Clave de encriptación administrada por el cliente (CMEK). Si es CMEK, selecciona o proporciona la información de la clave.
Configuración de red: Selecciona una subred en el proyecto o compartida desde un proyecto host (puedes cambiar el proyecto desde Configuración > Google Cloud Configuración > Google Cloud Configuración del proyecto de JupyterLab). Puedes especificar etiquetas de red para aplicar a la red especificada. Ten en cuenta que Managed Service para Apache Spark habilita el Acceso privado a Google (PGA) en la subred especificada. Para conocer los requisitos de conectividad de red, consulta Configuración de red de Managed Service para Apache Spark.
Configuración de la sesión: De manera opcional, puedes completar estos campos para limitar la duración de las sesiones creadas con la plantilla.
- Tiempo máx. de inactividad: Es el tiempo máximo de inactividad antes de que finalice la sesión. El rango permitido es de 10 minutos a 336 horas (14 días).
- Tiempo máximo de sesión: Es la vida útil máxima de una sesión antes de que finalice. El rango permitido es de 10 minutos a 336 horas (14 días).
Metastore: Para usar un servicio de Dataproc Metastore con tus sesiones, selecciona el ID del proyecto y el servicio de metastore.
Servidor de historial persistente: Puedes seleccionar un servidor de historial de Spark persistente disponible para acceder a los registros de sesiones durante y después de las sesiones.
Propiedades de Spark: Puedes seleccionar y, luego, agregar propiedades de Spark de Resource Allocation, Autoscaling o GPU. Haz clic en Agregar propiedad para agregar otras propiedades de Spark. Para obtener más información, consulta Propiedades de Spark.
Etiquetas: Haz clic en Agregar etiqueta para cada etiqueta que quieras establecer en las sesiones creadas con la plantilla.
Haz clic en Guardar para crear la plantilla.
Permite ver o borrar una plantilla de entorno de ejecución.
- Haz clic en Configuración > Google Cloud Configuración.
En la sección Dataproc Settings > Serverless Runtime Templates, se muestra la lista de plantillas de entorno de ejecución.
- Haz clic en el nombre de una plantilla para ver sus detalles.
- Puedes borrar una plantilla desde el menú Acción de la plantilla.
Abre y vuelve a cargar la página del Launcher de JupyterLab para ver la tarjeta de la plantilla de notebook guardada en la página del Launcher de JupyterLab.
gcloud
Crea un archivo YAML con la configuración de tu plantilla de entorno de ejecución.
YAML simple
environmentConfig: executionConfig: networkUri: default jupyterSession: kernel: PYTHON displayName: Team A labels: purpose: testing description: Team A Development Environment
YAML complejo
description: Example session template environmentConfig: executionConfig: serviceAccount: sa1 # Choose either networkUri or subnetworkUri networkUri: subnetworkUri: default networkTags: - tag1 kmsKey: key1 idleTtl: 3600s ttl: 14400s stagingBucket: staging-bucket peripheralsConfig: metastoreService: projects/my-project-id/locations/us-central1/services/my-metastore-id sparkHistoryServerConfig: dataprocCluster: projects/my-project-id/regions/us-central1/clusters/my-cluster-id jupyterSession: kernel: PYTHON displayName: Team A labels: purpose: testing runtimeConfig: version: "2.3" containerImage: gcr.io/my-project-id/my-image:1.0.1 properties: "p1": "v1" description: Team A Development Environment
Ejecuta el siguiente comando gcloud beta dataproc session-templates import de forma local o en Cloud Shell para crear una plantilla de sesión (tiempo de ejecución) a partir de tu archivo YAML:
gcloud beta dataproc session-templates import TEMPLATE_ID \ --source=YAML_FILE \ --project=PROJECT_ID \ --location=REGION
- Consulta gcloud beta dataproc session-templates para ver los comandos que describen, enumeran, exportan y borran plantillas de sesión.
Inicia y administra notebooks
Después de instalar la extensión de JupyterLab de Managed Service para Apache Spark, puedes hacer clic en las tarjetas de plantillas de la página Launcher de JupyterLab para realizar las siguientes acciones:
Inicia un notebook de Jupyter
En la sección Notebooks de Serverless Dataproc de la página Launcher de JupyterLab, se muestran tarjetas de plantillas de notebooks que se asignan a plantillas de entorno de ejecución de Managed Service para Apache Spark (consulta Crea una plantilla de entorno de ejecución de Managed Service para Apache Spark).
Haz clic en una tarjeta para crear una sesión de Managed Service para Apache Spark y, luego, inicia un notebook. Cuando se termina de crear la sesión y el kernel del notebook está listo para usarse, el estado del kernel cambia de
StartingaIdle (Ready).Escribir y probar el código del notebook
Copia y pega el siguiente código de PySpark
Pi estimationen la celda del notebook de PySpark y, luego, presiona Mayúsculas + Intro para ejecutar el código.import random def inside(p): x, y = random.random(), random.random() return x*x + y*y < 1 count = sc.parallelize(range(0, 10000)) .filter(inside).count() print("Pi is roughly %f" % (4.0 * count / 10000))
Resultado del notebook:
Después de crear y usar un notebook, puedes terminar la sesión haciendo clic en Shut Down Kernel en la pestaña Kernel.
- Para reutilizar la sesión, crea un notebook nuevo. Para ello, elige Notebook en el menú File>>New. Después de crear el notebook nuevo, elige la sesión existente en el diálogo de selección del kernel. El notebook nuevo reutilizará la sesión y conservará el contexto de la sesión del notebook anterior.
Si no terminas la sesión, Managed Service para Apache Spark lo hará cuando se agote el tiempo de inactividad de la sesión configurado en el temporizador. Puedes configurar el tiempo de inactividad de la sesión en la configuración de la plantilla del entorno de ejecución. El valor predeterminado es de una hora.
Inicia un notebook en un clúster
Si creaste un clúster de Jupyter de Managed Service para Apache Spark, la página Launcher de JupyterLab contiene una sección Dataproc Cluster Notebook con tarjetas de kernel preinstaladas.
Para iniciar un notebook de Jupyter en tu clúster de Managed Service para Apache Spark en Compute Engine, haz lo siguiente:
Haz clic en una tarjeta de la sección Notebook del clúster de Dataproc.
Cuando el estado del kernel cambia de
StartingaIdle (Ready), puedes comenzar a escribir y ejecutar código de notebook.Después de crear y usar un notebook, puedes terminar la sesión haciendo clic en Shut Down Kernel en la pestaña Kernel.
Administra archivos de entrada y salida en Cloud Storage
El análisis de datos exploratorios y la creación de modelos de AA suelen implicar entradas y salidas basadas en archivos. Managed Service para Apache Spark accede a estos archivos en Cloud Storage.
Para acceder al navegador de Cloud Storage, haz clic en el ícono del navegador de Cloud Storage en la barra lateral de la página Launcher de JupyterLab y, luego, haz doble clic en una carpeta para ver su contenido.
Puedes hacer clic en los tipos de archivos compatibles con Jupyter para abrirlos y editarlos. Cuando guardas los cambios en los archivos, estos se escriben en Cloud Storage.
Para crear una carpeta nueva de Cloud Storage, haz clic en el ícono de carpeta nueva y, luego, ingresa el nombre de la carpeta.
Para subir archivos a un bucket o una carpeta de Cloud Storage, haz clic en el ícono de carga y, luego, selecciona los archivos que deseas subir.
Desarrolla código de notebook de Spark
Después de instalar la extensión de JupyterLab, puedes iniciar notebooks de Jupyter desde la página del Selector de JupyterLab para desarrollar código de la aplicación.
Desarrollo de código de PySpark y Python
Los clústeres de Managed Service para Apache Spark admiten kernels de PySpark y Python.
Haz clic en una tarjeta de PySpark en la sección Notebooks de Dataproc Serverless o Notebook de clúster de Dataproc de la página Launcher de JupyterLab para abrir un notebook de PySpark.
Haz clic en una tarjeta del kernel de Python en la sección Notebook del clúster de Dataproc de la página del iniciador de JupyterLab para abrir un notebook de Python.
Desarrollo de código SQL
Para abrir un notebook de PySpark y escribir y ejecutar código SQL, en la página del Selector de JupyterLab, en la sección Notebooks de Dataproc Serverless o Notebook de clúster de Dataproc, haz clic en la tarjeta del kernel de PySpark.
Función mágica de Spark SQL: Dado que el kernel de PySpark que inicia los notebooks sin servidores de Dataproc se carga previamente con la función mágica de Spark SQL, en lugar de usar spark.sql('SQL STATEMENT').show() para encerrar tu instrucción de SQL, puedes escribir %%sparksql magic en la parte superior de una celda y, luego, escribir tu instrucción de SQL en la celda.
SQL de BigQuery: El conector de BigQuery Spark permite que el código de tu notebook cargue datos de tablas de BigQuery, realice análisis en Spark y, luego, escriba los resultados en una tabla de BigQuery.
Los tiempos de ejecución de Managed Service para Apache Spark 2.2 y versiones posteriores incluyen el conector de BigQuery para Spark. Si usas un tiempo de ejecución anterior para iniciar notebooks de Managed Service para Apache Spark, puedes instalar el conector de BigQuery para Spark agregando la siguiente propiedad de Spark a tu plantilla de tiempo de ejecución de Managed Service para Apache Spark:
spark.jars: gs://spark-lib/bigquery/spark-bigquery-with-dependencies_2.12-0.25.2.jar
Desarrollo de código en Scala
Los clústeres de Managed Service para Apache Spark creados con versiones de imagen 2.0 y posteriores incluyen Apache Toree, un kernel de Scala para la plataforma de Jupyter Notebook que proporciona acceso interactivo a Spark.
Haz clic en la tarjeta de Apache Toree en la sección Notebook del clúster de Dataproc de la página Launcher de JupyterLab para abrir un notebook para el desarrollo de código en Scala.
Figura 1. Tarjeta del kernel de Apache Toree en la página de inicio de JupyterLab.
Desarrolla código con la extensión de Visual Studio Code
Puedes usar la extensión de Google Cloud Visual Studio Code (VS Code) para hacer lo siguiente:
- Desarrolla y ejecuta código de Spark en notebooks de Managed Service para Apache Spark.
- Crea y administra plantillas de entorno de ejecución (sesión) de Managed Service para Apache Spark, sesiones interactivas y cargas de trabajo por lotes.
La extensión de Visual Studio Code es gratuita, pero se te cobrará por los servicios deGoogle Cloud , incluidos Managed Service para Apache Spark, Managed Service para Apache Spark y los recursos de Cloud Storage que uses.
Usa VS Code con BigQuery: También puedes usar VS Code con BigQuery para hacer lo siguiente:
- Desarrollar y ejecutar notebooks de BigQuery
- Explorar, inspeccionar y obtener una vista previa de los conjuntos de datos de BigQuery
Antes de comenzar
- Descarga e instala VS Code.
- Abre VS Code y, luego, en la barra de actividades, haz clic en Extensiones.
En la barra de búsqueda, busca la extensión Jupyter y, luego, haz clic en Instalar. La extensión de Jupyter de Microsoft es una dependencia obligatoria.
Instala la extensión de Google Cloud
- Abre VS Code y, luego, en la barra de actividades, haz clic en Extensiones.
En la barra de búsqueda, busca la extensión Google Cloud Code y, luego, haz clic en Install.
Si se te solicita, reinicia VS Code.
El ícono de Google Cloud Code ahora está visible en la barra de actividades de VS Code.
Configura la extensión
- Abre VS Code y, luego, en la barra de actividades, haz clic en Google Cloud Code.
- Abre la sección Dataproc.
- Haz clic en Acceder a Google Cloud. Se te redireccionará para que accedas con tus credenciales.
- Usa la barra de tareas de nivel superior de la aplicación para navegar a Código > Configuración > Configuración > Extensiones.
- Busca Google Cloud Código y haz clic en el ícono Administrar para abrir el menú.
- Selecciona Configuración.
- En los campos Proyecto y Región de Managed Service para Apache Spark, ingresa el nombre del proyecto Google Cloud y la región que se usarán para desarrollar notebooks y administrar recursos de Managed Service para Apache Spark.
Desarrolla notebooks
- Abre VS Code y, luego, en la barra de actividades, haz clic en Google Cloud Code.
- Abre la sección Notebooks y, luego, haz clic en New Serverless Spark Notebook.
- Selecciona o crea una plantilla de entorno de ejecución (sesión) nueva para usarla en la sesión del notebook.
Se crea un nuevo archivo
.ipynbque contiene código de muestra y se abre en el editor.
Ahora puedes escribir y ejecutar código en tu notebook de Managed Service para Apache Spark.
Crea y administra recursos
- Abre VS Code y, luego, en la barra de actividades, haz clic en Google Cloud Code.
Abre la sección Dataproc y, luego, haz clic en los siguientes nombres de recursos:
- Clústeres: Crea y administra clústeres y trabajos.
- Serverless: Crea y administra cargas de trabajo por lotes y sesiones interactivas.
- Plantillas de entorno de ejecución de Spark: Crea y administra plantillas de sesión.
Explorador de conjuntos de datos
Usa el Explorador de conjuntos de datos de JupyterLab para ver los conjuntos de datos de BigLake Metastore.
Para abrir el Explorador de conjuntos de datos de JupyterLab, haz clic en su ícono en la barra lateral.
Puedes buscar una base de datos, una tabla o una columna en el Explorador de conjuntos de datos. Haz clic en el nombre de una base de datos, una tabla o una columna para ver los metadatos asociados.
Implementa tu código
Después de instalar la extensión de JupyterLab, puedes usar JupyterLab para realizar las siguientes acciones:
Ejecuta el código de tu notebook en la infraestructura de Managed Service para Apache Spark
Programa la ejecución de notebooks en Managed Service para Apache Airflow
Envía trabajos por lotes a la infraestructura de Managed Service para Apache Spark o a tu clúster de Managed Service para Apache Spark.
Programa la ejecución de notebooks en Managed Airflow
Completa los siguientes pasos para programar el código de tu notebook en Managed Airflow para que se ejecute como un trabajo por lotes en Managed Service para Apache Spark o en un clúster de Managed Service para Apache Spark.
Haz clic en el botón Job Scheduler en la parte superior derecha del notebook.
Completa el formulario Create A Scheduled Job para proporcionar la siguiente información:
- Nombre único del trabajo de ejecución del notebook
- Es el entorno de Managed Airflow que se usará para implementar el notebook.
- Parámetros de entrada si el notebook está parametrizado
- Plantilla de clúster de Managed Service para Apache Spark o de entorno de ejecución sin servidores que se usará para ejecutar el notebook
- Si se selecciona un clúster, indica si se debe detener el clúster después de que el notebook termine de ejecutarse en él.
- Recuento de reintentos y retraso de reintentos en minutos si falla la ejecución del notebook en el primer intento
- Notificaciones de ejecución que se enviarán y la lista de destinatarios. Las notificaciones se envían con una configuración de SMTP de Airflow.
- Es el programa de ejecución del notebook.
Haz clic en Crear.
Una vez que se programa el notebook correctamente, el nombre del trabajo aparece en la lista de trabajos programados en el entorno de Managed Airflow.
Envía un trabajo por lotes a Managed Service para Apache Spark
Haz clic en la tarjeta Serverless en la sección Trabajos y sesiones de Dataproc de la página Launcher de JupyterLab.
Haz clic en la pestaña Lote, luego en Crear lote y completa los campos de Información del lote.
Haz clic en Enviar para enviar el trabajo.
Envía un trabajo por lotes a un clúster de Managed Service para Apache Spark
Haz clic en la tarjeta Clústeres en la sección Trabajos y sesiones de Dataproc de la página Launcher de JupyterLab.
Haz clic en la pestaña Trabajos y, luego, en Enviar trabajo.
Selecciona un clúster y, luego, completa los campos de trabajo.
Haz clic en Enviar para enviar el trabajo.
Cómo ver y administrar recursos
Después de instalar la extensión de JupyterLab, puedes ver y administrar Managed Service para Apache Spark y Managed Service para Apache Spark desde la sección Trabajos y sesiones de Dataproc en la página Launcher de JupyterLab.
Haz clic en la sección Trabajos y sesiones de Dataproc para mostrar las tarjetas Clústeres y Sin servidor.
Para ver y administrar las sesiones de Managed Service para Apache Spark, haz lo siguiente:
- Haz clic en la tarjeta Sin servidor.
- Haz clic en la pestaña Sesiones y, luego, en un ID de sesión para abrir la página Detalles de la sesión y ver las propiedades de la sesión, los registros Google Cloud en el Explorador de registros y finalizar una sesión. Nota: Se crea una sesión única de Managed Service para Apache Spark para iniciar cada notebook de Managed Service para Apache Spark.
Para ver y administrar lotes de Managed Service para Apache Spark, haz lo siguiente:
- Haz clic en la pestaña Lotes para ver la lista de lotes de Managed Service para Apache Spark en el proyecto y la región actuales. Haz clic en un ID de lote para ver los detalles del lote.
Para ver y administrar clústeres de Managed Service para Apache Spark, haz lo siguiente:
- Haz clic en la tarjeta Clústeres. La pestaña Clústeres está seleccionada para enumerar los clústeres activos de Managed Service para Apache Spark en el proyecto y la región actuales. Puedes hacer clic en los íconos de la columna Acciones para iniciar, detener o reiniciar un clúster. Haz clic en el nombre de un clúster para ver sus detalles. Puedes hacer clic en los íconos de la columna Acciones para clonar, detener o borrar un trabajo.
Para ver y administrar los trabajos de Managed Service para Apache Spark, haz lo siguiente:
- Haz clic en la tarjeta Trabajos para ver la lista de trabajos del proyecto actual. Haz clic en un ID de trabajo para ver los detalles.