全部产品
Search
文档中心

对象存储 OSS:使用OSS加速器

更新时间:Dec 02, 2024

OSS加速器能够与各类OSS常用工具以及OSS SDK相配合,实现高效的数据上传和下载等操作。本文将为您介绍OSS相关常用工具和OSS SDK如何进行配置并使用OSS加速器。

方案概览

通过OSS加速器实现毫秒级响应、低延迟以及高吞吐量的数据访问,有以下四种方案:

  1. ossutil使用OSS加速器:在ossutil的配置文件ossutilconfig中,通过添加OSS加速器域名,完成加速器的配置。

  2. ossfs使用OSS加速器:使用ossfs挂载远程Bucket时,在挂载命令中添加OSS加速器域名,完成加速器的配置。

  3. OSS Connector for AI/ML使用OSS加速器:使用OSS Connector构建数据集时,通过endpoint参数将OSS加速器域名注入,完成加速器的配置。

  4. OSS SDK使用OSS加速器:以Java SDK为例,在初始化ossClient时通过endpoint参数,将OSS加速器域名注入,完成加速器的配置。

重要

使用OSS加速器时,请注意将访问域名填写为OSS加速器域名。例如:

  • 在配置ossutil时,将endpoint参数值替换为OSS加速器域名。

  • ossfs挂载本地文件系统时,将-ourl参数填写为OSS加速器域名。

前提条件

  • 已创建OSS加速器。具体操作,请参见创建加速器

  • OSS加速器功能目前在华东1(杭州)、华东2(上海)、华北2(北京)、华北6(乌兰察布)、华南1(深圳)、新加坡地域公测。

方案一:ossutil使用OSS加速器

ossutil使用OSS加速器

以下内容以Linux x86 64bit环境为例进行安装介绍。其他系统下载安装,请参见安装ossutil

  1. 安装ossutil。

    1. 下载ossutil压缩包。

      curl -o ossutil-2.0.3-beta.09261200-linux-amd64.zip https://gosspublic.alicdn.com/ossutil/v2-beta/2.0.3-beta.09261200/ossutil-2.0.3-beta.09261200-linux-amd64.zip
    2. 在软件包所在目录,执行以下解压命令。

      unzip ossutil-2.0.3-beta.09261200-linux-amd64.zip
    3. 进入所在目录,执行以下命令。

      chmod 755 ossutil
    4. 在当前目录执行以下命令,实现ossutil的全局调用。

      sudo mv ossutil /usr/local/bin/ && sudo ln -s /usr/local/bin/ossutil /usr/bin/ossutil
    5. 继续执行以下命令,如果能返回版本号,说明安装成功。

      ossutil version
  2. 配置ossutil并添加OSS加速器域名。

    1. 创建ossutil配置文件,文件路径和文件名可自定义。

      touch ossutilconfig
    2. 添加配置并保存。关于ossutil更多配置,请参见配置ossutil

      #[profile dev]                 节名称,dev可自定义其名称。
      #accessKeyId、accessKeySecret  RAM用户AK、SK。 
      #region                        目标bucket所处地域。
      #buckets=dev-bucket            引用节名称为dev-bucket中的参数。
      #[buckets dev-bucket]          节名称,dev-bucket可自定义其名称。
      #bucketname                    目标bucket名称。 
      #endpoint                      OSS加速器域名。 
      
      [profile dev]
      accessKeyId=LTA*********************ICT
      accessKeySecret=V0qK**********************OOKp
      region=cn-hangzhou
      buckets=dev-bucket
      
      [buckets dev-bucket]
      bucket-name =
      #请填入OSS加速器域名。
        endpoint=cn-hangzhou-internal.oss-data-acc.aliyuncs.com
  3. 使用OSS加速器。

    由于在ossutil配置了OSS加速器,以下示例将更快速从bucket内下载文件到当前目录test下。关于ossutil更多命令操作,请参见ossutil命令

    其中cp为下载命令,-r参数对bucket-name中文件进行递归操作,-c参数指定了ossutil配置文件路径,--profile参数引用了配置文件中节名称为dev的配置。

    ossutil cp -r oss://bucket-name/ ./test/ -c ./ossutilconfig --profile dev

方案二:ossfs使用OSS加速器

ossfs使用OSS加速器

