リモート データの操作
MATLAB® 関数およびオブジェクト (ファイル I/O 関数および一部の datastore オブジェクトなど) を使用して、リモートの場所からデータを読み取りおよび書き込みできます。以下の例では、次のクラウド ストレージ プラットフォームでリモートの場所からセットアップ、読み取り、および書き込みする方法を説明します。
Amazon S3™ (Simple Storage Service)
Azure® Blob Storage (旧 Windows Azure® Storage Blob (WASB))
Hadoop® 分散ファイル システム (HDFS™)
Amazon S3
MATLAB では、Amazon S3 をアマゾン ウェブ サービス提供のオンライン ファイル ストレージ ウェブ サービスとして使用できます。データの場所を指定する場合は、次の形式の Uniform Resource Locator (URL) を使用してファイルまたはフォルダーへの絶対パスを指定しなければなりません。
s3://bucketname/path_to_file
bucketname
はコンテナーの名前、path_to_file
はファイルまたはフォルダーへのパスです。
Amazon S3 は、Web サービス インターフェイス経由でデータ ストレージを提供します。"バケット" をコンテナーとして使用して、オブジェクトを Amazon S3 に格納できます。
アクセスの設定
Amazon S3 のリモート データを操作するには、まずアクセスを設定しなければなりません。
アマゾン ウェブ サービス (AWS) のルート アカウントの新規登録を行います。「アマゾン ウェブ サービス: アカウント」を参照してください。
AWS のルート アカウントを使用して、IAM (Identity and Access Management) ユーザーを作成します。AWS アカウント内での IAM ユーザーの作成を参照してください。
アクセス キーを生成して、アクセス キー ID とシークレット アクセス キーを受け取ります。IAM ユーザーのアクセスキーの管理を参照してください。
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® フェデレーション認証などの一時的なセキュリティ資格情報を使用している場合に、セッション トークンを指定します。
Amazon S3 の場所が公開アクセスできるようになっている場合は、環境変数の設定や認証の構成は不要です。公開アクセスを構成する方法の詳細については、Amazon S3 ストレージへのパブリック アクセスのブロックを参照してください。
Amazon S3 では、複数のユーザーが 1 つのアカウントにアクセスすることもできます。Amazon S3 へのアクセスの詳細については、AWS Identity and Access Management (IAM) を参照してください。
Parallel Computing Toolbox™ を使用している場合は、クラスターが S3 サービスにアクセスするよう設定されていることを確認しなければなりません。EnvironmentVariables
を parpool
、batch
、または createJob
内で設定するか、クラスター プロファイル マネージャーで設定することにより、クライアント環境変数をクラスター上のワーカーにコピーできます。
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 Storage
MATLAB では、オンライン ファイル ストレージに Azure Blob Storage を使用できます。データの場所を指定する場合は、次の形式の Uniform Resource Locator (URL) を使用してファイルまたはフォルダーへの絶対パスを指定しなければなりません。
wasbs://container@account/path_to_file/file.ext
container@account
はコンテナーの名前、path_to_file
はファイルまたはフォルダーへのパスです。
Azure は、Web サービス インターフェイス経由でデータ ストレージを提供します。"ブロブ" を使用して、データ ファイルを Azure に保存できます。詳細については、Azure とはを参照してください。
アクセスの設定
Azure ストレージ内のリモート データを操作するには、まずアクセスを設定しなければなりません。
Microsoft Azure アカウントの新規登録を行います。Microsoft Azure アカウントを参照してください。
setenv
を使用して以下の 2 つの環境変数のうちのどちらか 1 つのみを設定し、認証の詳細をセットアップします。MW_WASB_SAS_TOKEN
— 共有アクセス シグネチャ (SAS) による認証SAS を取得します。詳細については、Storage Explorer を使用して Azure Blob Storage リソースを管理するで、「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 またはエクスプローラーから生成された有効な SAS トークンに設定しなければなりません。
MW_WASB_SECRET_KEY
— アカウントの 2 つの秘密鍵の 1 つを使用した認証各ストレージ アカウントには 2 つの秘密鍵があり、それを使用した管理者権限アクセスが可能です。環境変数
MW_WASB_SECRET_KEY
を設定することにより、SAS トークンを作成しなくても、これと同じアクセス権を MATLAB に付与できます。以下に例を示します。setenv MW_WASB_SECRET_KEY '1234567890ABCDEF1234567890ABCDEF1234567890ABCDEF'
Azure ストレージの場所が公開アクセスできるようになっている場合は、環境変数の設定や認証の構成は不要です。Azure ストレージへの公開アクセスの詳細については、匿名パブリック読み取りアクセスを構成するを参照してください。
Azure ストレージでは、複数のユーザーが 1 つのアカウントにアクセスすることもできます。複数のユーザーの管理の詳細については、Azure Active Directory の ID およびアクセス管理の運用リファレンス ガイドを参照してください。
Parallel Computing Toolbox を使用している場合は、EnvironmentVariables
を parpool
、batch
、または createJob
内で設定するか、クラスター プロファイル マネージャーで設定することにより、クライアント環境変数をクラスター上のワーカーにコピーしなければなりません。
詳細については、Azure HDInsight クラスターで Azure Storage を使用するを参照してください。
Azure からのデータの読み取り
Azure Blob Storage の場所からデータを読み取るには、次の構文を使用して場所を指定します。
wasbs://container@account/path_to_file/file.ext
container@account
はコンテナーの名前、path_to_file
はファイルまたはフォルダーへのパスです。
たとえば、airlinesmall.csv
というファイルが /airline
というフォルダーの中にあり、このフォルダーがテスト ストレージ アカウント wasbs://blobContainer@storageAccount.blob.core.windows.net/
にある場合、次を使用してデータストアを作成できます。
location = 'wasbs://blobContainer@storageAccount.blob.core.windows.net/airline/airlinesmall.csv';
ds = tabularTextDatastore(location, 'TreatAsMissing', 'NA', ... 'SelectedVariableNames', {'ArrDelay'});
直接の読み取り、mapreduce
、tall 配列、深層学習など、データストアでサポートされるすべての計算に Azure を使用できます。たとえば、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) をオンライン ファイル ストレージ ウェブ サービスとして使用できます。データの場所を指定する場合は、次のいずれかの形式の Uniform Resource Locator (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
プロパティで定義された namenode に一致しなければなりません。
オプションで、ポート番号を含めることもできます。たとえば、この場所は、data
というフォルダーのファイル file1.txt
を含む、ポート 7867
の myserver
というホストを指定します。
'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
の環境変数を設定する必要はありません。Hortonworks または CLOUDERA アプリケーションのエッジ ノードを使用するとき、MATLAB はこれらの環境変数を自動的に割り当てます。
メモリからコードがクリアされるのを回避する
HDFS から読み取る場合やシーケンス ファイルをローカルに読み取る場合、関数 datastore
は javaaddpath
コマンドを呼び出します。このコマンドは以下を実行します。
動的クラス パス上のファイルによって定義されるすべての Java® クラスの定義をクリアする
すべてのグローバル変数および基本ワークスペースからの変数を削除する
すべてのコンパイルされているスクリプト、関数、MEX 関数をメモリから削除する
永続変数、コード ファイルまたは MEX ファイルがクリアされないようにするには、関数 mlock
を使用します。
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);
参考
datastore
| tabularTextDatastore
| write
| imageDatastore
| imread
| imshow
| javaaddpath
| mlock
| setenv
関連するトピック
- Hadoop シーケンス ファイルの読み取りと解析
- AWS での深層学習データの処理 (Deep Learning Toolbox)