主要内容

本页采用了机器翻译。点击此处可查看英文原文。

将数据传输至 Amazon S3 存储桶,并使用 MATLAB 访问数据

要在云端处理数据,您可以将其上传至 Amazon® 简单存储服务 (Amazon S3™),随后即可通过 MATLAB® 或集群中的工作节点访问 Amazon S3 中的数据。

您可以从您的 MATLAB 会话中读取或写入 Amazon S3 数据。您的 MATLAB 会话可以位于任何位置,包括本地计算机、MATLAB Online™ 或 Cloud Center 中的云资源。

设置对 Amazon S3 存储桶的访问权限

您必须设置 Amazon Web Services (AWS®) 凭据,才能在 Amazon S3 中处理远程数据。这些 AWS 凭据还必须具备所需的读写策略。如果您正在 Cloud Center 上创建资源,可以在创建资源之前或资源运行期间添加对 AWS 的访问权限。

在 Cloud Center 创建云资源前添加 AWS 访问权限

如果您在 Cloud Center 创建 MATLAB 或 MATLAB Parallel Server™ 资源,可设置访问权限以读取以下数据:

  • 与您的 Cloud Center 帐户关联的 AWS 帐户中的 S3 存储桶,您将要从中创建云资源。

  • 公共 S3 存储桶。

要为 S3 存储桶设置读取权限,您需要在创建云资源时通过将 Additional IAM Policies (Optional) 设置为值 arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess 来添加所需的 AWS 身份、访问和管理 (IAM) 策略。

若还需为与您的 Cloud Center 帐户关联的 AWS 帐户中的 S3 存储桶设置写入权限(您正是通过该帐户创建云资源的),请改输入值 arn:aws:iam::aws:policy/AmazonS3FullAccess

在您的 MATLAB 会话中添加 AWS 访问权限

在以下情况下,您必须使用 AWS 会话令牌来设置读取权限:

  • 您已经在 Cloud Center 中启动了云资源。

  • 您的 MATLAB 会话位于您的本地计算机上,或位于 MATLAB Online 上。

  • 您希望访问 AWS 帐户中的某个 S3 存储桶,而该帐户并非您在 Cloud Center 中用于创建云资源的帐户。

如果您是 AWS 帐户的 root 用户,请按照以下步骤操作。否则,请联系您的 AWS 帐户管理员。若您已获得长期令牌,请跳至步骤 3。如果系统提供的是 AWS 会话令牌,请跳至第 6 步。请确保您的令牌具备所需的 S3 读取 (AmazonS3ReadOnlyAccess) 或写入(例如 AmazonS3FullAccess)策略。

  1. 使用包含 S3 存储桶的 AWS 帐户创建一个身份和访问管理 (IAM) 用户。有关详细信息,请参阅在 AWS 帐户中创建 IAM 用户

  2. 生成访问密钥以获取长期访问令牌,该令牌包含访问密钥 ID (AWS_ACCESS_KEY_ID) 和机密访问密钥 (AWS_SECRET_ACCESS_KEY)。有关详细信息,请参阅管理 IAM 用户的访问密钥。确保此访问密钥具有所需的 S3 访问策略。此访问密钥可用于生成 AWS 会话令牌。

  3. 在运行 MATLAB 实例的计算机上下载并安装 AWS 命令行接口工具。此工具支持在系统终端中执行特定于 AWS 的命令。

  4. 在系统终端中,输入此命令以设置 AWS CLI。系统将提示您输入长期访问令牌的详细信息。

    aws configure
  5. 要获取 AWS 会话令牌,请在系统终端中输入此命令。

    aws sts get-session-token --duration-seconds 3600
    此命令生成一个有效期为一小时的会话令牌。此会话令牌包含一个 AWS 访问密钥 ID、一个 AWS 机密访问密钥以及一个 AWS 会话令牌。请注意,此会话令牌中的密钥与长期访问令牌中的密钥不同。

    提示

    您可以使用 AWS CloudShell 替代 AWS CLI。有关 CloudShell 的详细信息,请参阅 AWS CloudShell 入门指南。有关会话令牌的详细信息,请参阅《请求临时安全凭据》

  6. 获取会话令牌后,请在 MATLAB 命令行窗口中使用setenv (MATLAB)命令,将您的 AWS 访问密钥 ID、秘密访问密钥、存储桶所在区域以及会话令牌作为系统环境变量进行设置。

    setenv("AWS_ACCESS_KEY_ID","YOUR_AWS_ACCESS_KEY_ID")
    setenv("AWS_SECRET_ACCESS_KEY","YOUR_AWS_SECRET_ACCESS_KEY")
    setenv("AWS_DEFAULT_REGION","YOUR_AWS_DEFAULT_REGION")
    setenv("AWS_SESSION_TOKEN","YOUR_AWS_SESSION_TOKEN")

    为增强代码安全性并确保代码共享更安全,您可将凭据存储在 MATLAB 保险库中作为密钥,随后在代码中调用这些密钥。有关详细信息,请参阅Keep Sensitive Information Out of Code (MATLAB)

  7. 如果您在 Cloud Center 使用 MATLAB Parallel Server,请配置您的云集群以访问 S3 服务。

    创建云集群后,请使用您的 AWS 凭据配置集群配置文件。在您的 MATLAB 会话中,于 MATLAB 主页选项卡的环境部分,选择并行 > 创建和管理集群。在集群配置文件管理器中,选择您的云集群配置文件。滚动至 EnvironmentVariables 属性,并添加以下环境变量名称:AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY AWS_DEFAULT_REGIONAWS_SESSION_TOKEN。有关详细信息,请参阅设置工作单元的环境变量 (Parallel Computing Toolbox)

