В этом примере показано, как получить доступ к большому набору данных в облаке и обработать его в облачном кластере с помощью возможностей MATLAB для больших данных.
Узнать, как:
Доступ к общедоступному большому набору данных на Amazon Cloud.
Найдите и выберите интересное подмножество этого набора данных.
Используйте хранилища данных, длинных массивов и Parallel Computing Toolbox, чтобы обработать этот подмножество менее чем за 20 минут.
Общий набор данных в этом примере является частью набора инструментов Wind Integration National Dataset Toolkit или WIND Toolkit [1], [2], [3], [4]. Для получения дополнительной информации смотрите Wind Integration National Dataset Toolkit.
Чтобы запустить этот пример, вы должны настроить доступ к кластеру в Amazon AWS. В MATLAB можно создавать кластеры в Amazon AWS непосредственно с рабочего стола MATLAB. На вкладке «Вкладке Home», в меню Parallel, выберите Create and Manage Clusters. В Диспетчере профилей кластеров щелкните Создать облако. Также можно использовать MathWorks Cloud Center для создания и доступа к вычислительным кластерам в Amazon AWS. Дополнительные сведения см. в разделе Начало работы с облачным центром.
Набор данных, используемый в этом примере, является Techno-Economic WIND Toolkit. Он содержит 2 ТБ (терабайт) данных для оценок и прогнозов ветряной степени наряду с атмосферными переменными с 2007 по 2013 год в континентальной части США
Techno-Economic WIND Toolkit доступен через Amazon Web Services в расположении s3 ://pywtk-data. Он содержит два набора данных:
s3://pywtk-data/met_data - Метрологические данные
s3://pywtk-data/fcst_data - Прогнозные данные
Чтобы работать с удаленными данными в Amazon S3, вы должны задать переменные окружения для своих учетных данных AWS. Дополнительные сведения о настройке доступа к удаленным данным см. в разделе Работа с удаленными данными. В следующем коде замените YOUR_AWS_ACCESS_KEY_ID
и YOUR_AWS_SECRET_ACCESS_KEY
с вашими собственными учетными данными Amazon AWS.
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 ТБ довольно велик. В этом примере показано, как найти подмножество набора данных, который вы хотите анализировать. Пример фокусируется на данных для состояния Массачусетс.
Сначала получите идентификаторы, которые идентифицируют метрологические станции в Массачусетсе, и определите файлы, которые содержат их метрологическую информацию. Информация о метаданных для каждой станции находится в файле с именем three_tier_site_metadata.csv
. Поскольку эти данные малы и помещаются в памяти, вы можете получить к ним доступ из клиента MATLAB с readtable
. Можно использовать readtable
функция для доступа к открытым данным в S3 блоках непосредственно без необходимости записи специального кода.
tMetadata = readtable("s3://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://pywtk-data/met_data/folder/site_id.nc
, где folder
- ближайшее целое число, меньше или равное site_id/500
. Используя это соглашение, составьте местоположение файла для каждой станции.
folder = floor(siteId/500);
fileLocations = compose("s3://pywtk-data/met_data/%d/%d.nc",folder,siteId);
Можно использовать хранилища данных и длинные массивы для доступа и обработки данных, которые не помещаются в памяти. При выполнении расчетов больших данных MATLAB по мере необходимости обращается к меньшим фрагментам удаленных данных, поэтому вам не нужно загружать сразу весь набор данных. С помощью длинные массивы MATLAB автоматически разбивает данные на меньшие блоки, которые помещаются в памяти для обработки.
Если у вас есть Parallel Computing Toolbox, MATLAB может обрабатывать многие блоки параллельно. Параллелизация позволяет вам запустить анализ на одном рабочем столе с локальными работниками или масштабировать до кластера для получения дополнительных ресурсов. Когда вы используете кластер в том же облачном сервисе, что и данные, данные остаются в облаке, и вы получаете выгоду от улучшения времени передачи данных. Хранение данных в облаке также является более эффективным с точки зрения затрат. Этот пример проработал менее 20 минут, используя 18 рабочих на машине c4.8xlarge в Amazon AWS.
Если вы используете параллельный пул в кластере, MATLAB обрабатывает эти данные с помощью рабочих процессов в кластере. Создайте параллельный пул в кластере. В следующем коде вместо этого используйте имя профиля кластера. Присоедините скрипт к пулу, потому что параллельным рабочим нужно получить в нем доступ к вспомогательной функции.
p = parpool("myAWSCluster");
Starting parallel pool (parpool) using the 'myAWSCluster' profile ... connected to 18 workers.
addAttachedFiles(p,mfilename("fullpath"));
Создайте datastore с данными метрологии для станций в Массачусетсе. Данные имеют форму файлов Network Common Data Form (NetCDF), и для их интерпретации необходимо использовать пользовательскую функцию чтения. В этом примере эта функция называется ncReader
и считывает данные NetCDF в расписания. Вы можете исследовать его содержимое в конце этого скрипта.
dsMetrology = fileDatastore(fileLocations,"ReadFcn",@ncReader,"UniformRead",true);
Составьте длинное расписание с данными метрологии из datastore.
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
и отсортируйте получившаяся длинная таблица. Для эффективности MATLAB откладывает наиболее высокие операции до тех пор, пока данные не потребуются. В этом случае построение графика данных запускает оценку отложенных вычислений.
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 поддерживают длинные массивы, поэтому можно выполнять разнообразные вычисления на наборах больших данных с помощью привычного синтаксиса. Дополнительные сведения о поддерживаемых функциях см. в разделе Вспомогательные функции.
Данные в Techno-Economic WIND Toolkit сохраняются в файлах NetCDF. Задайте пользовательскую функцию чтения, чтобы считать ее данные в расписание. Для получения дополнительной информации о чтении файлов 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. Обзор и метеорологическая валидация набора национальных наборов данных по интегрированию ветра (Технический отчет, NREL/TP-5000-61740). Golden, CO: Национальная лаборатория возобновляемой энергии, 2015.
[2] Draxl, C., B. M. Hodge, A. Clifton, and J. McCaa. «Инструментарий WIND Integration National Dataset (WIND) Toolkit». Прикладная энергия. Том 151, 2015, стр. 355-366.
[3] Кинг, Дж., А. Клифтон, и Б. М. Ходж. Валидация выходной степени набора инструментальных средств WIND (Технический отчет, NREL/TP-5D00-61714). Golden, CO: Национальная лаборатория возобновляемой энергии, 2014.
[4] Lieberman-Cribbin, W., C. Draxl, and A. Clifton. Руководство по использованию кода валидации Toolkit (Технический отчет, NREL/TP-5000-62595). Golden, CO: Национальная лаборатория возобновляемой энергии, 2014.
datastore
| parpool
| readtable
| tall