Utilisez des jeux de données dans des nœuds (Shell, Python et Notebook) pour lire et écrire des données dans Object Storage Service (OSS) ou Apsara File Storage NAS (NAS) lors du développement. 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 apprendre à 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 précédente 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 s'effectue uniquement via un groupe de ressources Serverless.
Objets pris en charge : Les jeux de données sont compatibles uniquement avec les nœuds Shell, les nœuds Python, les Notebooks pour le développement de base et les environnements de développement personnel. 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 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 basé sur 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. Spécifiez les outils et 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îne 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, gérez 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 à 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 le statut 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 de 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. Affichez 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 illustre 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, montez-le sur une instance d'environnement de développement personnel lors de la création ou de la modification de l'instance. Accédez ensuite 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'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. Utilisez 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. Consultez également 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îne 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 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)}")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 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() 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
Lorsque vous configurez un jeu de données, définissez 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, définissez des configurations avancées pour spécifier les outils et 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, définissez 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 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 élevé en lecture/écriture séquentielle et exploite pleinement la bande passante OSS. Il convient aux applications intensives en calcul nécessitant des performances 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 Datasets > Advanced Settings, définissez des paramètres avancés. Séparez plusieurs options par une virgule (,). Pour savoir comment utiliser les paramètres avancés et découvrir d'autres options de configuration, consultez la rubrique 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, définissez 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 de 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 concurrence élevée des tâches avec un grand nombre de fichiers ouverts simultanément peut provoquer des problèmes de manque de mémoire (OOM). Utilisez la configuration suivante pour atténuer la pression sur la mémoire.
{"mountOssType":"ossfs","readdirplus": "false", "inode_cache_eviction_threshold":"300000"}
Montage 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 la rubrique Options de montage ossfs 1,0.
Montage OSS avec JindoFuse
Utilisez 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 Datasets > Advanced Settings, définissez des paramètres avancés. Séparez plusieurs options par une virgule (,). Le code suivant est donné à titre d'exemple. Pour les descriptions des paramètres et 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, spécifiez 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, définissez Advanced Configuration sur{"nasOptions":"<ParameterName1=ParameterValue>, <ParameterName2=ParameterValue>,..."}.
{"nasOptions":"vers=3,nolock,proto=tcp,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport"}