以下内容以Ubuntu 16.04 (x64)环境为例进行安装介绍。其他版本及系统安装,请参见安装ossfs

  1. 安装ossfs。

    sudo wget https://gosspublic.alicdn.com/ossfs/ossfs_1.91.3_ubuntu16.04_amd64.deb
    sudo apt-get update
    sudo apt-get install gdebi-core
    sudo gdebi ossfs_1.91.3_ubuntu16.04_amd64.deb
  2. 添加mime.types文件。

    您可以通过以下命令添加mime.types文件,使上传文件的Content-Type和文件扩展名匹配。

    sudo apt-get install mime-support
  3. ossfs配置、并挂载启用了OSS加速器的bucket。关于ossfs的更多配置,请参见ossfs配置与挂载

    1. 将AccessKey ID和AccessKey Secret保存到账号信息配置文件/etc/passwd-ossfs下。

      echo bucket-test:LTAI****************2CT:V0************************OKp > /etc/passwd-ossfs
    2. 设置账号信息配置文件权限为640。

      chmod 640 /etc/passwd-ossfs 
    3. 创建挂载目录。

      mkdir bucket-test
    4. 将名称为bucket-test的bucket挂载到/tmp/bucket-test/目录下,并指定OSS加速器域名。

      ossfs bucket-test /tmp/bucket-test/ -ourl=cn-hangzhou-internal.oss-data-acc.aliyuncs.com
  4. 使用OSS加速器。

    在ossfs配置了OSS加速器后,您可以在ossfs挂载的本地文件系统中,更加高效地对远程bucket内文件进行读写操作。例如在本地模型训练任务中更快速地加载存储在OSS上的模型文件。

方案三:OSS Connector for AI/ML使用OSS加速器

OSS Connector for AI/ML使用OSS加速器

以下内容为Python3.12版本安装OSS Connector for AI/ML示例。其他Python版本安装将Python换为指定版本即可。

  1. 环境要求。

  • 操作系统:Linux x86-64

  • glibc:>=2.17

  • Python:3.8-3.12

  • PyTorch: >=2.0

  • 使用OSS Checkpoint功能需Linux内核支持userfaultfd

    说明

    以Ubuntu系统为例,您可以执行sudo grep CONFIG_USERFAULTFD /boot/config-$(uname -r)命令确认Linux是否支持userfaultfd,当返回结果中显示CONFIG_USERFAULTFD=y时,则表示内核支持。返回结果显示CONFIG_USERFAULTFD=n时,则表示内核不支持,即无法使用OSS Checkpoint功能。

  1. 安装OSS Connector for AI/ML。

    1. 在Linux操作系统或基于Linux操作系统构建镜像所生成容器空间内,执行pip3.12 install osstorchconnector命令安装OSS Connector for AI/ML。

      pip3.12 install osstorchconnector
    2. 执行pip3.12 show osstorchconnector查看是否安装成功。

      pip3.12 show osstorchconnector

      当返回结果中显示osstorchconnector的版本信息时表示OSS Connector for AI/ML安装成功。

      image

  2. 配置OSS Connector for AI/ML。

    1. 创建访问凭证配置文件。

      mkdir -p /root/.alibabacloud && touch /root/.alibabacloud/credentials
    2. 添加访问凭证配置并保存。

      示例中的<Access-key-id><Access-key-secret>请分别替换为RAM用户的AccessKey ID、AccessKeySecret。关于如何创建AccessKey ID和AccessKeySecret,请参见创建AccessKey,配置项说明以及使用临时访问凭证配置请参见配置访问凭证

      {
        "AccessKeyId": "LTAI************************",
        "AccessKeySecret": "At32************************"
      }
    3. 创建OSS Connector配置文件。

      mkdir -p /etc/oss-connector/ && touch /etc/oss-connector/config.json
    4. 添加OSS Connector相关配置并保存。配置项说明请参见配置OSS Connector

      正常情况下使用以下默认配置即可。

      {
          "logLevel": 1,
          "logPath": "/var/log/oss-connector/connector.log",
          "auditPath": "/var/log/oss-connector/audit.log",
          "datasetConfig": {
              "prefetchConcurrency": 24,
              "prefetchWorker": 2
          },
          "checkpointConfig": {
              "prefetchConcurrency": 24,
              "prefetchWorker": 4,
              "uploadConcurrency": 64
          }
      }
      
  3. 使用OSS加速器。

    以下示例用于使用OssMapDataset的from_prefix方法,从OSS加速器空间中更快速地构建Dataset。其中ENDPOINT值为OSS加速器域名。

    from osstorchconnector import OssMapDataset
    
    # 请将ENDPOINT替换为OSS加速器域名 
    ENDPOINT = "cn-hangzhou-internal.oss-data-acc.aliyuncs.com"
    # OSS Connector for AI/ML配置文件路径 
    CONFIG_PATH = "/etc/oss-connector/config.json"
    # OSS访问凭证配置文件路径 
    CRED_PATH = "/root/.alibabacloud/credentials"
    # bucket文件目录路径 
    OSS_URI = "oss://ai-testset/EnglistImg/Img/BadImag/Bmp/Sample001/"
    
    # 使用OssMapDataset的from_frefix方法构建Dataset
    map_dataset = OssMapDataset.from_prefix(oss_uri=OSS_URI, endpoint=ENDPOINT, cred_path=CRED_PATH, config_path=CONFIG_PATH)
    
    # 随机访问已创建Dataset中的对象
    item = map_dataset[0]
    print(item.key)
    content = item.read()
    print(item.size)
    print(len(content))
    
    # 遍历Dataset中对象
    for item in map_dataset:
        print(item.key)
        print(item.size)
        content = item.read()
        print(len(content))
    

