处理远程数据 -凯发k8网页登录

main content

处理远程数据

您可以使用 matlab® 函数和对象(例如文件 i/o 函数和一些数据存储对象)从远程位置读写数据。这些示例说明如何设置、读取和写入以下云存储平台上的远程位置:

  • amazon s3™(简单存储服务)

  • azure® blob 存储(以前称为 windows azure® storage blob (wasb))

  • hadoop® 分布式文件系统 (hdfs™)

amazon s3

matlab 允许使用 amazon web services 提供的 amazon s3 作为在线文件存储 web 服务。当指定数据位置时,必须使用以下格式的统一资源定位器 (url) 指定文件或文件夹的完整路径:

s3://bucketname/path_to_file

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

通过 web 服务接口提供数据存储。您可以在 amazon s3 中使用作为容器来存储对象。

设置访问权限

要处理 amazon s3 中的远程数据,必须先设置访问权限:

  1. 注册一个 amazon web services (aws) 根帐户。请参阅 。

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

  3. 生成访问密钥以接收访问密钥 id 和秘密访问密钥。请参阅。

  4. 使用 上提供的 aws 命令行界面工具,为机器配置 aws 访问密钥 id、访问密钥和地区。或者,通过使用 setenv 来直接设置环境变量:

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

    • aws_default_region(可选)- 选择桶的地理区域。此环境变量的值通常自动确定,但桶所有者可能要求手动设置此变量的值。

    • aws_session_token(可选)- 如果您使用的是临时安全凭据,例如 aws® 联合身份验证,请指定会话令牌。

如果正在使用的是 parallel computing toolbox™,则必须确保已配置集群以访问 s3 服务。可通过在 parpoolbatchcreatejob 中或在 cluster profile manager 中设置 environmentvariables,将客户端环境变量复制到集群上的工作进程。

amazon s3 读取数据

以下示例说明如何使用 imagedatastore 对象从 amazon s3 中读取指定的图像,然后将图像显示到屏幕上。

setenv('aws_access_key_id', 'your_aws_access_key_id'); 
setenv('aws_secret_access_key', 'your_aws_secret_access_key');
ds = imagedatastore('s3://bucketname/image_datastore/jpegfiles', ...
  'includesubfolders', true, 'labelsource', 'foldernames'); 
img = ds.readimage(1);
imshow(img)

将数据写入到 amazon s3

以下示例说明如何使用 tabulartextdatastore 对象将表格数据从 amazon s3 读入到 tall 数组中,通过移除缺失的条目并排序进行预处理,然后将其写回到 amazon s3。

setenv('aws_access_key_id', 'your_aws_access_key_id');
setenv('aws_secret_access_key', 'your_aws_secret_access_key');
ds = tabulartextdatastore('s3://bucketname/dataset/airlinesmall.csv', ...
  'treatasmissing', 'na', 'selectedvariablenames', {'arrdelay'});
tt = tall(ds);
tt = sortrows(rmmissing(tt));
write('s3://bucketname/preprocesseddata/',tt);

要读回 tall 数据,请使用 datastore 函数。

ds = datastore('s3://bucketname/preprocesseddata/');
tt = tall(ds);

azure blob 存储

matlab 允许您使用 azure blob 存储进行在线文件存储。当指定数据位置时,必须使用以下格式的统一资源定位器 (url) 指定文件或文件夹的完整路径:

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

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

通过 web 服务接口提供数据存储。可使用 blob 来存储 azure 中的数据文件。有关详细信息,请参阅。

设置访问权限

要处理 azure 存储中的远程数据,必须先设置访问权限:

  1. 注册一个 microsoft azure 帐户,请参阅 。

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

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

      获得 sas。有关详细信息,请参阅中的“获取 blob 容器的 sas”部分。

      在 matlab 中,将 mw_wasb_sas_token 设置为 sas 查询字符串。例如,

      setenv mw_wasb_sas_token '?st=2017-04-11t09:45:00z&se=2017-05-12t09:45:00z&sp=rl&sv=2015-12-11&sr=c&sig=e12eh4crclilp3tw+ardyyr8rrumw45wbxhwpmzsrce='

      您必须将此字符串设置为从 azure storage web ui 或 explorer 生成的有效 sas 令牌。

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

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

      setenv mw_wasb_secret_key '1234567890abcdef1234567890abcdef1234567890abcdef'

如果您使用 parallel computing toolbox,则必须通过在 parpoolbatchcreatejob 中或 cluster profile manager 中设置 environmentvariables,将客户端环境变量复制到集群上的工作进程。

有关详细信息,请参阅。

azure 读取数据

要从 azure blob 存储位置读取数据,请使用以下语法指定位置:

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 进行数据存储支持的所有计算,包括直接读取、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)

将数据写入到 azure

以下示例说明如何使用 tabulartextdatastore 对象将表格数据从 azure 读入到 tall 数组,通过移除缺失的条目并排序进行预处理,然后将其写回到 azure。

setenv('mw_wasb_sas_token', 'your_wasb_sas_token');  
ds = tabulartextdatastore('wasbs://yourcontainer@youraccount.blob.core.windows.net/dataset/airlinesmall.csv', ...
  'treatasmissing', 'na', 'selectedvariablenames', {'arrdelay'});
tt = tall(ds);
tt = sortrows(rmmissing(tt));
write('wasbs://yourcontainer@youraccount.blob.core.windows.net/preprocesseddata/',tt);

要读回 tall 数据,请使用 datastore 函数。

ds = datastore('wasbs://yourcontainer@youraccount.blob.core.windows.net/preprocesseddata/');
tt = tall(ds);

hadoop 分布式文件系统

指定数据的位置

matlab 允许将 hadoop 分布式文件系统 (hdfs) 用作在线文件存储 web 服务。当指定数据位置时,必须使用以下格式之一的统一资源定位器 (url) 指定文件或文件夹的完整路径:

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 = tabulartextdatastore('hdfs:///data/file1.txt') 
  • ds = tabulartextdatastore('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 文件,请使用 函数。

将数据写入到 hdfs

此示例说明如何使用 tabulartextdatastore 对象将数据写入 hdfs 位置。使用 write 函数将 tall 数组和分布式数组写入到 hadoop 分布式文件系统。当对分布式数组或 tall 数组调用此函数时,必须指定一个 hdfs 文件夹的完整路径。以下示例说明如何将表格数据从 hdfs 读入到 tall 数组,通过移除缺失的条目并排序进行预处理,然后将其写回到 hdfs。

ds = tabulartextdatastore('hdfs://myserver/some/path/dataset/airlinesmall.csv', ...
  'treatasmissing', 'na', 'selectedvariablenames', {'arrdelay'});
tt = tall(ds);
tt = sortrows(rmmissing(tt));
write('hdfs://myserver/some/path/preprocesseddata/',tt);

要读回 tall 数据,请使用 datastore 函数。

ds = datastore('hdfs://myserver/some/path/preprocesseddata/');
tt = tall(ds);

另请参阅

| | | | | | | |

相关主题

  • (deep learning toolbox)
网站地图