Применение DistCp для копирования данных между Azure Storage Blobs и Azure Data Lake Storage 1-го поколения с помощью DistCp

Если вы располагаете кластером HDInsight с доступом к Azure Data Lake Storage 1-го поколения, вы можете пользоваться такими инструментами экосистемы Hadoop, как DistCp, чтобы копировать данные из системы хранения данных кластера HDInsight (WASB) в учетную запись Data Lake Storage 1-го поколения и обратно. В этой статье описано, как использовать инструмент DistCp.

Предварительные требования

Использование Distcp из кластера HDInsight на платформе Linux

В состав кластера HDInsight входит инструмент DistCp, который можно применять для копирования данных из различных источников в кластер HDInsight. После настройки кластера HDInsight для использования Data Lake Storage 1-го поколения в качестве дополнительного хранилища с помощью DistCp без какой-либо дополнительной настройки можно копировать данные в учетную запись Data Lake Storage 1-го поколения и обратно. В этом разделе мы рассмотрим, как использовать инструмент DistCp.

  1. На своем настольном компьютере используйте SSH, чтобы подключиться к кластеру. См. раздел Подключение к кластеру HDInsight на основе Linux. Выполните команды в командной строке SSH.

  2. Проверьте, доступно ли вам хранилище blob-объектов Azure Storage blobs (WASB). Выполните следующую команду:

    hdfs dfs –ls wasb://<container_name>@<storage_account_name>.blob.core.windows.net/
    

    Должен появиться список содержимого в хранилище blob-объектов.

  3. Аналогичным образом проверьте, доступна ли учетная запись хранилища Data Lake Storage 1-го поколения из кластера. Выполните следующую команду:

    hdfs dfs -ls adl://<data_lake_storage_gen1_account>.azuredatalakestore.net:443/
    

    Должен появиться список файлов и папок учетной записи хранилища Data Lake Storage 1-го поколения.

  4. С помощью DistCp скопируйте данные из WASB в учетную запись хранилища Data Lake Storage 1-го поколения.

    hadoop distcp wasb://<container_name>@<storage_account_name>.blob.core.windows.net/example/data/gutenberg adl://<data_lake_storage_gen1_account>.azuredatalakestore.net:443/myfolder
    

    Эта команда копирует содержимое папки /example/data/gutenberg/ в WASB в папку /myfolder в учетной записи Data Lake Storage 1-го поколения.

  5. Аналогичным образом с помощью DistCp скопируйте данные из учетной записи хранилища Data Lake Storage 1-го поколения в WASB.

    hadoop distcp adl://<data_lake_storage_gen1_account>.azuredatalakestore.net:443/myfolder wasb://<container_name>@<storage_account_name>.blob.core.windows.net/example/data/gutenberg
    

    Эта команда копирует содержимое папки /myfolder учетной записи Data Lake Storage 1-го поколения в папку /example/data/gutenberg/ в WASB.

Рекомендации по производительности при использовании DistCp

Так как наименьшей степенью детализации DistCp является один файл, установка максимального количества одновременных копий является самым важным параметром для его оптимизации по отношению к Data Lake Storage 1-го поколения. Количество одновременных копий регулируется установкой параметра, отвечающего за количество модулей сопоставления (‘m’) в командной строке. Этот параметр указывает максимальное количество модулей сопоставления, которые используются для копирования данных. Значение по умолчанию — 20.

Пример.

 hadoop distcp wasb://<container_name>@<storage_account_name>.blob.core.windows.net/example/data/gutenberg adl://<data_lake_storage_gen1_account>.azuredatalakestore.net:443/myfolder -m 100

Как определить количество модулей сопоставления, которое следует установить?

Ниже представлены некоторые полезные рекомендации.

  • Шаг 1. Определение общего объема памяти YARN. Первым шагом является определение объема памяти YARN, доступной для кластера, в котором выполняется задание DistCp. Эта информация доступна на портале Ambari, связанном с кластером. Перейдите к YARN и откройте вкладку конфигураций Configs, чтобы определить объем памяти YARN. Чтобы определить общий объем памяти YARN, умножьте объем памяти YARN для одного узла на количество узлов в кластере.

  • Шаг 2. Расчет количества модулей сопоставления. Чтобы узнать значение m, разделите целую часть общего объема памяти YARN на размер контейнера YARN. Сведения о размере контейнера YARN также доступны на портале Ambari. Перейдите к YARN и откройте вкладку конфигураций Configs. Размер контейнера YARN отобразится в этом окне. Уравнение для получения количества модулей сопоставления (m):

    m = (number of nodes * YARN memory for each node) / YARN container size

Пример.

Предположим, что в кластере есть 4 узла D14v2s и вы хотите передать 10 ТБ данных из 10 разных папок. Эти папки содержат различные объемы данных, и размеры файлов в каждой папке отличаются.

  • Общий объем памяти YARN. На портале Ambari вы узнали, что объем памяти YARN составляет 96 ГБ для узла D14. Таким образом, общий объем памяти YARN для кластера из четырех узлов равен:

    YARN memory = 4 * 96GB = 384GB

  • Число модулей сопоставления. На портале Ambari вы узнали, что размер контейнера YARN равен 3072 для узла кластера D14. Таким образом, число модулей сопоставления равно:

    m = (4 nodes * 96GB) / 3072MB = 128 mappers

Если другие приложения используют память, то для DistCp можно выбрать только часть памяти YARN кластера.

Копирование больших наборов данных

Если размер перемещаемого набора данных большой (например, > 1 ТБ) или имеет много разных папок, рассмотрите возможность использования нескольких заданий DistCp. Вряд ли это увеличит производительность, однако будет создано несколько заданий. В результате, если возникнет сбой одного из заданий, нужно будет перезапустить только это задание; это лучше, чем перезапускать все задание целиком.

Ограничения

  • DistCp пытается создать модули сопоставления одинакового размера для оптимизации производительности. Увеличение количества модулей сопоставления не всегда приводит к увеличению производительности.

  • DistCp ограничивается только одним модулем сопоставления для каждого файла. Поэтому вам нет необходимости иметь больше модулей сопоставления, чем файлов. Так как DistCp может назначать только один модуль сопоставления для одного файла, это ограничивает объем параллелизма, это можно использовать для копирования больших файлов.

  • При наличии небольшого количества больших файлов следует разбить их на фрагменты по 256 МБ, это даст вам больший потенциал для параллельного копирования.

  • При копировании из учетной записи Azure Blob storage выполнение задания копирования может замедляться со стороны хранилища blob-объектов. Это снижает производительность задания копирования. Дополнительные сведения об ограничениях Azure Blob storage см. в статье Подписка Azure и ограничения данной службы.

См. также раздел