Navegación por el sistema de archivos y transferencia de datos desde y hacia el hub#
🔍 RESUMEN
Preguntas
¿Dónde almaceno los archivos en el hub?
¿Cómo transfiero datos desde y hacia el hub?
¿Cómo autorizo a GitHub para introducir (push) y extraer (pull) código en el hub?
Objetivos
Reconocer y localizar tu directorio home en la interfaz de usuario de JupyterLab y RStudio
Distribuir conjuntos de datos de solo lectura a todos los usuarios del hub en un directorio compartido
Introducir (push) y extraer (pull) los repositorios de GitHub desde y hacia el hub con
gh-scoped-creds
Directorio home#
Un servidor del hub incluye su propio sistema de archivos privado para el usuario y no se comparte con otros usuarios del hub. Cada usuario del hub recibe el nombre de usuario jovyan
[^jovyan] y su directorio home se encuentra en
/home/jovyan
Tanto las interfaces de usuario de JupyterLab como las de RStudio abrirán automáticamente el explorador de archivos en el directorio home del usuario en la primera instancia cuando se ejecuta un servidor (consulta Figura 8 y Figura 9).
Los archivos que se guardan en el directorio home son persistentes y están disponibles en el hub cada vez que un usuario apaga e inicia un servidor.
La cuota de almacenamiento de los directorios home no está limitada y los costos de almacenamiento se cobran por gigabyte. Por lo tanto, sugerimos que este espacio se utilice para archivos y conjuntos de datos pequeños y no es adecuado para almacenar conjuntos de datos grandes.
Truco
Los Campeones y Campeonas del Hub son responsables de los costos ocasionados por el almacenamiento de los datos y de garantizar que sus comunidades entiendan los posibles gastos.
Ejercicio: ¿Qué puedes almacenar en tu directorio home?
Selecciona todos los que correspondan:
Notebooks
Código
Conjuntos de datos grandes y/o compartidos con permisos de lectura-escritura
Archivo de texto
Bases de datos pequeñas
Archivos de configuración
Conjuntos de datos de solo lectura, por ejemplo para docencia
Datos temporales, por ejemplo, resultados intermedios de un cálculo
Solución
✅ Notebooks
✅ Código
❌ Conjuntos de datos grandes y/o compartidos con permisos de lectura-escritura - Considera usar el almacenamiento de objetos en la nube u otras soluciones de almacenamiento nativo en la nube
✅ Archivo de texto
✅ Bases de datos pequeñas
✅ Archivos de configuración
❌ Conjuntos de datos de solo lectura, por ejemplo, para docencia - Considera colocar estos archivos en el directorio
~/shared
❌ Datos temporales, por ejemplo, resultados intermedios obtenidos a partir de un cálculo - Considera usar el directorio
/tmp
Directorio compartido#
Todos los usuarios del hub tienen acceso a un directorio shared (compartido) común desde su directorio home. Este es un directorio de solo lectura en el que los usuarios pueden acceder a archivos grandes o conjuntos de datos para su trabajo, y sus contenidos no pueden modificase ni borrarse accidentalmente.
Los Campeones y Campeonas del Hub pueden ocupar el directorio shared (compartido) colocando archivos en el directorio de shared-readwrite que aparece solo en su directorio home.
Truco
Subir datos al hub
Subir archivos al hub mediante
Haciendo clic en el botón (subir) que se encuentra en la parte superior del explorador de archivos.
Haciendo clic en el botón (subir) que se encuentra en la parte superior del explorador de archivos.
Descargar datos del hub
Descargar archivos del hub mediante
Haciendo clic derecho en el archivo/carpeta deseado y en el botón (descargar).
Marcando la casilla que se encuentra junto al archivo/carpeta deseado, haciendo clic en el botón (ajustes), eligiendo la opción Export… (Exportar…) y confirmando el nombre del archivo en el cuadro de diálogo siguiente.
El directorio /tmp#
El directorio /tmp
se utiliza para almacenar temporalmente archivos de corta duración. Cualquier archivo que se coloque en este directorio tendrá la duración de tu sesión y se eliminará después de que cierres la sesión.
Este directorio es una unidad SSD con acceso rápido de lectura y escritura de hasta 50 - 100 GB de espacio en disco. El caso de uso ideal para /tmp
es procesar grandes conjuntos de datos que no necesitan almacenarse permanentemente.
Almacenamiento de objetos en la nube#
Tu hub se encuentra en la nube, así que otra forma de almacenar datos es utilizando el almacenamiento de objetos como Amazon S3 o Google Cloud Storage. Este tipo de almacenamiento es ideal para conjuntos de datos grandes y persistentes que, de otra manera, sería costoso almacenar en un sistema de archivos tradicional (por ejemplo, tu hogar, carpeta compartida /tmp
) a largo plazo.
Este es un tema avanzado que va más allá del alcance del currículum actual de los Campeones y Campeonas del Hub. Puedes encontrar más información en la Guía de servicios del hub de 2i2c.
Ejercicio: Requisitos de datos
Piensa en los datos que tú o tu comunidad necesitan para trabajar.
¿Qué tipo de datos son? Por ejemplo, datos tabulares (.csv, .xls), imágenes (.png, .jpg, .bmp), otros formatos de datos científicos (.h5, .nc, .fastq)
¿Qué tamaño tiene un conjunto de datos típico?
¿Dónde se almacenan los datos?
¿Un grupo de colaboradores utiliza el mismo conjunto de datos?
Escribe tus ideas en nuestro documento de notas colaborativo compartido.
Compartir y administrar código con GitHub#
GitHub es una plataforma de alojamiento popular para crear, almacenar, administrar y compartir código con colaboradores. El código desarrollado en un hub puede sincronizarse con un repositorio remoto en GitHub y los cambios se rastrean en un proceso conocido como control de versiones. Esto permite a los usuarios comparar e incluso restaurar diferentes versiones del código y facilita el trabajo colaborativo en diferentes máquinas. Git es una herramienta para el control de versiones que permite la sincronización de código con GitHub. En un hub, el control de versiones del código es posible utilizando extensiones Git en la interfaz de usuario. Obtén más información sobre cómo usarlos:
Cuando un usuario extrae (pull) e introduce (push) código a un repositorio remoto en GitHub, se le pedirá que proporcione sus credenciales de GitHub.
Advertencia
No recomendamos que introduzcas tus credenciales de GitHub (contraseña de GitHub, tokens de acceso personal o de cualquier otro tipo) en ningún tipo de infraestructura compartida (por ejemplo, nube privada y pública, HPC, cualquier máquina remota), ya que esta información estará en riesgo.
Para JupyterLab, aconsejamos encarecidamente usar gh-scoped-creds
para la autenticación en nuestros hubs.
Uso de gh-scoped-creds
#
La autorización para la introducción (push) y extracción (pull) en GitHub se maneja con gh-scoped-creds
.
Abre una terminal.
Ejecuta el comando
gh-scoped-creds
.
Se mostrará el siguiente prompt
jovyan@jupyter-username:~/my-repo$ gh-scoped-creds You have 15 minutes to go to https://github.com/login/device and enter the code: XXXX-XXXX Waiting....
Copia el código desde el prompt y pégalo en login/device tal como se indica.
Autoriza al hub para acceder a GitHub haciendo clic en el botón verde que tiene la etiqueta Authorize (Autorizar)
. Ahora deberías ser capaz de extraer (pull) e introducir (push) a GitHub desde el hub sin introducir tus credenciales.
La autorización expirará automáticamente después de 8 horas (o cuando tu servidor JupyterHub se detenga), y tendrás que repetir estos pasos para renovarla.
Consejo
Si recibes un error que dice Permission denied
(Permiso denegado) después de seguir estos pasos, entonces gh-scoped-creds
no fue habilitado para tu hub. Los Campeones y Campeonas del Hub deben consultar los pasos en Habilitación de cred-gh para tu hub.
Habilitación de gh-scoped-creds
para tu hub#
Si esta opción no está ya habilitada para tu hub, entonces se deben seguir algunos pasos adicionales para que los Campeones y Campeonas del Hub habiliten gh-scoped-creds
(requiere permisos del propietario de la organización de GitHub).
Revisa que
gh-scoped-creds
ya no esté habilitado para tu Hub abriendo una Terminal y ejecutandojovyan@jupyter-username:~$ echo $GH_SCOPED_CREDS_CLIENT_ID
Si esta acción no devuelve ningún resultado, ve al siguiente paso.
Si esta acción devuelve un ID de cliente de la forma
Iv1.xxxxxxxxxxxxxxxx
, entonces ve al Paso 3.
Envía un ticket al Soporte de 2i2c y registra una solicitud de funciones para
gh-scoped-creds
. 2i2c creará una aplicación GitHub, proporcionará una URL pública de la aplicación de GitHub y actualizará la configuración del hub para que las variables del entornoGH_SCOPED_CREDS_CLIENT_ID
yGH_SCOPED_CREDS_APP_URL
estén disponibles en tu hub.Revisa que la aplicación GitHub esté instalada en tu cuenta personal de GitHub Organization/GitHub que tenga los repositorios a los que te gustaría acceder.
GitHub Organization: Navega a la GitHub Organization que utilizas para administrar el acceso a tu hub. En esta lección utilizamos la 2i2c-community-showcase GitHub Organization para administrar el acceso al Hub de muestra comunitario.
Cuenta personal de GitHub: Navega a tu repositorio personal de GitHub al que te gustaría acceder en el hub.
Haz clic en Settings (Configuración) > GitHub Apps (Aplicaciones de GitHub).
En Installed GitHub Apps (Aplicaciones instaladas del GitHub), revisa si la URL de la aplicación de GitHub proporcionada por 2i2c coincide con alguna aplicación de la lista. En la siguiente captura de pantalla, el ejemplo de la aplicación de GitHub se llama 2i2c Community Showcase Hub GitHub.Hub de muestra comunitario de 2i2c.
Si la aplicación de GitHub no está instalada, sigue el próximo paso.
Si la aplicación de GitHub está instalada, ve al paso 5.
Instala la aplicación GitHub en tu GitHub Organization (requiere permisos del propietario de la GitHub Organization) o en tu cuenta personal de GitHub.
Navega a la URL de la aplicación de GitHub proporcionada por 2i2c.
Haz clic en el botón gris Configure (Configuración) para instalar la aplicación GitHub.
Selecciona la cuenta personal de GitHub o la de GitHub Organization para la que quieres activar
gh-scoped-creds
.Elige si habilitarás
gh-scoped-creds
para todos los repositorios o solo para repositorios específicos y revisa que la opciónRead and write access to code
(Acceso de lectura y escritura al código) esté habilitada.Haz clic en el botón verde que tiene la etiqueta Install (Instalar).
Revisa que el paquete
gh-scoped-creds
esté instalado en tu imagen en el hub.Inicia un servidor con la imagen que deseas.
Abre una terminal.
Ejecuta el comando
gh-scoped-creds
.Continúa con Usando gh-scoped-creds normalmente.
Si ves
bash: gh-scoped-creds: command not found
, entonces gh-scoped-creds no está instalado en la imagen que seleccionaste para tu servidor. Consulta la Guía de servicio del Hub - Personalizar una imagen de flujo ascendente mantenida por la comunidad para agregar paquetes a una imagen original mantenida por la comunidad.
Ejercicio: Insertar (push) código de GitHub
Al usar la extensión Git JupyterLab para enviar (push) código a un repositorio remoto en GitHub se abre el siguiente cuadro:
¿Qué debes hacer?
Introducir tu nombre de usuario de GitHub y el token de acceso personal tal como se solicita y después hacer clic en Save my login temporarily (Guardar mi acceso temporalmente)
Hacer clic en Cancel (Cancelar), abrir una Terminal, introducir el comando
gh-scoped-creds
y seguir el prompt
Solución
La respuesta correcta es 2 - Nunca introduzcas tus credenciales de GitHub (contraseña de GitHub, tokens de acceso personal o de cualquier otro tipo) en ninguna infraestructura compartida (por ejemplo, nube privada y pública, HPC, cualquier máquina remota) ya que esta información estará en riesgo.
🔑 PUNTOS CLAVE
Los usuarios pueden almacenar pequeños archivos y conjuntos de datos en su directorio principal, los cuales persistirán entre sesiones.
Los Campeones y Campeonas del Hub pueden distribuir los datos mediante el directorio shared (compartido).
Los datos temporales para archivos intermedios pueden almacenarse en el directorio
/tmp
.El almacenamiento de objetos en la nube se puede utilizar para almacenar conjuntos de datos grandes.
Utiliza
gh-scoped-creds
para insertar (push) y extraer (pull) código a GitHub.
Atención
Por favor, prepárate para la Parte 2 del taller completando el Ejercicio 1 del próximo episodio antes de la sesión sincrónica.