メインコンテンツ

リモート データの操作

R2026b

MATLAB® 関数およびオブジェクト (ファイル I/O 関数および一部の datastore オブジェクトなど) を使用して、リモートの場所からデータを読み取りおよび書き込みできます。次の例では、以下のリモートの場所でセットアップ、読み取り、および書き込みを行う方法を説明します。

  • インターネット URL (データのインポートのみ)

  • Amazon S3™ (Simple Storage Service)

  • Azure® Blob Storage (旧 Windows Azure® Storage Blob (WASB))

  • Hadoop® 分散ファイル システム (HDFS™)

インターネット URL

R2024b 以降

MATLAB では、プロトコル タイプ http:// または https:// を使用してインターネット Uniform Resource Locator (URL) からデータを読み取ることができます。インターネット URL からデータを読み取るために追加の設定は必要ありません。インターネット URL へのデータの書き込みはサポートされていません。次のコードでは、インターネット URL からデータを table として読み取る方法を示しています。

T = readtable("https://domain/path_to_file");

MATLAB では、認証が必要なインターネット URL はサポートされていません。MATLAB Online™ では Microsoft® OneDrive™ ファイルおよびフォルダーに関連付けられたインターネット URL はサポートされていますが、MATLAB のインストール バージョンではローカル OneDrive ファイルのみがサポートされています。

# や ? などの一部の文字は、区切り記号として予約されているため、URL に含めることができません。予約文字の詳細については、Internet Engineering Task Force (IETF) の Web サイトで Reserved Characters を参照してください。

Amazon S3

MATLAB では、Amazon S3 をアマゾン ウェブ サービス提供のオンライン ファイル ストレージ ウェブ サービスとして使用できます。データの場所を指定する場合は、次の形式の Uniform Resource Locator (URL) を使用してファイルまたはフォルダーへの絶対パスを指定しなければなりません。

s3://bucketname/path_to_file

次の形式の HTTPS URL を使用して、場所を指定することもできます。

https://bucketname/path_to_file

bucketname はコンテナーの名前、path_to_file はファイルまたはフォルダーへのパスです。

Amazon S3 は、Web サービス インターフェイス経由でデータ ストレージを提供します。"バケット" をコンテナーとして使用して、オブジェクトを Amazon S3 に格納できます。

アクセスの設定

Amazon S3 のリモート データを操作するには、アクセスを設定しなければなりません。

アクセスを設定するには、最初に AWS アカウントと資格情報を次の手順で作成します。

  1. アマゾン ウェブ サービス (AWS) のルート アカウントの新規登録を行います。「アマゾン ウェブ サービス: アカウント」を参照してください。

  2. AWS のルート アカウントを使用して、IAM (Identity and Access Management) ユーザーを作成します。AWS アカウント内での IAM ユーザーの作成を参照してください。

  3. アクセス キーを生成して、アクセス キー ID とシークレット アクセス キーを受け取ります。IAM ユーザーのアクセスキーの管理を参照してください。

Amazon S3 は、同一のアカウントにアクセスする複数のユーザーをサポートします。詳細については、AWS Identity and Access Management (IAM) を参照してください。

AWS 資格情報を作成したら、次の手順に沿って、MATLAB で Amazon S3 接続を作成します。 (R2026b 以降)

  1. [ホーム] タブの [環境] セクションにある [接続] ボタンをクリックして [接続] パネルを開きます。

  2. [使用可能な接続] セクションで、[Amazon S3] の横にある [追加] ボタンをクリックします。

  3. バケット名、AWS アクセス キー ID、AWS シークレット アクセス キーを入力します。

  4. オプションで、セッション トークン (一時的なセキュリティ資格情報を使用している場合)、エンドポイント、またはバケットの地理的リージョンを指定します。

Add Amazon S3 Connection dialog box with text boxes for specifying a connection name, bucket name, access key ID, secret access key, session token, endpoint, and region

R2026b より前: 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® フェデレーション認証などの一時的なセキュリティ資格情報を使用している場合に、セッション トークンを指定します。

構成データなどの機密情報は、MATLAB Vault または .env ファイルに格納できます。詳細については、Keep Sensitive Information Out of Codeを参照してください。

Amazon S3 の場所が公開アクセスできるようになっている場合は、環境変数の設定や認証の構成は不要です。公開アクセスを構成する方法の詳細については、Amazon S3 ストレージへのパブリック アクセスのブロックを参照してください。

Parallel Computing Toolbox™ を使用している場合は、クラスターが S3 サービスにアクセスするよう設定されていることを確認しなければなりません。EnvironmentVariables を parpool、batch、または createJob 内で設定するか、クラスター プロファイル マネージャーで設定することにより、クライアント環境変数をクラスター上のワーカーにコピーできます。

Amazon S3 からのデータの読み取り

次の例では、ImageDatastore オブジェクトを使用して指定したイメージを Amazon S3 から読み取り、そのイメージを画面に表示する方法を説明します。

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 に書き戻す方法を説明します。

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

次の形式の HTTPS URL を使用して、場所を指定することもできます。

https://account_name.blob.core.windows.net/container_name/path_to_file/file.ext

container@account はコンテナーの名前、path_to_file はファイルまたはフォルダーへのパスです。

Azure は、Web サービス インターフェイス経由でデータ ストレージを提供します。"ブロブ" を使用して、データ ファイルを Azure に保存できます。詳細については、Azure とはを参照してください。

アクセスの設定

Azure ストレージ内のリモート データを操作するには、まずアクセスを設定しなければなりません。

  1. Microsoft Azure アカウントの新規登録を行います。Microsoft Azure アカウントを参照してください。

  2. 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 を使用するを参照してください。

構成データなどの機密情報は、MATLAB Vault または .env ファイルに格納できます。詳細については、Keep Sensitive Information Out of Codeを参照してください。

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');

構成データなどの機密情報は、MATLAB Vault または .env ファイルに格納できます。詳細については、Keep Sensitive Information Out of Codeを参照してください。

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);

参考

| | | | | | | |

トピック