ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

MATLAB中处理远程数据

2020-12-26 09:02:56  阅读:231  来源: 互联网

标签:存储 处理 AWS 远程 Amazon MATLAB Azure tall ds


目录

处理远程数据

Amazon S3

Microsoft Azure Storage Blob

Hadoop 分布式文件系统


处理远程数据

在 MATLAB® 中,可以与远程位置进行双向数据读写,例如 Amazon S3™(简单存储服务)、Microsoft® Azure® Storage Blob 和 Hadoop® 分布式文件系统 (HDFS™) 中的云存储。

可以使用数据存储对象访问远程数据。使用数据存储检查来自桌面版本 MATLAB 的部分数据。然后,在本地建立代码原型后,可以再将其扩展到群集或云。扩展提高了执行效率,因为在与数据相同的位置运行大型计算更为高效。要将数据写入到远程位置,可以对 tall 数组或分布式数组使用write函数。

Amazon S3

MATLAB 允许使用 Amazon Web Services 提供的 Amazon S3 作为在线文件存储 Web 服务。可以将 Amazon S3 上存储的数据与数据存储对象(例如ImageDatastore、FileDatastore、FileDatastore、SpreadsheetDatastore或TabularTextDatastore)结合使用。当指定数据位置时,必须使用以下格式的统一资源定位器 (URL) 指定文件或文件夹的完整路径:

s3://bucketname/path_to_file

bucketname是容器的名称,path_to_file 是文件或文件夹的路径。Amazon S3通过 Web 服务接口提供数据存储。可以在 Amazon S3 中使用作为容器来存储对象。

设置访问权限

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

  1. 注册一个 Amazon Web Services (AWS) 根帐户。可以参考Amazon Web Services:账户。

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

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

  4. 使用 https://aws.amazon.com/cli/ 上提供的 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 读取数据

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

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

要将数据写入到 Amazon S3,请对分布式数组或 tall 数组调用 write 函数,并提供云存储中的文件夹的完整路径。以下示例说明如何将表格数据从 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);

Microsoft Azure Storage Blob

MATLAB 允许使用 Windows Azure® Storage Blob (WASB) 作为 Microsoft 提供的在线文件存储 Web 服务。您可以将 Azure 上存储的数据与数据存储对象(例如 ImageDatastoreFileDatastoreSpreadsheetDatastore 或 TabularTextDatastore)结合使用。当指定数据位置时,必须使用以下格式的统一资源定位器 (URL) 指定文件或文件夹的完整路径:

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

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

Azure通过 Web 服务接口提供数据存储。可使用 blob 来存储 Azure 中的数据文件。有关详细信息,可参考Azure简介。

设置访问权限

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

  1. 注册一个 Microsoft Azure 帐户,参考Microsoft Azure账户。

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

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

获得 SAS。有关详细信息,参考使用存储资源管理器管理Azure Blob存储资源中的“获取 Blob 容器的 SAS”部分。

在 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'

如果使用 Parallel Computing Toolbox,则必须通过在 parpool、batch、createJob 中或 Cluster Profile Manager 中设置 EnvironmentVariables,将客户端环境变量复制到群集上的工作进程。有关详细信息,可以参考将Azure存储与Azure HDInsight群集配合使用。

从 Azure 读取数据

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

要将数据写入到 Azure,请对分布式数组或 tall 数组调用 write 函数,并提供云存储中的文件夹的完整路径。以下示例说明如何将表格数据从 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 分布式文件系统

指定数据的位置

也可以使用 tabularTextDatastore 函数为驻留在 Hadoop 分布式文件系统 (HDFS) 上的文本文件或序列文件集合创建数据存储。当指定数据位置时,必须使用以下格式之一的统一资源定位器 (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 文件,请使用mlock函数。

将数据写入到 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);

 

标签:存储,处理,AWS,远程,Amazon,MATLAB,Azure,tall,ds
来源: https://blog.csdn.net/jk_101/article/details/111690582

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有