使用数据集

当数据集定义好以后,您可以在节点(Shell节点、Python节点、Notebook节点)中使用数据集,以便在数据开发过程中读写NASOSS存储中的数据。您也可以在创建个人开发环境时,将数据集作为个人开发环境实例的存储。本文为您介绍数据集的具体使用方法。

背景信息

在使用DataWorks进行数据开发的过程中,当您需要读写存储于OSS、NAS中的数据时,可以使用DataWorks的数据集功能。该功能支持您创建和管理数据集及其多个版本,通过数据集版本管理,您能够追踪数据的版本,并在新版本出现问题时迅速切换至旧版本,以确保业务流畅。

前提条件

创建数据集

使用限制

  • 数据开发(Data Studio)(新版)支持使用数据集。

  • 在数据开发节点访问数据集时,仅支持使用Serverless资源组

  • 目前仅Shell节点Python节点Notebook以及个人开发环境支持使用数据集。

  • 一个数据开发节点最多支持挂载5个数据集,支持存储类型为对象存储(OSS)NFS协议的文件存储(NAS)的数据集。

  • 一个个人开发环境最多支持挂载5个数据集,仅支持存储类型为NFS协议的文件存储(NAS)的数据集。

  • 当数据集挂载点设置为只读时,不支持对其下的文件夹/文件进行修改或删除操作,否则会因权限问题报错。

在节点中使用数据集

本文以创建一个OSS类型的DataWorks数据集,将OSSoss://datasets-oss.oss-cn-shanghai.aliyuncs.com/dataset01/v1/路径挂载到DataWorks数据集的/mnt/data/dataset01路径,并在节点中完成数据集的数据读写操作为例,介绍如何在节点使用数据集。

准备工作

  1. 创建存储空间创建文件系统

    本示例以OSS类型数据集为例,在上海地域创建名为datasets-ossbucket,并创建目录/dataset01/v1

  2. 创建数据集

    本示例创建OSS数据集名称为datasets-oss,将OSS路径oss://datasets-oss.oss-cn-shanghai.aliyuncs.com/dataset01/v1/挂载到/mnt/data/dataset01

1. 为节点配置数据集

Shell节点或Python节点的调度配置中配置数据集datasets-oss相关信息。

说明
  • 如需调试运行,需在调试配置中同步添加数据集。

  • 使用数据集至少需要为节点分配0.5CU的计算资源。

image

参数

说明

数据集

配置当前节点代码中可以访问的数据集。

  • 如果是OSS类型的数据集,第一次读取数据集时,您需要授权允许DataWorks资源组可以访问数据集配置的OSS Bucket。

  • 如果是NAS类型的数据集,需要确保DataWorks资源组的VPCNAS挂载点的VPC网络已连通。具体配置,请参见网络连通方案

本示例中选择在DataWorks中创建好的OSS数据集datasets-oss,选择V1版本。

挂载路径

配置当前节点代码中访问该数据集的路径。此处将自动获取数据集定义时配置的默认挂载路径

重要

数据集定义时的路径,同节点挂载多个数据集的情况下,该挂载路径不允许冲突。

高级配置

非必填,您可以通过JSON格式指定读写OSS数据的工具和参数,或指定读写NAS文件系统的相关配置。

  • 当您配置的数据集为OSS类型时,将默认使用ossfs 2.0访问您数据集路径中的OSS数据,您可以通过高级配置指定其他工具读写OSS。可使用的工具,请参见高级配置示例,以下为默认配置。

    {"mountOssType":"ossfs", "upload_concurrency":64} 
  • 当添加的数据集类型为NAS时,您可以指定访问NFS协议的文件存储(NAS)时的相关配置(nasOptions参数),以下为默认配置,您也可以参考手动挂载NFS协议文件系统,自定义参数值。

    重要
    • 当前仅支持挂载NFS协议的NAS。

    • NAS当前仅支持一个高级配置参数:nasOptions,如果需要自定义挂载NAS的参数可以设置高级配置为{"nasOptions":"<参数名1=参数值>, <参数名2=参数值>,..."}

    {"nasOptions":"vers=3,nolock,proto=tcp,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport"}

只读

默认可以在当前节点读写数据集中的数据。当前节点数据集设置为只读时,您将无法在当前节点代码中向数据集挂载目录中写入数据,即当您在代码中执行写入操作时,将会因权限问题报错。

