Работа с удаленными данными

Считывать и записывать данные из удаленного местоположения можно с помощью MATLAB® функции и объекты, такие как файловые функции ввода-вывода и некоторые объекты datastore. В этих примерах показано, как настроить, прочитать и записать в удаленные местоположения на следующих облачных платформах хранения данных:

  • Amazon S3™ (Простой Сервис Хранения)

  • Голубой® Хранилище больших двоичных объектов (ранее известное как Windows Azure® Больших двоичных объектов (WASB)

  • Hadoop® Распределенная файловая система (HDFS™)

Амазонки S3

MATLAB позволяет использовать Amazon S3 в качестве веб-сервиса для хранения файлов, предлагаемого Amazon Web Services. Когда вы задаете местоположение данных, необходимо задать полный путь к файлам или папкам с помощью единого локатора ресурсов (URL) формы

s3://bucketname/path_to_file

bucketname - имя контейнера и path_to_file - путь к файлу или папкам.

Amazon S3 обеспечивает хранение данных через интерфейсы веб-сервисов. Можно использовать блок в качестве контейнера для хранения объектов в Amazon S3.

Настройка доступа

Чтобы работать с удаленными данными в Amazon S3, необходимо сначала настроить доступ:

  1. Подпишитесь на корневую учетную запись Amazon Web Services (AWS). Смотрите Amazon Web Services: Учетная запись.

  2. Используя корневую учетную запись AWS, создайте пользователя IAM (Identity and Access Management). См. раздел Создание пользователя IAM в учетной записи AWS.

  3. Сгенерируйте ключ доступа для получения идентификатора ключа доступа и секретного ключа доступа. См. раздел Управление ключами доступа для пользователей IAM.

  4. Сконфигурируйте машину с идентификатором ключа доступа AWS, ключом секретного доступа и областью с помощью инструмента Командная Строка Interface из https://aws.amazon.com/cli/. Кроме того, установите переменные окружения непосредственно при помощи setenv:

    • AWS_ACCESS_KEY_ID и AWS_SECRET_ACCESS_KEY - Аутентификация и включение использования сервисов Amazon S3. (Вы сгенерировали эту пару ключевых переменных доступа на шаге 3.)

    • AWS_DEFAULT_REGION (необязательно) - выберите географическую область интервала. Значение этого переменного окружения обычно определяется автоматически, но владелец интервала может потребовать, чтобы она была задана вручную.

    • AWS_SESSION_TOKEN (необязательно) - Укажите лексему сеанса, если вы используете временные учетные данные безопасности, например, с AWS® Федеративная проверка подлинности.

Если вы используете Parallel Computing Toolbox™, необходимо убедиться, что кластер настроен для доступа к S3 службам. Можно скопировать переменные окружения в рабочие группы кластера, задав EnvironmentVariables в parpool, batch, createJob, или в диспетчере профилей кластеров.

Чтение данных из Amazon S3

В следующем примере показано, как использовать ImageDatastore объект, чтобы считать указанное изображение из Amazon S3, а затем отобразить изображение на экране.

setenv('AWS_ACCESS_KEY_ID', 'YOUR_AWS_ACCESS_KEY_ID'); 
setenv('AWS_SECRET_ACCESS_KEY', 'YOUR_AWS_SECRET_ACCESS_KEY');

ds = imageDatastore('s3://bucketname/image_datastore/jpegfiles', ...
  'IncludeSubfolders', true, 'LabelSource', 'foldernames'); 
img = ds.readimage(1);
imshow(img)

Запись данных в Amazon S3

В следующем примере показано, как использовать tabularTextDatastore объект, чтобы считать табличные данные из Amazon S3 в длинный массив, обработать его путем удаления недостающих записей и сортировки, а затем записать обратно в Amazon S3.

setenv('AWS_ACCESS_KEY_ID', 'YOUR_AWS_ACCESS_KEY_ID');
setenv('AWS_SECRET_ACCESS_KEY', 'YOUR_AWS_SECRET_ACCESS_KEY');

ds = tabularTextDatastore('s3://bucketname/dataset/airlinesmall.csv', ...
  'TreatAsMissing', 'NA', 'SelectedVariableNames', {'ArrDelay'});
tt = tall(ds);
tt = sortrows(rmmissing(tt));
write('s3://bucketname/preprocessedData/',tt);

Чтобы считать ваши высокие данные назад, используйте datastore функция.

ds = datastore('s3://bucketname/preprocessedData/');
tt = tall(ds);

Хранилище больших двоичных объектов Azure

MATLAB позволяет вам использовать Azure Blob Storage для онлайн-хранения файлов. Когда вы задаете местоположение данных, необходимо задать полный путь к файлам или папкам с помощью единого локатора ресурсов (URL) формы

wasbs://container@account/path_to_file/file.ext

container@account - имя контейнера и path_to_file - путь к файлу или папкам.

Azure обеспечивает хранение данных через интерфейсы веб-сервисов. Можно использовать больших двоичных объектов для хранения файлов данных в Azure. Для получения дополнительной информации смотрите Введение в Azure.

Настройка доступа

Чтобы работать с удаленными данными в хранилище Azure, необходимо сначала настроить доступ:

  1. Подпишитесь на учетную запись Microsoft Azure, см. «Учетная запись Microsoft Azure».

  2. Настройте свои данные аутентификации, установив ровно одну из двух следующих переменных окружения с помощью setenv:

    • MW_WASB_SAS_TOKEN - Аутентификация через подписанный URL-адрес (SAS)

      Получите SAS. Для получения дополнительной информации см. раздел «Получите SAS для контейнера больших двоичных объектов» в разделе «Управление ресурсами хранения больших двоичных объектов Azure с помощью Storage Explorer».

      В 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'

      Необходимо задать эту строку для допустимой лексемы SAS, сгенерированного веб-интерфейсом Azure Storage или Explorer.

    • MW_WASB_SECRET_KEY - Аутентификация через один из двух секретных ключей Пользователя

      У каждой учетной записи хранилища есть два секретных ключа, обеспечивающих доступ к административным привилегиям. Этот же доступ может быть предоставлен MATLAB без необходимости создания лексемы SAS путем установки MW_WASB_SECRET_KEY переменная окружения. Для примера:

      setenv MW_WASB_SECRET_KEY '1234567890ABCDEF1234567890ABCDEF1234567890ABCDEF'

Если вы используете Parallel Computing Toolbox, необходимо скопировать переменные клиентского окружения в рабочие файлы кластера путем установки EnvironmentVariables в parpool, batch, createJob, или в диспетчере профилей кластеров.

Для получения дополнительной информации смотрите Использовать хранилище Azure с кластерами Azure HDInsight.

Чтение данных из Azure

Чтобы считать данные из места хранения данных Azure Blob, укажите местоположение используя следующий синтаксис:

wasbs://container@account/path_to_file/file.ext

container@account - имя контейнера и path_to_file - путь к файлу или папкам.

Для примера, если у вас есть файл airlinesmall.csv в папке /airline на тестовой учетной записи хранилища wasbs://blobContainer@storageAccount.blob.core.windows.net/, затем можно создать datastore при помощи:

location = 'wasbs://blobContainer@storageAccount.blob.core.windows.net/airline/airlinesmall.csv';
ds = tabularTextDatastore(location, 'TreatAsMissing', 'NA', ...
  'SelectedVariableNames', {'ArrDelay'});

Вы можете использовать Azure для всех вычислений поддержки хранилищ данных, включая прямое чтение, mapreduce, длинные массивы и глубокое обучение. Для примера создайте ImageDatastore объект, считайте указанное изображение из datastore, а затем отобразите изображение на экране.

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

В этом примере показано, как считать табличные данные из Azure в длинный массив с помощью tabularTextDatastore объект, предварительно обработать его путем удаления отсутствующих записей и сортировки, а затем записать его обратно в 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);

