Обработка Больших данных в облаке

Этот пример показывает, как получить доступ к большому набору данных в облаке и обработать его в кластере облака использование возможностей 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. Для получения дополнительной информации о подготовке доступа к удаленным данным смотрите работу с Удаленными данными (MATLAB). В следующем коде замените 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_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 поддерживают длинные массивы, таким образом, можно выполнить множество вычислений на больших наборах данных с помощью знакомого синтаксиса. Для получения дополнительной информации о поддерживаемых функциях смотрите Поддерживающие Функции (MATLAB).

Задайте пользовательскую функцию чтения

Данные в Техноэкономическом Инструментарии WIND сохранены в файлах NetCDF. Задайте пользовательскую функцию чтения, чтобы считать ее данные в расписание. Для получения дополнительной информации о чтении файлов NetCDF смотрите Файлы NetCDF (MATLAB).

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.

Смотрите также

| | |

Связанные примеры

Больше о