クラウドでのビッグデータの処理
この例では、クラウド上の大規模データ セットにアクセスし、ビッグ データ向けの MATLAB® の機能を使用してクラウド クラスター上で処理する方法を説明します。
以下の方法について説明します。
Amazon Cloud で公開されている大規模データセットにアクセスする。
このデータセットの興味深いサブセットを見つけて選択する。
データ ストア、tall 配列および Parallel Computing Toolbox を使用して、このサブセットを 20 分以内に処理する。
この例の公開データセットは、Wind Integration National Dataset Toolkit (WIND Toolkit) [1]、[2]、[3]、[4] の一部です。詳細については、Wind Integration National Dataset Toolkit を参照してください。
要件
この例を実行するには、Amazon AWS のクラスターへのアクセスを設定しなければなりません。MATLAB では、MATLAB デスクトップから直接 Amazon AWS 上にクラスターを作成できます。[ホーム] タブの [並列] メニューで [クラスターの作成と管理] を選択します。クラスター プロファイル マネージャーで、[クラウド クラスターの作成] をクリックします。あるいは、MathWorks Cloud Center を使用して Amazon AWS の計算クラスターを作成してアクセスできます。詳細については、Getting Started with Cloud Center を参照してください。
リモート データへのアクセスの設定
この例で使用するデータセットは Techno-Economic WIND Toolkit です。これには、米国本土における 2007 年から 2013 年までの、風力発電の推定値と予測値、および大気に関する変数のデータが 2 TB (テラバイト) 含まれています。
Techno-Economic WIND Toolkit は、Amazon Web Services の s3://nrel-pds-wtk/wtk-techno-economic/pywtk-data の場所から利用できます。次の 2 つのデータセットがあります。
s3://nrel-pds-wtk/wtk-techno-economic/pywtk-data/met_data - 計量データ
s3://nrel-pds-wtk/wtk-techno-economic/pywtk-data/fcst_data - 予測データ
Amazon S3 のリモート データを処理するには、AWS 認証情報の環境変数を定義しなければなりません。リモート データへのアクセスを設定する方法の詳細については、リモート データの操作を参照してください。次のコードの YOUR_AWS_ACCESS_KEY_ID
および YOUR_AWS_SECRET_ACCESS_KEY
をお使いの Amazon AWS 認証情報に置き換えてください。一時的な AWS セキュリティ資格情報を使用している場合は、環境変数 AWS_SESSION_TOKEN
も設定します。
setenv("AWS_ACCESS_KEY_ID","YOUR_AWS_ACCESS_KEY_ID"); setenv("AWS_SECRET_ACCESS_KEY","YOUR_AWS_SECRET_ACCESS_KEY");
このデータセットでは地理的地域を指定する必要があるため、対応する環境変数を設定しなければなりません。
setenv("AWS_DEFAULT_REGION","us-west-2");
クラスター内のワーカーにリモート データへのアクセス権を付与するには、クラスター プロファイルの EnvironmentVariables
プロパティにこれらの環境変数名を追加します。クラスター プロファイルのプロパティを編集するには、[並列]、[クラスターの作成と管理] のクラスター プロファイル マネージャーを使用します。詳細については、ワーカー上での環境変数の設定を参照してください。
ビッグ データのサブセットを見つける
2 TB のデータセットは非常に大規模です。この例では、解析対象とするデータセットのサブセットを見つける方法を説明します。この例では、マサチューセッツ州のデータに着目します。
まず、マサチューセッツ州内の測定ステーションを識別する ID を取得し、その測定情報を含むファイルを特定します。各ステーションのメタデータ情報は three_tier_site_metadata.csv
というファイルに含まれています。このデータは小さく、メモリに納まるため、MATLAB クライアントから readtable
でアクセスできます。関数 readtable
を使用することで、特別なコードを記述せずに S3 バケットの公開データに直接アクセスできます。
tMetadata = readtable("s3://nrel-pds-wtk/wtk-techno-economic/pywtk-data/three_tier_site_metadata.csv",... "ReadVariableNames",true,"TextType","string");
このデータセットにリストされている州を調べるために、unique
を使用します。
states = unique(tMetadata.state)
states = 50×1 string array
""
"Alabama"
"Arizona"
"Arkansas"
"California"
"Colorado"
"Connecticut"
"Delaware"
"District of Columbia"
"Florida"
"Georgia"
"Idaho"
"Illinois"
"Indiana"
"Iowa"
"Kansas"
"Kentucky"
"Louisiana"
"Maine"
"Maryland"
"Massachusetts"
"Michigan"
"Minnesota"
"Mississippi"
"Missouri"
"Montana"
"Nebraska"
"Nevada"
"New Hampshire"
"New Jersey"
"New Mexico"
"New York"
"North Carolina"
"North Dakota"
"Ohio"
"Oklahoma"
"Oregon"
"Pennsylvania"
"Rhode Island"
"South Carolina"
"South Dakota"
"Tennessee"
"Texas"
"Utah"
"Vermont"
"Virginia"
"Washington"
"West Virginia"
"Wisconsin"
"Wyoming"
マサチューセッツ州内にあるステーションを特定します。
index = tMetadata.state == "Massachusetts"; siteId = tMetadata{index,"site_id"};
特定のステーションのデータは、s3://nrel-pds-wtk/wtk-techno-economic/pywtk-data/met_data/folder/site_id.nc
の命名規則に従うファイルに含まれています。ここで、folder
は site_id/500
以下の最も近い整数です。この命名規則を使用して、各ステーションのファイルの場所を構成します。
folder = floor(siteId/500);
fileLocations = compose("s3://nrel-pds-wtk/wtk-techno-economic/pywtk-data/met_data/%d/%d.nc",folder,siteId);
ビッグ データの処理
データ ストアおよび tall 配列を使用して、メモリに納まらないデータにアクセスし、処理できます。ビッグ データの計算を実行するときに、MATLAB は必要に応じてリモート データの小さな部分にアクセスするため、一度にデータセット全体をダウンロードする必要はありません。tall 配列の場合、MATLAB は、メモリに納めて処理できる小さなブロックにデータを自動的に分割します。
Parallel Computing Toolbox をお持ちの場合、MATLAB は多くのブロックを並列処理できます。並列化により、複数のローカル ワーカーをもつ 1 台のデスクトップで解析を実行したり、より多くのリソースをもつクラスターにスケール アップしたりできます。データと同じクラウド サービス内のクラスターを使用すると、データがクラウド内に留まるため、データ転送時間の向上するメリットが得られます。また、データをクラウド内に保持すると、コストの面でも有利です。この例は Amazon AWS の c4.8xlarge マシン上の 18 個のワーカーを使用して、20 分未満で実行されました。
クラスター内で並列プールを使用すると、MATLAB はクラスター内のワーカーを使用してこのデータを処理します。クラスター内に並列プールを作成します。次のコードでは、代わりにお使いのクラスター プロファイルの名前を使用してください。並列ワーカーはスクリプト内の補助関数にアクセスする必要があるため、プールにスクリプトを付加します。
p = parpool("myAWSCluster");
Starting parallel pool (parpool) using the 'myAWSCluster' profile ... connected to 18 workers.
addAttachedFiles(p,mfilename("fullpath"));
マサチューセッツ州内のステーションの計量データをもつデータ ストアを作成します。データは Network Common Data Form (NetCDF) ファイルの形式になっているため、カスタム読み取り関数を使用して解釈しなければなりません。この例で、この関数の名前は ncReader
であり、NetCDF データを timetable に読み込みます。このスクリプトの最後でその内容を確認できます。
dsMetrology = fileDatastore(fileLocations,"ReadFcn",@ncReader,"UniformRead",true);
データ ストアの計量データをもつ tall timetable を作成します。
ttMetrology = tall(dsMetrology)
ttMetrology = M×6 tall timetable Time wind_speed wind_direction power density temperature pressure ____________________ __________ ______________ ______ _______ ___________ ________ 01-Jan-2007 00:00:00 5.905 189.35 3.3254 1.2374 269.74 97963 01-Jan-2007 00:05:00 5.8898 188.77 3.2988 1.2376 269.73 97959 01-Jan-2007 00:10:00 5.9447 187.85 3.396 1.2376 269.71 97960 01-Jan-2007 00:15:00 6.0362 187.05 3.5574 1.2376 269.68 97961 01-Jan-2007 00:20:00 6.1156 186.49 3.6973 1.2375 269.83 97958 01-Jan-2007 00:25:00 6.2133 185.71 3.8698 1.2376 270.03 97952 01-Jan-2007 00:30:00 6.3232 184.29 4.0812 1.2379 270.19 97955 01-Jan-2007 00:35:00 6.4331 182.51 4.3382 1.2382 270.3 97957 : : : : : : : : : : : : : :
groupsummary
を使用して月次平均温度を取得し、得られた tall table を並べ替えます。パフォーマンスの観点から、MATLAB はデータが必要になるまでほとんどの tall 演算を先送りにします。この例では、データをプロットすることで先送りされた計算の評価がトリガーされます。
meanTemperature = groupsummary(ttMetrology,"Time","month","mean","temperature"); meanTemperature = sortrows(meanTemperature);
結果をプロットします。
figure; plot(meanTemperature.mean_temperature,"*-"); ylim([260 300]); xlim([1 12*7+1]); xticks(1:12:12*7+1); xticklabels(["2007","2008","2009","2010","2011","2012","2013","2014"]); title("Average Temperature in Massachusetts 2007-2013"); xlabel("Year"); ylabel("Temperature (K)")
多くの MATLAB 関数が tall 配列をサポートしているため、慣れ親しんだ構文を使用して大規模データセットに様々な演算を実行できます。サポートされている関数の詳細については、サポート関数を参照してください。
カスタム読み取り関数の定義
Techno-Economic WIND Toolkit のデータは NetCDF ファイルに保存されています。このデータを timetable に読み込むカスタム読み取り関数を定義します。NetCDF ファイルの読み取りの詳細については、NetCDF ファイルを参照してください。
function t = ncReader(filename) % NCREADER Read NetCDF File (.nc), extract data set and save as a timetable % Get information about NetCDF data source fileInfo = ncinfo(filename); % Extract variable names and datatypes varNames = string({fileInfo.Variables.Name}); varTypes = string({fileInfo.Variables.Datatype}); % Transform variable names into valid names for table variables if any(startsWith(varNames,["4","6"])) strVarNames = replace(varNames,["4","6"],["four","six"]); else strVarNames = varNames; end % Extract the length of each variable fileLength = fileInfo.Dimensions.Length; % Extract initial timestamp, sample period and create the time axis tAttributes = struct2table(fileInfo.Attributes); startTime = datetime(cell2mat(tAttributes.Value(contains(tAttributes.Name,"start_time"))),"ConvertFrom","epochtime"); samplePeriod = seconds(cell2mat(tAttributes.Value(contains(tAttributes.Name,"sample_period")))); % Create the output timetable numVars = numel(strVarNames); tableSize = [fileLength numVars]; t = timetable('Size',tableSize,'VariableTypes',varTypes,'VariableNames',strVarNames,'TimeStep',samplePeriod,'StartTime',startTime); % Fill in the timetable with variable data for k = 1:numVars t(:,k) = table(ncread(filename,varNames{k})); end end
参考文献
[1] Draxl, C., B. M. Hodge, A. Clifton, and J. McCaa.Overview and Meteorological Validation of the Wind Integration National Dataset Toolkit (Technical Report, NREL/TP-5000-61740).Golden, CO:National Renewable Energy Laboratory, 2015.
[2] Draxl, C., B. M. Hodge, A. Clifton, and J. McCaa."The Wind Integration National Dataset (WIND) Toolkit."Applied Energy.Vol. 151, 2015, pp. 355-366.
[3] King, J., A. Clifton, and B. M. Hodge.Validation of Power Output for the WIND Toolkit (Technical Report, NREL/TP-5D00-61714).Golden, CO:National Renewable Energy Laboratory, 2014.
[4] Lieberman-Cribbin, W., C. Draxl, and A. Clifton.Guide to Using the WIND Toolkit Validation Code (Technical Report, NREL/TP-5000-62595).Golden, CO:National Renewable Energy Laboratory, 2014.
参考
tall
| datastore
| readtable
| parpool
関連する例
詳細
- AWS での深層学習データの処理 (Deep Learning Toolbox)
- ビッグ データを使用した深層学習 (Deep Learning Toolbox)