Чтобы считать ваши высокие данные назад, используйте datastore функция.

ds = datastore('wasbs://YourContainer@YourAccount.blob.core.windows.net/preprocessedData/');
tt = tall(ds);

Распределенная файловая система Hadoop

Определение местоположения данных

MATLAB позволяет использовать Hadoop Distributed File System (HDFS) в качестве веб-сервиса хранения файлов. Когда вы задаете местоположение данных, необходимо задать полный путь к файлам или папкам с помощью единого локатора ресурсов (URL) одной из следующих форм:

hdfs:/path_to_file
hdfs:///path_to_file
hdfs://hostname/path_to_file

hostname - имя узла или сервера и path_to_file - путь к файлу или папкам. Определение hostname опционально. Когда вы не задаете hostname, Hadoop использует имя хоста по умолчанию, сопоставленное с установкой Hadoop Distributed File System (HDFS) в MATLAB.

Например, можно использовать любую из этих команд для создания datastore для файла, file1.txt, в папке с именем data расположен в хосте с именем myserver:

  • ds = tabularTextDatastore('hdfs:///data/file1.txt') 
  • ds = tabularTextDatastore('hdfs://myserver/data/file1.txt') 

Если hostname задан, он должен соответствовать наменоду, заданному fs.default.name свойство в XML- строение Hadoop файлов для кластера Hadoop.

При необходимости можно указать номер порта. Для примера это расположение задает хост с именем myserver с портом 7867, содержащего файл file1.txt в папке с именем data:

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

Данные HDFS о Hortonworks или Cloudera

Если ваша текущая машина имеет доступ к данным HDFS на Hortonworks или Cloudera®, тогда вы не должны устанавливать HADOOP_HOME или HADOOP_PREFIX переменные окружения. MATLAB автоматически присваивает эти переменные окружения при использовании узлов ребра приложения Hortonworks или Cloudera.

Предотвратите удаление кода из памяти

При чтении из HDFS или при локальном чтении файлов Sequence, datastore функция вызывает javaaddpath команда. Эта команда выполняет следующее:

  • Очищает определения всех Java® классы, заданные файлами в динамическом пути класса

  • Удаляет все глобальные переменные и переменные из базового рабочего пространства

  • Удаляет из памяти все скомпилированные скрипты, функции и MEX-функции

Чтобы предотвратить удаление стойких переменных, файлов кода или файлов MEX, используйте mlock функция.

Запись данных в HDFS

В этом примере показано, как использовать tabularTextDatastore объект для записи данных в расположение HDFS. Используйте write функция для записи высоких и распределенных массивов в распределенную файловую систему Hadoop. При вызове этой функции в распределенном или длинный массив необходимо задать полный путь к папке HDFS. В следующем примере показано, как считать табличные данные из HDFS в длинный массив, обработать его путем удаления отсутствующих записей и сортировки, а затем записать обратно в 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);

Чтобы считать ваши высокие данные назад, используйте datastore функция.

ds = datastore('hdfs://myserver/some/path/preprocessedData/');
tt = tall(ds);

См. также

| | | | | | | |

Похожие темы