2. 在节点中使用数据集

本示例以Shell节点为例,在Shell节点中绑定OSS类型数据集后,可以在Shell节点代码中按照本地文件管理的方式来管理的OSS数据。以下为使用默认的ossfs 2.0工具向OSS类型的数据集datasets-oss挂载路径/mnt/data/dataset01上传文件file01.txt并写入数据。

代码示例:

echo "Hello World" > /mnt/data/dataset01/file01.txt
ls -tl /mnt/data/dataset01

image

说明

如果运行时报错Job Submit Failed! submit job failed directly! Caused by: execute task failed, exception: [103:ILLEGAL_TASK]:Task with dataset need 0.5cu at least!表示任务分配CU不足,请调整资源组计算CU,至少分配0.5CU。

3. 在OSS中确认数据写入情况

2. 在节点中使用数据集代码执行完成以后,文件将自动写入数据集挂载路径对应的OSS存储路径,您可以前往OSS存储路径查看DataWorks节点中写入的文件,本示例OSS类型的数据集datasets-oss挂载路径/mnt/data/dataset01对应的存储路径为oss://datasets-oss.oss-cn-shanghai.aliyuncs.com/dataset01/v1/,以下为OSS该路径下数据写入情况示例。

image

在个人开发环境中使用数据集

当数据集定义好以后,您可以在创建个人开发环境实例时或修改已有个人开发环境实例配置时,将DataWorks数据集的存储挂载到个人开发环境实例,后续,您可以在个人目录的终端或Notebook中直接读取数据集中的数据。

准备工作

  1. 创建文件系统

    说明

    DataWorks个人开发环境当前仅支持挂载NAS类型(NFS协议)的数据集。

  2. 创建数据集

    本示例创建NAS数据集名称为datasets-nas,将NAS路径nas://****.cn-shanghai.nas.aliyuncs.com/mnt/dataset02/v1/挂载到/mnt/data/dataset02

1. 为个人开发环境配置数据集

创建个人开发环境实例,选择已创建的NAS类型的数据集datasets-nas

image

参数

说明

数据集

配置当前节点代码中可以访问的数据集,需确保个人开发环境实例选择的专有网络与NAS挂载点可连通。

本示例中选择在DataWorks中创建好的NAS数据集datasets-nas,选择V1版本。

挂载路径

配置个人开发环境实例代码中访问该数据集的路径。

本示例中将NAS数据集路径nas://****.cn-shanghai.nas.aliyuncs.com/mnt/dataset02/v1/挂载到/mnt/data/dataset02

重要

数据集定义时的路径,同一个个人开发环境实例挂载多个数据集的情况下,该挂载路径不允许冲突。

高级配置

非必填,您可以通过JSON格式指定访问NFS协议的文件存储(NAS)时的相关配置(nasOptions参数),以下为默认配置,您也可以参考手动挂载NFS协议文件系统,自定义参数值。

重要
  • 当前仅支持挂载NFS协议的NAS。

  • NAS当前仅支持一个高级配置参数:nasOptions,如果需要自定义挂载NAS的参数可以设置高级配置为{"nasOptions":"<参数名1=参数值>,<参数名2=参数值>,..."}

{"nasOptions":"vers=3,nolock,proto=tcp,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport"}

只读

默认可以在当前节点读写数据集中的数据。当数据集在当前节点设置为只读的情况下,您将无法在当前节点代码中向数据集挂载目录中写入数据,即当您在代码中执行写入操作时,将会因权限问题报错。

2. Notebook中读取数据集

  1. 在数据开发页面顶部,切换至个人开发环境实例,然后新建Notebook

  2. Notebook中配置如下内容。

    1. 向数据集指定路径写入数据。

      import os
      
      # 定义目标路径和文件名
      file_path = "/mnt/data/dataset02/file02.txt"
      
      # 确保目录存在(如果目录不存在则创建)
      os.makedirs(os.path.dirname(file_path),exist_ok=True)
      
      # 写入内容
      content = "Hello World!"
      try:
          with open(file_path, "w", encoding="utf-8") as file:
              file.write(content)
          print(f"文件已成功写入:{file_path}")
      except Exception as e:
          print(f"写入失败:{str(e)}")
    2. 读取数据集中指定路径下的数据。

      file_path = "/mnt/data/dataset02/file02.txt"
      with open(file_path, "r") as file:
          content = file.read()
      content
  3. 分别运行两个Python代码。

    说明

    运行时需确认Python内核,本示例以Python 3.11.9为例。

    image