验证从您的 MATLAB 会话访问 AWS 凭据

下载并安装 AWS 命令行接口工具。在您的 MATLAB 会话中,请检查您是否已拥有 AWS 帐户的访问权限。

!aws sts get-caller-identity

如果您在 MATLAB 会话中拥有 AWS 帐户的访问权限,则该命令将返回您的 AWS 帐户编号以及 AWS 帐户的其他详细信息。

将数据集下载到本地计算机

若要跟随本页中的示例操作,您可以将这些 MathWorks® 数据集下载到本地计算机上。请按照以下步骤开始操作。

  • 示例食物图像数据集包含 978 张食物照片,分为九个类别。您可以在 MATLAB 中使用此命令将该数据集下载到本地计算机。

    fprintf("Downloading Example Food Image data set ... ")
    filename = matlab.internal.examples.downloadSupportFile('nnet', 'data/ExampleFoodImageDataset.zip');
    fprintf("Done.\n")
    
    unzip(filename,"MyLocalFolder/FoodImageDataset");

  • 要在本地计算机上获取交通信号工作订单数据集,请使用此命令。

    fprintf("Downloading Traffic Signal Work Orders data set ... ")
    zipFile = matlab.internal.examples.downloadSupportFile("textanalytics","data/Traffic_Signal_Work_Orders.zip");
    fprintf("Done.\n")
    
    unzip(zipFile,"MyLocalFolder/TrafficDataset");

从本地计算机将数据上传至 Amazon S3

本节将向您展示如何将数据集从本地计算机上传至您的 Amazon S3 存储桶。本页后面的章节将向您介绍如何处理远程镜像和文本数据。

您可以通过 AWS S3 Web 页面将数据上传至 Amazon S3。要更高效地与 Amazon S3 进行文件传输,请使用 AWS 命令行接口工具

要将数据集从本地计算机上传至您的 Amazon S3 存储桶,请按以下步骤操作:

  1. 在您的 MATLAB 命令行窗口中使用以下命令创建数据存储桶:将 MyCloudData 替换为您的 Amazon S3 存储桶名称。

    !aws s3 mb s3://MyCloudData

  2. 在您的 MATLAB 命令行窗口中使用以下命令上传您的数据。

    !aws s3 cp mylocaldatapath s3://MyCloudData --recursive

    例如,要将计算机上的示例食品图像数据集上传至您的 Amazon S3 存储桶,请使用以下命令:

    !aws s3 cp MyLocalFolder/FoodImageDataset s3://MyCloudData/FoodImageDataset/ --recursive

    要将交通信号工作订单数据集从本地计算机上传至您的 Amazon S3 存储桶,请使用此命令。

    !aws s3 cp MyLocalFolder/TrafficDataset s3://MyCloudData/TrafficDataset/ --recursive

