处理远程数据
您可以使用 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 中的远程数据,必须先设置访问权限:
注册一个 amazon web services (aws) 根帐户。请参阅 。
使用 aws 根帐户,创建 iam(身份识别和访问管理)用户。请参阅。
生成访问密钥以接收访问密钥 id 和秘密访问密钥。请参阅。
使用 上提供的 aws 命令行界面工具,为机器配置 aws 访问密钥 id、访问密钥和地区。或者,通过使用
setenv
来直接设置环境变量:aws_access_key_id
和aws_secret_access_key
- 对 amazon s3 服务进行身份验证并启用服务。(在步骤 3 中生成了这对访问密钥变量。)aws_default_region
(可选)- 选择桶的地理区域。此环境变量的值通常自动确定,但桶所有者可能要求手动设置此变量的值。aws_session_token
(可选)- 如果您使用的是临时安全凭据,例如 aws® 联合身份验证,请指定会话令牌。
如果正在使用的是 parallel computing toolbox™,则必须确保已配置集群以访问 s3 服务。可通过在 parpool
、batch
、createjob
中或在 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 存储中的远程数据,必须先设置访问权限:
注册一个 microsoft azure 帐户,请参阅 。
使用
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,则必须通过在 parpool
、batch
、createjob
中或 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_home
和hadoop_prefix
环境变量,则设置matlab_hadoop_install
环境变量。
例如,使用此命令设置 hadoop_home
环境变量。hadoop-folder
是安装 hadoop 的文件夹,/mypath/
是该文件夹的路径。
setenv('hadoop_home','/mypath/hadoop-folder');
hortonworks 或 cloudera 上的 hdfs 数据
如果您当前的计算机可以访问 hortonworks 或 cloudera® 上的 hdfs 数据,则无需设置 hadoop_home
或 hadoop_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)