3. 配置调度

Notebook节点右侧单击调度配置,添加数据集相关选项,参数配置与创建个人开发环境实例时设置的数据集参数相同。

高级配置示例

配置数据集时,您可以设置高级配置,通过JSON格式自定义相关参数:

配置示例如下:

使用ossfs 2.0挂载访问OSS

ossfs 2.0是一款专门用于通过挂载方式高性能访问OSS(对象存储)的客户端,它具备出色的顺序读写能力,可充分发挥OSS的高带宽优势,适用于对顺序读写性能要求较高的场景,如AI训练、大数据处理等计算密集型应用。这类工作负载场景主要涉及顺序和随机读取、顺序(仅支持追加)写入操作,并且无需依赖完整的 POSIX 语义。

数据集 > 高级配置中,您可以设置高级参数,多个配置之间使用半角逗号(,)分隔。有关高级参数的使用说明,以及更多配置,请参见ossfs 2.0挂载选项说明。以下是几个常见的场景示例:

  • 任务过程中数据源不变:如果要读取的所有文件在读取过程中均不会被修改,可以配置较大的缓存时间,从而减少元数据请求次数。典型场景例如:读取一批已有的旧文件,并在处理后生成一批新文件。

    {"mountOssType":"ossfs", "attr_timeout": "7200"}
  • 快速读写:使用较小的元数据缓存时间,可以平衡缓存效率和文件数据的及时性。

    {"mountOssType":"ossfs", "attr_timeout": "3", "negative_timeout":"0"}
  • 分布式任务读写一致:ossfs默认基于元数据缓存进行文件的数据更新。通过以下配置实现多节点同步视图。

    { "mountOssType":"ossfs","negative_timeout": "0", "close_to_open":"false"}
  • 同时打开过多文件导致OOM:任务并发量较高,同时打开大量文件,可能引发OOM(内存不足)问题。通过以下配置来缓解内存压力。

    {"mountOssType":"ossfs","readdirplus": "false", "inode_cache_eviction_threshold":"300000"}

使用ossfs 1.0挂载访问OSS

ossfs 1.0是一款允许您在Linux系统上将OSS存储空间挂载为本地文件系统,与ossfs 2.0文件操作方面相比,ossfs 1.0支持文件操作方面更全面,如果遇到ossfs2挂载目录后文件操作不兼容的情况,请尝试使用ossfs1。

ossfs 1.0挂载所需要的具体参数,请参见ossfs 1.0挂载选项说明

使用jindofuse挂载访问OSS

利用JindoFuse组件将OSS数据集挂载到容器的指定路径,该工具适用于以下场景:

  • 您希望能够像访问本地数据集一样读取OSS数据,或者数据集较小,能有效利用JindoFuse的本地缓存加速。

  • 您有向OSS写入数据的需求。

数据集 > 高级配置中,您可以设置高级参数,多个配置之间使用半角逗号(,)分隔。以下仅为配置方式示例,参数说明与更多参数配置,请参见JindoFuse使用指南使用JindoFuse挂载访问

说明

目前DataWorks仅支持key=value格式的参数。

{ 
  "mountOssType":"jindofuse",
  "fs.oss.download.thread.concurrency": "cpu核数2倍",
  "fs.oss.upload.thread.concurrency": "cpu核数2倍",
  "attr_timeout": 3,
  "entry_timeout": 0,
  "negative_timeout": 0
}

使用NAS类型数据集

当添加的数据集类型为NAS时,您可以指定访问NFS协议的文件存储(NAS)时的相关配置(nasOptions参数),以下为默认配置,您也可以参考手动挂载NFS协议文件系统,自定义参数值。

重要
  • 当前仅支持挂载NFS协议的NAS。

  • NAS当前仅支持一个高级配置参数:nasOptions,如果需要自定义挂载NAS的参数可以设置高级配置为{"nasOptions":"<参数名1=参数值>, <参数名2=参数值>,..."}

{"nasOptions":"vers=3,nolock,proto=tcp,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport"}

相关文档