本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

读取远程数据

在 MATLAB® 中,可以使用 datastore 对象访问远程数据。您可以创建数据存储以使用存储在远程位置的数据,例如使用 Amazon S3™(简单存储服务)、Windows Azure® Blob 存储和 Hadoop® 分布式文件系统 (HDFS™) 的云存储。使用数据存储检查来自桌面版本 MATLAB 的部分数据。然后,在本地建立代码原型后,可以再将其扩展到群集或云。扩展提高了执行效率,因为在与数据相同的位置运行大型计算更为高效。

Amazon S3

MATLAB 允许使用 Amazon S3 作为亚马逊 Web 服务提供的在线文件存储 Web 服务。您可以使用存储在 Amazon S3 上的数据创建 ImageDatastoreFileDatastoreTabularTextDatastore。当指定数据的位置时,必须使用以下格式的国际化资源标识符 (IRI) 指定文件或文件夹的完整路径:

s3://bucketname/path_to_file

bucketname 是容器的名称,path_to_file 是文件或文件夹的路径。

Amazon S3 通过 Web 服务接口提供数据存储。您可以在 Amazon S3 中使用作为容器来存储对象。有关详细信息,请参阅 Amazon S3 简介

要使用 Amazon S3 数据存储,请按照下列步骤操作:

  1. 注册一个亚马逊 Web 服务 (AWS) 根帐户。请参阅亚马逊 Web 服务:帐户

  2. 使用 AWS 根帐户,创建 IAM(身份识别和访问管理)用户。请参阅在 AWS 帐户中创建 IAM 用户

  3. 生成访问密钥以接收访问密钥 ID 和秘密访问密钥。请参阅管理 IAM 用户的访问密钥

  4. 使用 setenv 设置环境变量:

    • AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY - 对 Amazon S3 服务进行身份验证并启用服务。(在步骤 3 中生成了这对访问密钥变量。)

    • AWS_REGION - 选择桶的地理区域。如果设置的话,此变量将覆盖正在使用的配置文件的默认区域。

例如,创建 ImageDatastore,从数据存储中读取指定的图像,然后将图像显示到屏幕上。

setenv('AWS_ACCESS_KEY_ID', 'YOUR_AWS_ACCESS_KEY_ID'); 
setenv('AWS_SECRET_ACCESS_KEY', 'YOUR_AWS_SECRET_ACCESS_KEY'); 
setenv('AWS_REGION', 'us-east-1');

ds = imageDatastore('s3://mw-s3-datastore-tests-us/image_datastore/jpegfiles', ...
  'IncludeSubfolders', true, 'LabelSource', 'foldernames'); 
img = ds.readimage(1);
imshow(img)

Windows Azure Blob 存储

MATLAB 支持您使用 Microsoft 提供的在线文件存储 Web 服务 Windows Azure Blob 存储 (WABS)。您可以使用存储在 Windows Azure 上的数据创建 ImageDatastoreFileDatastoreTabularTextDatastore。当指定数据的位置时,必须使用以下格式的国际化资源标识符 (IRI) 指定文件或文件夹的完整路径:

wasbs://container@account/path_to_file/file.ext

container@account 是容器的名称,path_to_file 是文件或文件夹的路径。

Windows Azure 通过 Web 服务接口提供数据存储。您可以在 Windows Azure 中使用 Blob 作为容器来存储对象。有关详细信息,请参阅 Windows Azure 简介

要使用 Windows Azure 数据存储,请按照下列步骤操作:

  1. 注册一个 Microsoft Azure 帐户,请参阅 Microsoft Azure Account

  2. 使用 setenv 设置以下两个环境变量之一,以设置身份验证详细信息:

    • MW_WASB_SAS_TOKEN - 通过共享访问签名 (SAS) 进行身份验证

      获得 SAS。有关详细信息,请参阅 https://docs.microsoft.com/en-us/azure/vs-azure-tools-storage-explorer-blobs 中的“Get the SAS for a blob container”部分。

      在 MATLAB 中,将 MW_WASB_SAS_TOKEN 设置为 SAS 查询字符串。例如,

      setenv MW_WASB_SAS_TOKEN '?st=2017-04-11T09%3A45%3A00Z&se=2017-05-12T09%3A45%3A00Z&sp=rl&sv=2015-12-11&sr=c&sig=E12eH4cRCLilp3Tw%2BArdYYR8RruMW45WBXhWpMzSRCE%3D'

      您必须将此字符串设置为从 Azure Storage Web UI 或 Explorer 生成的有效 SAS 令牌。

    • MW_WASB_SECRET_KEY - 通过帐户的两个密钥之一进行身份验证

      每个存储帐户都有两个允许管理访问权限的密钥。通过设置 MW_WASB_SECRET_KEY 环境变量,无需创建 SAS 令牌即可对 MATLAB 授予相同的访问权限。例如:

      setenv MW_WASB_SECRET_KEY '1234567890ABCDEF1234567890ABCDEF1234567890ABCDEF'

  3. 从 Windows Azure Storage Blob (WASB) 位置创建数据存储

    要生成文件位置,请以文件名 file.ext 开始,并以文件路径 /path_to_file 和您的帐户名称 wasbs://container@account/ 作为其前缀。完整的数据位置使用以下语法:

    wasbs://container@account/path_to_file/file.ext

    container@account 是容器的名称,path_to_file 是文件或文件夹的路径。

    例如,如果您在测试存储帐户 wasbs://blobContainer@storageAccount.blob.core.windows.net/ 上的文件夹 /airline 中有一个文件 airlinesmall.csv,则可以使用以下方式创建数据存储:

    location = 'wasbs://blobContainer@storageAccount.blob.core.windows.net/airline/airlinesmall.csv';
    ds = tabularTextDatastore(location, 'TreatAsMissing', 'NA', ...
      'SelectedVariableNames', {'ArrDelay'});