从 MATLAB 中访问 Amazon S3 数据

将数据存储到 Amazon S3 后,您可以使用 MATLAB 中的 数据导入和导出 (MATLAB)函数从 MATLAB 中的 Amazon S3 存储桶读取或写入数据。在其文件名输入参量中支持远程位置的 MATLAB 函数允许访问远程数据。要检查特定函数是否允许远程访问,请参阅该函数的说明页面。

注意

如果您正在 Cloud Center 的 MATLAB Parallel Server 的某个 MATLAB 会话中,请将镜像保存到主节点的 /shared/persisted 文件夹中,以便集群中的所有工作节点都能访问该文件夹。该位置是最佳选择,因为这样每位员工就不必单独下载数据了。

例如,您可以使用 imread (MATLAB) 从 Amazon S3 存储桶读取镜像。将 s3://MyCloudData 替换为您的 Amazon S3 存储桶的 URL。

  1. 使用 imread (MATLAB) 函数从 Amazon S3 读取镜像。

    img = imread("s3://MyCloudData/FoodImageDataset/french_fries/french_fries_90.jpg");

  2. 使用 imshow (MATLAB) 函数显示图像。

    imshow(img)

要将数据写入 Amazon S3 存储桶,您可以同样使用支持对远程数据进行写入操作的 数据导入和导出 (MATLAB) 函数。要检查特定函数是否允许远程访问,请参阅该函数的说明页面。

使用数据存储从 Amazon S3 读取数据到 MATLAB

要从 MATLAB 客户端或集群工作节点访问 Amazon S3 中的海量数据集,您可以使用数据存储。数据仓库是用于存储无法完全加载到内存中的大型数据集合的存储空间。数据仓库允许您将存储在远程位置多个文件中的数据作为单一实体进行读取和处理。例如,使用 imageDatastore (MATLAB) 从 Amazon S3 存储桶读取镜像。

  1. 创建一个指向 Amazon S3 存储桶 URL 的 imageDatastore 对象。将 s3://MyCloudData 替换为您的 Amazon S3 存储桶的 URL。

    imds = imageDatastore("s3://MyCloudData/FoodImageDataset/", ...
     IncludeSubfolders=true, ...
     LabelSource="foldernames");
  2. 使用 readimage (MATLAB) 函数读取 Amazon S3 中的第一个镜像。

    img = readimage(imds,1);

  3. 使用 imshow (MATLAB) 函数显示镜像。

    imshow(img)

要使用数据存储读取其他格式的文件或数据,请参阅 数据存储快速入门 (MATLAB)

要查看逐步示例,了解如何使用存储在 Amazon S3 中的数据训练卷积神经网络,请参阅 使用自动并行支持功能在云中训练网络 (Deep Learning Toolbox)

使用数据存储将数据写入 Amazon S3(源为 MATLAB)

您可以使用数据存储将数据从 MATLAB 或集群工作单元写入到 Amazon S3。例如,使用一个 tabularTextDatastore (MATLAB) 对象将表格数据从 Amazon S3 读取到一个 tall 数组中,对数据进行预处理,然后将其写回 Amazon S3。

  1. 创建一个指向 Amazon S3 存储桶 URL 的数据存储对象。

    ds = tabularTextDatastore("s3://MyCloudData/TrafficDataset/Traffic_Signal_Work_Orders.csv");
    
  2. 将表格数据读入一个高维数组,并对数据进行预处理,包括删除缺失的条目并对数据进行排序。

    tt = tall(ds);
    tt = sortrows(rmmissing(tt));

  3. 使用 write (MATLAB) 函数将数据写回 Amazon S3。

    write("s3://MyCloudData/TrafficDataset/preprocessedData/",tt);
    

  4. 要读取您的长数据,请使用datastore (MATLAB)函数。

    ds = datastore("s3://MyCloudData/TrafficDataset/preprocessedData/");
    tt = tall(ds);
    

要使用数据存储写入文件或其他格式的数据,请参阅 数据存储快速入门 (MATLAB)

另请参阅

主题