В этом примере показано, как получить доступ к большому набору данных в облаке и обработать его в кластере облака использование возможностей MATLAB больших данных.
Узнать, как к:
Доступ к общедоступному большому набору данных в Облаке Amazon.
Найдите и выберите интересное подмножество этого набора данных.
Используйте хранилища данных, длинные массивы и Parallel Computing Toolbox, чтобы обработать это подмножество меньше чем за 20 минут.
Общедоступный набор данных в этом примере является частью Интегрирования Ветра Национальный Инструментарий Набора данных или Инструментарий WIND [1], [2], [3], [4]. Для получения дополнительной информации смотрите Интегрирование Ветра Национальный Инструментарий Набора данных.
Чтобы запустить этот пример, необходимо настроить доступ к кластеру в Amazon AWS. В MATLAB можно создать кластеры в Amazon AWS непосредственно с рабочего стола MATLAB. На вкладке Home, в меню Parallel, выбирают Create и Manage Clusters. В Кластерном менеджере по Профилю нажмите Create Cloud Cluster. В качестве альтернативы можно использовать MathWorks Cloud Center, чтобы создать и получить доступ, вычисляют кластеры в Amazon AWS. Для получения дополнительной информации смотрите Начало работы с Центром Облака.
Набор данных, используемый в этом примере, является Техноэкономическим Инструментарием WIND. Это содержит 2 Тбайта (терабайт) данных для оценок энергии ветра и прогнозов наряду с атмосферными переменными от 2 007 до 2013 в континентальных США.
Техноэкономический Инструментарий WIND доступен с помощью Amazon Web Services в месте s3://pywtk-данные. Это содержит два набора данных:
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 с данными о метрологии для станций в Массачусетсе. Данные являются в форме Сетевой Формы Общих данных (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 поддерживают длинные массивы, таким образом, можно выполнить множество вычислений на больших наборах данных с помощью знакомого синтаксиса. Для получения дополнительной информации о поддерживаемых функциях смотрите Поддерживающие Функции.
Данные в Техноэкономическом Инструментарии WIND сохранены в файлах 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., Б. М. Ходж, А. Клифтон и Дж. Маккэа. Обзор и Метеорологическая Валидация Интегрирования Ветра Национальный Инструментарий Набора данных (Технический отчет, NREL/TP-5000-61740). Golden, CO: Национальная Лаборатория Возобновляемой энергии, 2015.
[2] Draxl, C., Б. М. Ходж, А. Клифтон и Дж. Маккэа. "Инструментарий Интегрирования ветра национального набора данных (WIND)". Прикладная энергия. Издание 151, 2015, стр 355-366.
[3] Король, Дж., А. Клифтон и Б. М. Ходж. Валидация Выходной мощности для Инструментария WIND (Технический отчет, NREL/TP-5D00-61714). Golden, CO: Национальная Лаборатория Возобновляемой энергии, 2014.
[4] Либерман-Криббин, W., К. Дрэксл и А. Клифтон. Ведите к Использованию Кода доступа Инструментария WIND (Технический отчет, NREL/TP-5000-62595). Golden, CO: Национальная Лаборатория Возобновляемой энергии, 2014.
tall
| datastore
| readtable
| parpool