您可以使用 Azure 进行 datastore 支持的所有计算,包括直接读取、 mapreduce、tall 数组和深度学习。例如,创建 ImageDatastore,从数据存储中读取指定的图像,然后将图像显示到屏幕上。

setenv('MW_WASB_SAS_TOKEN', 'YOUR_WASB_SAS_TOKEN');  
ds = imageDatastore('wasbs://YourContainer@YourAccount.blob.core.windows.net/', ...
  'IncludeSubfolders', true, 'LabelSource', 'foldernames'); 
img = ds.readimage(1);
imshow(img)

如果您使用 Parallel Computing Toolbox™,则必须通过在 parpoolbatchcreateJob 中或 Cluster Profile Manager 中设置 EnvironmentVariables,将客户端环境变量复制到群集上的工作进程。

有关详细信息,请参阅https://docs.microsoft.com/en-us/azure/hdinsight/hdinsight-hadoop-use-blob-storage

HDFS

指定数据的位置

您也可以使用 datastore 函数为驻留在 Hadoop 分布式文件系统 (HDFS) 上的文本文件或序列文件集合创建数据存储。当指定数据的位置时,必须使用下列格式之一的国际化资源标识符 (IRI) 指定文件或文件夹的完整路径:

hdfs:/path_to_file
hdfs:///path_to_file
hdfs://hostname/path_to_file

hostname 是主机或服务器的名称,path_to_file 是文件或文件夹的路径。指定 hostname 是一个可选操作。当您不指定 hostname 时,Hadoop 使用与 MATLAB 中的 Hadoop 分布式文件系统 (HDFS) 安装相关联的默认主机名称。

例如,以下两个命令都在主机 myserver 上的文件夹 data 中为文件 file1.txt 创建一个数据存储:

  • ds = datastore('hdfs:///data/file1.txt') 
  • ds = datastore('hdfs://myserver/data/file1.txt') 

如果指定了 hostname,则它必须对应于由 Hadoop 群集的 Hadoop XML 配置文件中的 fs.default.name 属性定义的名称节点。

您还可以在位置中包括端口号。例如,此位置指定了一台名为 myserver 的主机,端口号为 7867,在其文件夹 data 中包含文件 file1.txt

'hdfs://myserver:7867/data/file1.txt'

指定的端口号必须与在 HDFS 配置中设置的端口号相匹配。

设置 Hadoop 环境变量

在从 HDFS 读取数据之前,先使用 setenv 函数将适当的环境变量设置为安装 Hadoop 的文件夹。此文件夹必须可从当前计算机访问。

  • 仅使用 Hadoop v1 - 设置 HADOOP_HOME 环境变量。

  • 仅使用 Hadoop v2 - 设置 HADOOP_PREFIX 环境变量。

  • 如果同时使用 Hadoop v1 和 Hadoop v2,或者未设置 HADOOP_HOMEHADOOP_PREFIX 环境变量,则设置 MATLAB_HADOOP_INSTALL 环境变量。

例如,使用此命令设置 HADOOP_HOME 环境变量。hadoop-folder 是安装 Hadoop 的文件夹,/mypath/ 是该文件夹的路径。

setenv('HADOOP_HOME','/mypath/hadoop-folder');

Hortonworks 或 Cloudera 上的 HDFS 数据

如果您当前的计算机可以访问 Hortonworks 或 Cloudera™ 上的 HDFS 数据,则无需设置 HADOOP_HOMEHADOOP_PREFIX 环境变量。MATLAB 会在使用 Hortonworks 或 Cloudera 应用程序边缘节点时自动分配这些环境变量。

防止从内存中清除代码

当从 HDFS 读取时或在本地读取序列文件时,datastore 函数调用 javaaddpath 命令。此命令将执行以下操作:

  • 清除动态类路径中的文件定义的所有 Java® 类的定义

  • 从基础工作区中删除所有全局变量和变量

  • 从内存中删除所有编译的脚本、函数和 MEX 函数

要防止清除持久性变量、代码文件或 MEX 文件,请使用 mlock 函数。

另请参阅

| | | | | |