Vous pouvez utiliser des jeux de données dans des nœuds (Shell, Python et Notebook) pour lire et écrire des données depuis et vers Object Storage Service (OSS) ou Apsara File Storage NAS (NAS) lors du développement de données. Vous pouvez également monter un jeu de données en tant que stockage lors de la création d'une instance d'environnement de développement personnel.
Nous vous recommandons de consulter la rubrique Gestion des jeux de données pour savoir comment créer un jeu de données.
Présentation
Les jeux de données permettent de lire et d'écrire directement des données stockées dans OSS et NAS depuis DataWorks. Vous pouvez créer plusieurs versions d'un jeu de données, suivre les modifications au fil du temps et revenir à une version antérieure si nécessaire.
Limites
Les jeux de données sont pris en charge uniquement dans la nouvelle version de DataStudio.
Groupe de ressources : L'accès aux jeux de données depuis les nœuds de développement de données est possible uniquement via un groupe de ressources Serverless.
Objets pris en charge : Les jeux de données sont pris en charge uniquement dans les nœuds Shell, les nœuds Python, les Notebooks pour le développement de base et les environnements de développement personnels. Vous pouvez monter un maximum de 5 jeux de données sur chaque objet.
Type de stockage : Les jeux de données prennent en charge Object Storage Service (OSS) et Apsara File Storage NAS (NAS) via le protocole NFS.
Autorisations : Si la cible de montage d'un jeu de données est définie en lecture seule, vous ne pouvez ni modifier ni supprimer les dossiers ou fichiers qu'elle contient. Toute tentative de ce type entraîne une erreur d'autorisation.
Utilisation des jeux de données dans les nœuds
Cette section explique comment monter un jeu de données OSS sur un nœud. Dans cet exemple, vous créez un jeu de données DataWorks adossé à OSS, montez le chemin OSS oss://datasets-oss.oss-cn-shanghai.aliyuncs.com/dataset01/v1/ sur le chemin de montage du jeu de données /mnt/data/dataset01, puis lisez et écrivez des données dans le code du nœud.
Prérequis : création d'un jeu de données
-
Créer un bucket ou créer un système de fichiers.
Cet exemple utilise un jeu de données OSS. Créez un bucket nommé
datasets-ossdans la région Chine (Shanghai), puis créez le répertoire/dataset01/v1. -
Dans cet exemple, créez un jeu de données OSS nommé
datasets-osset montez le chemin OSSoss://datasets-oss.oss-cn-shanghai.aliyuncs.com/dataset01/v1/sur/mnt/data/dataset01.
1. Configuration du jeu de données pour un nœud
Dans la section Debug Configuration d'un nœud Shell ou Python, configurez le jeu de données datasets-oss.
Avant de publier le nœud, ajoutez également le jeu de données dans la section Scheduling Settings.
Pour utiliser un jeu de données, allouez au moins 0,5 unité de calcul (CU) au nœud.
|
Paramètre |
Description |
|
Datasets |
Spécifie le jeu de données accessible par le code du nœud actuel.
Dans cet exemple, sélectionnez le jeu de données OSS |
|
Mount Path |
Chemin utilisé par le code du nœud pour accéder au jeu de données. Ce champ est automatiquement renseigné avec le Default Mount Path configuré lors de la définition du jeu de données. Important
Si vous montez plusieurs jeux de données sur le même nœud, leurs chemins de montage ne doivent pas entrer en conflit. |
|
Advanced Settings |
Ce paramètre est facultatif. Vous pouvez spécifier les outils et les paramètres d'accès aux données OSS ou les configurations d'accès aux systèmes de fichiers NAS au format JSON.
|
|
Read Only |
Par défaut, vous pouvez lire et écrire des données dans le jeu de données depuis le nœud actuel. Si le jeu de données est défini en lecture seule pour ce nœud, vous ne pouvez pas écrire de données dans son répertoire de montage depuis le code du nœud. Toute tentative d'écriture entraînera une erreur d'autorisation. |
2. Utilisation du jeu de données dans un nœud
Cet exemple utilise un nœud Shell. Après avoir attaché un jeu de données OSS au nœud Shell, vous pouvez gérer les données OSS dans le code du nœud comme s'il s'agissait de fichiers locaux. L'exemple suivant utilise l'outil ossfs 2,0 par défaut pour écrire le fichier file01.txt dans le chemin de montage /mnt/data/dataset01 du jeu de données OSS datasets-oss.
Exemple de code :
echo "Hello World" > /mnt/data/dataset01/file01.txt
ls -tl /mnt/data/dataset01
Dans le panneau Debug Configurations situé à droite, ouvrez l'onglet Dataset et sélectionnez le jeu de données personnalisé datasets-oss/V1. Confirmez le message d'autorisation réussie du groupe de ressources et assurez-vous que l'option Read-only est désactivée. Après l'exécution du nœud, le journal indique que le fichier file01.txt a été créé (12 octets, autorisations : rwxrwxrwx), le code de sortie est 0, le temps écoulé est de 0,741 s et l'état est FINISH.
Si vous recevez le message d'erreur Job Submit Failed! submit job failed directly! Caused by: execute task failed, exception: [103:ILLEGAL_TASK]:Task with dataset need 0.5cu at least! pendant l'exécution, cela signifie que la tâche ne dispose pas d'assez d'unités de calcul (CU). Augmentez l'allocation de CU pour le groupe de ressources à au moins 0,5.
3. Vérification des données dans OSS
Après l'exécution du code décrit dans la section 2. Utilisation du jeu de données dans un nœud, le fichier est automatiquement écrit dans le chemin de stockage OSS correspondant au chemin de montage du jeu de données. Vous pouvez afficher le fichier dans le chemin de stockage OSS. Dans cet exemple, le chemin de montage /mnt/data/dataset01 du jeu de données OSS datasets-oss correspond à oss://datasets-oss.oss-cn-shanghai.aliyuncs.com/dataset01/v1/. La figure suivante montre un exemple des données écrites dans le chemin OSS.
Dans ce chemin, vous trouverez le fichier écrit file01.txt (0,012 Ko, stockage Standard).
Utilisation des jeux de données dans un environnement de développement personnel
Une fois un jeu de données défini, vous pouvez le monter sur une instance d'environnement de développement personnel lors de la création ou de la modification de l'instance. Vous pouvez ensuite accéder directement aux données du jeu de données depuis le terminal ou un Notebook de votre répertoire personnel.
Prérequis : création d'un jeu de données
-
Cet exemple utilise un jeu de données basé sur NAS. Créez un jeu de données NAS nommé
datasets-nasdans la région Chine (Shanghai) et montez le chemin NASnas://****.cn-shanghai.nas.aliyuncs.com/mnt/dataset02/v1/sur/mnt/data/dataset02.
1. Configuration d'un jeu de données pour l'environnement personnel
Créez une instance d'un environnement de développement personnel et sélectionnez le jeu de données NAS existant datasets-nas.
Sur la page de configuration, sélectionnez datasets-nas dans la liste déroulante Dataset et spécifiez son chemin de montage correspondant.
|
Paramètre |
Description |
|
Datasets |
Spécifie le jeu de données accessible par le code de l'instance. Assurez-vous que le VPC sélectionné pour l'instance d'environnement de développement personnel peut se connecter à la cible de montage NAS. Dans cet exemple, sélectionnez le jeu de données NAS |
|
Mount Path |
Chemin utilisé par le code de l'instance pour accéder au jeu de données. Dans cet exemple, montez le chemin du jeu de données NAS Important
Si vous montez plusieurs jeux de données sur la même instance d'environnement de développement personnel, leurs chemins de montage ne doivent pas entrer en conflit. |
|
Advanced Settings |
Ce paramètre est facultatif. Vous pouvez utiliser le format JSON pour spécifier les configurations (paramètre nasOptions) d'accès à un système de fichiers Apsara File Storage NAS (NAS) utilisant le protocole NFS. Le code suivant affiche la configuration par défaut. Vous pouvez également consulter la rubrique Montage manuel d'un système de fichiers NFS pour personnaliser les valeurs des paramètres. Important
|
|
Read Only |
Par défaut, vous pouvez lire et écrire des données dans le jeu de données depuis l'instance. Si le jeu de données est défini en lecture seule pour l'instance, vous ne pouvez pas écrire de données dans son répertoire de montage depuis le code de l'instance. Toute tentative d'écriture entraînera une erreur d'autorisation. |
2. Utilisation du jeu de données dans un Notebook
En haut de la page DataStudio, basculez vers l'instance d'environnement de développement personnel, puis créez un Notebook pour le développement de base.
-
Dans le Notebook, ajoutez le contenu suivant.
-
Écrivez des données dans le chemin spécifié du jeu de données.
import os # Define the destination path and file name file_path = "/mnt/data/dataset02/file02.txt" # Make sure that the directory exists. If the directory does not exist, create it. os.makedirs(os.path.dirname(file_path),exist_ok=True) # Write the content content = "Hello World!" try: with open(file_path, "w", encoding="utf-8") as file: file.write(content) print(f"The file is successfully written to {file_path}") except Exception as e: print(f"Failed to write the file: {str(e)}") -
Lisez des données depuis le chemin spécifié du jeu de données.
file_path = "/mnt/data/dataset02/file02.txt" with open(file_path, "r") as file: content = file.read() content
-
-
Exécutez les deux extraits de code Python séparément.
RemarqueAvant d'exécuter le code, assurez-vous d'avoir sélectionné le noyau Python approprié. Cet exemple utilise Python 3.11.9.
Premier extrait de code : Écriture de données dans le chemin spécifié du jeu de données.
import os # Define the destination path and file name file_path = "/mnt/data/dataset02/file02.txt" # Make sure that the directory exists. If the directory does not exist, create it. os.makedirs(os.path.dirname(file_path),exist_ok=True) # Write the content content = "Hello World!" try: with open(file_path, "w", encoding="utf-8") as file: file.write(content) print(f"The file is successfully written to {file_path}") except Exception as e: print(f"Failed to write the file: {str(e)}")Si la sortie est
The file is successfully written to /mnt/data/dataset02/file02.txt, l'opération d'écriture a réussi. Deuxième extrait de code : Lecture de données depuis le chemin spécifié du jeu de données.file_path = "/mnt/data/dataset02/file02.txt" with open(file_path, "r") as file: content = file.read() contentSi la sortie est
'Hello World!', l'opération de lecture a réussi.
3. Configuration de la planification
À droite du nœud Notebook, cliquez sur Scheduling Settings et ajoutez les options du jeu de données. Utilisez les mêmes paramètres que ceux configurés pour l'instance d'environnement de développement personnel.
Exemples de configuration avancée
Lors de la configuration d'un jeu de données, vous pouvez définir des configurations avancées pour personnaliser les paramètres pertinents au format JSON :
Lorsque vous configurez un jeu de données pour un nœud, vous pouvez définir des configurations avancées pour spécifier les outils et les paramètres de lecture et d'écriture des données OSS, ou spécifier les configurations de lecture et d'écriture des données dans les systèmes de fichiers NAS.
Lorsque vous configurez un jeu de données pour un environnement de développement personnel, vous pouvez définir des paramètres avancés pour spécifier les configurations de lecture et d'écriture des données dans les systèmes de fichiers NAS.
Montage d'OSS avec ossfs 2,0
ossfs 2,0 est un client qui monte OSS pour un accès haute performance. Il offre un débit séquentiel élevé en lecture/écriture et exploite pleinement la bande passante OSS. Il convient aux applications intensives en calcul nécessitant des performances d'E/S séquentielles élevées, telles que l'entraînement IA et le traitement du big data. Ces scénarios de charge de travail impliquent principalement des lectures séquentielles et aléatoires ainsi que des écritures séquentielles (ajout uniquement) et ne requièrent pas la sémantique POSIX complète.
Dans la section Advanced Settings, vous pouvez définir des paramètres avancés. Séparez plusieurs options par une virgule (,). Pour obtenir des instructions sur l'utilisation des paramètres avancés et découvrir d'autres options de configuration, consultez les options de montage ossfs 2.0. Les exemples suivants illustrent plusieurs scénarios courants :
-
Source de données immuable : Si tous les fichiers que vous lisez ne sont pas modifiés pendant une tâche, vous pouvez définir un temps de cache long pour réduire le nombre de requêtes de métadonnées. Un scénario typique consiste à lire un lot de fichiers existants et à générer un nouveau lot de fichiers après traitement.
{"mountOssType":"ossfs", "attr_timeout": "7200"} -
Opérations de lecture et d'écriture rapides : Utilisez un temps de cache de métadonnées court pour équilibrer l'efficacité du cache et l'actualité des données.
{"mountOssType":"ossfs", "attr_timeout": "3", "negative_timeout":"0"} -
Vue cohérente pour les tâches distribuées : Par défaut, ossfs met à jour les données des fichiers en fonction du cache de métadonnées. Utilisez la configuration suivante pour obtenir une vue synchronisée sur plusieurs nœuds.
{ "mountOssType":"ossfs","negative_timeout": "0", "close_to_open":"false"} -
OOM causé par l'ouverture d'un trop grand nombre de fichiers : Une forte concurrence des tâches avec un grand nombre de fichiers ouverts simultanément peut provoquer des problèmes de mémoire insuffisante (OOM). Utilisez la configuration suivante pour atténuer la pression sur la mémoire.
{"mountOssType":"ossfs","readdirplus": "false", "inode_cache_eviction_threshold":"300000"}
Montage d'OSS avec ossfs 1,0
ossfs 1,0 monte un bucket OSS en tant que système de fichiers local sur un système Linux. Par rapport à ossfs 2.0, ossfs 1,0 offre une prise en charge plus complète des opérations sur les fichiers. Si vous rencontrez des incompatibilités d'opérations sur les fichiers avec ossfs 2,0, essayez d'utiliser ossfs 1,0 à la place.
Pour plus d'informations sur les paramètres requis pour le montage avec ossfs 1,0, consultez les options de montage ossfs 1,0.
Montage d'OSS avec JindoFuse
Vous pouvez utiliser le composant JindoFuse pour monter un jeu de données OSS sur un chemin spécifié dans un conteneur. Cet outil convient aux scénarios suivants :
Vous souhaitez lire les données OSS comme s'il s'agissait d'un jeu de données local, ou le jeu de données est suffisamment petit pour bénéficier de l'accélération par cache local de JindoFuse.
Vous devez écrire des données dans OSS.
Dans la section Advanced Settings, vous pouvez définir des paramètres avancés. Séparez plusieurs options par une virgule (,). Le code suivant présente uniquement un exemple. Pour obtenir des descriptions des paramètres et découvrir d'autres options de configuration, consultez le guide d'utilisation de JindoFuse et la rubrique Utilisation de JindoFuse pour monter et accéder aux données.
Actuellement, DataWorks prend en charge uniquement les paramètres au format key=value.
{
"mountOssType":"jindofuse",
"fs.oss.download.thread.concurrency": "2 × number of CPU cores",
"fs.oss.upload.thread.concurrency": "2 × number of CPU cores",
"attr_timeout": 3,
"entry_timeout": 0,
"negative_timeout": 0
}
Utilisation d'un jeu de données NAS
Pour les jeux de données basés sur NAS, vous pouvez spécifier des configurations (à l'aide du paramètre nasOptions) pour accéder à un système de fichiers Apsara File Storage NAS (NAS) basé sur NFS. Le code suivant affiche la configuration par défaut. Pour personnaliser les valeurs des paramètres, consultez la rubrique Montage manuel d'un système de fichiers NFS.
Seuls les systèmes de fichiers NAS utilisant le protocole NFS peuvent être montés.
Pour NAS, un seul paramètre de configuration avancée est pris en charge :
nasOptions. Pour personnaliser les paramètres de montage NAS, vous pouvez définir la configuration avancée sur{"nasOptions":"<ParameterName1=ParameterValue>, <ParameterName2=ParameterValue>,..."}.
{"nasOptions":"vers=3,nolock,proto=tcp,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport"}
FAQ
Que faire si l'erreur « FileNotFoundError: /etc/oss-secret/AccessKeyId » apparaît lors de la lecture des données d'un jeu de données OSS ?
Cette erreur indique généralement que le groupe de ressources DataWorks n'a pas pu obtenir les identifiants requis pour accéder à OSS. Pour résoudre le problème, procédez comme suit :
Confirmez que vous avez effectué l'autorisation OSS dans le panneau de configuration du jeu de données. Une invite pour cette autorisation s'affiche lors de la première utilisation du jeu de données.
Vérifiez que le groupe de ressources serverless est dans un état normal et n'est pas suspendu.
Si l'autorisation et l'état du groupe de ressources sont normaux mais que l'erreur persiste, contactez le support technique pour résoudre le problème d'injection des identifiants ossfs.