方案四:OSS SDK使用OSS加速器

OSS SDK使用OSS加速器

以下内容为Java SDK使用OSS加速器示例。其他语言SDK使用OSS加速器时,在ossClient初始化时将访问域名填写为OSS加速器域名即可。

  1. 环境要求。

    • 使用Java 1.7.0及以上版本。

    • 您可以通过命令java -version查看Java版本。

  2. 在Maven项目中加入OSS Java SDK依赖。Jar包方式引入OSS Java SDK,请参见安装SDK

    在Maven工程中使用OSS Java SDK,只需在pom.xml中加入相应依赖即可。以在<dependencies>中加入3.17.4版本的依赖为例:

    <dependency>
        <groupId>com.aliyun.oss</groupId>
        <artifactId>aliyun-sdk-oss</artifactId>
        <version>3.17.4</version>
    </dependency>

    如果使用的是Java 9及以上的版本,则需要添加JAXB相关依赖。添加JAXB相关依赖示例代码如下:

    <dependency>
        <groupId>javax.xml.bind</groupId>
        <artifactId>jaxb-api</artifactId>
        <version>2.3.1</version>
    </dependency>
    <dependency>
        <groupId>javax.activation</groupId>
        <artifactId>activation</artifactId>
        <version>1.1.1</version>
    </dependency>
    <!-- no more than 2.3.3-->
    <dependency>
        <groupId>org.glassfish.jaxb</groupId>
        <artifactId>jaxb-runtime</artifactId>
        <version>2.3.3</version>
    </dependency>
  3. 使用OSS加速器。

    以下示例通过JavaSDK使用OSS加速器进行数据上传。请注意将endpoint值替换为OSS加速器域名。

    import com.aliyun.oss.OSS;
    import com.aliyun.oss.OSSClientBuilder;
    import java.io.ByteArrayInputStream;
    
    public class OssCliectTest {
        public static void main(String[] args) throws Exception {
            // endpoint值请填写OSS加速器域名。
            String endpoint = "cn-hangzhou-internal.oss-data-acc.aliyuncs.com";
    
            //访问凭证信息
            String alibaba_cloud_access_key_id = "LT********************CT";
            String alibaba_cloud_access_key_secret = "V0q***************************OKp";
    
            // 填写Bucket名称,例如examplebucket。
            String bucketName = "BucketName";
            // 填写Object完整路径,例如exampledir/exampleobject.txt。Object完整路径中不能包含Bucket名称。
            String objectName = "Test.txt";
    
            // 创建OSSClient实例。
            OSS ossClient = new OSSClientBuilder().build(endpoint, alibaba_cloud_access_key_id,alibaba_cloud_access_key_secret);
            String content = "##################";
            // 将content变量内容上传至BucketName下的Test.txt文件中
            ossClient.putObject(bucketName,objectName,new ByteArrayInputStream(content.getBytes()));
            
            // 关闭OSSClient。
            ossClient.shutdown();
        }
    }