Использование DistCp для копирования данных между большими двоичными объектами служба хранилища Azure и Azure Data Lake Storage
DistCp можно использовать для копирования данных между учетной записью хранения общего назначения версии 2 и такой же учетной записью с включенным иерархическим пространством имен. В этой статье содержатся инструкции по использованию средства DistCp.
DistCp предоставляет различные параметры командной строки, и мы настоятельно рекомендуем ознакомиться с этой статьей, чтобы оптимизировать его использование. В этой статье описаны основные функциональные возможности этого средства и использование его для копирования данных в учетную запись с включенным иерархическим пространством имен.
Необходимые компоненты
- Подписка Azure. См. дополнительные сведения о бесплатной пробной версии Azure.
- Существующая учетная запись служба хранилища Azure без возможностей Data Lake Storage (иерархическое пространство имен) включена.
- Учетная запись служба хранилища Azure с включенными возможностями Data Lake Storage (иерархическое пространство имен). Инструкции по созданию базы данных см. в статье Создание учетной записи хранения Azure.
- Контейнер, созданный в учетной записи хранения с включенным иерархическим пространством имен.
- Кластер Azure HDInsight с доступом к учетной записи хранения с включенной функцией иерархического пространства имен. Дополнительные сведения см. в статье Об использовании Azure Data Lake Storage с кластерами Azure HDInsight. Убедитесь, что вы включили удаленный рабочий стол для кластера.
Использование Distcp из кластера HDInsight на платформе Linux
В состав кластера HDInsight входит служебная программа DistCp, которую можно использовать для копирования данных из различных источников в кластер HDInsight. Если кластер HDInsight настроен для использования хранилища BLOB-объектов Azure вместе с хранилищем Azure Data Lake, служебную программу DistCp можно использовать для копирования данных в обоих направлениях без дополнительной настройки. В этом разделе мы рассмотрим, как использовать служебную программу DistCp.
Создайте сеанс SSH в кластере HDInsight. Дополнительные сведения см. в разделе Подключение к кластеру HDInsight на основе Linux.
Проверьте, можно ли получить доступ к существующей учетной записи общего назначения версии 2 (без включенного иерархического пространства имен).
hdfs dfs -ls wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/
Эта команда должна вывести список содержимого в контейнере.
Аналогичным образом проверьте, доступна ли учетная запись хранения с включенным иерархическим пространством имен из кластера. Выполните следующую команду:
hdfs dfs -ls abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/
Она должна вывести список файлов и папок в учетной записи хранилища Azure Data Lake.
Используйте DistCp для копирования данных из Windows служба хранилища Azure BLOB-объектов (WASB) в учетную запись Data Lake Storage.
hadoop distcp wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/example/data/gutenberg abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/myfolder
Эта команда копирует содержимое папки /example/data/gutenberg/, расположенной в хранилище BLOB-объектов, в папку /myfolder, расположенную в учетной записи хранилища Azure Data Lake.
Аналогичным образом используйте DistCp для копирования данных из учетной записи хранилища Azure Data Lake в хранилище BLOB-объектов (WASB).
hadoop distcp abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/myfolder wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/example/data/gutenberg
Эта команда копирует содержимое папки /myfolder в учетной записи Data Lake Store в папку /example/data/gutenberg/ в WASB.
Рекомендации по производительности при использовании DistCp
Так как наименьшей степенью детализации DistCp является один файл, установка максимального количества одновременных копий является самым важным параметром оптимизации для хранилища Data Lake. Количество одновременных копий равняется количеству модулей сопоставления (m) в командной строке. Этот параметр указывает максимальное количество модулей сопоставления, которые используются для копирования данных. Значение по умолчанию — 20.
Пример
hadoop distcp -m 100 wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/example/data/gutenberg abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/myfolder
Как определить количество модулей сопоставления, которые следует использовать?
Ниже представлены некоторые полезные рекомендации.
Шаг 1. Определение общего объема памяти, доступного для очереди приложения YARN по умолчанию. Сначала определите объем памяти, доступный для очереди приложения YARN по умолчанию. Эта информация доступна на портале Ambari, связанном с кластером. Перейдите к YARN и откройте вкладку конфигураций, чтобы определить объем памяти YARN, доступный для очереди приложения по умолчанию. Это общая доступная память для задания DistCp (которое фактически является заданием MapReduce).
Шаг 2. Расчет количества модулей сопоставления. Чтобы узнать значение m, разделите целую часть общего объема памяти YARN на размер контейнера YARN. Сведения о размере контейнера YARN также доступны на портале Ambari. Перейдите к YARN и откройте вкладку "Configs" (Конфигурации). Размер контейнера YARN отобразится в этом окне. Уравнение для получения количества модулей сопоставления (m):
m = (число узлов * объема памяти YARN для каждого узла) / размер контейнера YARN
Пример
Предположим, что у вас есть кластер 4x D14v2s, и вы пытаетесь перенести 10 ТБ данных из 10 разных папок. Эти папки содержат различные объемы данных, и размеры файлов в каждой папке отличаются.
Общий объем памяти YARN. На портале Ambari вы узнали, что объем памяти YARN составляет 96 ГБ для узла D14. Таким образом, общий объем памяти YARN для кластера из четырех узлов равен:
ПАМЯТЬ YARN = 4 * 96 ГБ = 384 ГБ
Число модулей сопоставления. На портале Ambari вы узнали, что размер контейнера YARN равен 3072 МБ для узла кластера D14. Таким образом, число модулей сопоставления равно:
m = (четыре узла * 96 ГБ) / 3072 МБ = 128 карт
Если другие приложения используют память, то для DistCp можно использовать только часть памяти YARN кластера.
Копирование больших наборов данных
Если размер перемещаемого набора данных большой (например, > 1 ТБ), или в наборе много различных папок, рекомендуем использовать несколько заданий DistCp. Скорее всего, нет повышения производительности, но он распределяет задания таким образом, что если любое задание завершается сбоем, необходимо перезапустить только это конкретное задание, а не все задание.
Ограничения
DistCp пытается создать модули сопоставления одинакового размера для оптимизации производительности. Увеличение числа средств сопоставления может не всегда увеличивать производительность.
DistCp ограничивается только одним модулем сопоставления для каждого файла. Поэтому вам нет необходимости иметь больше модулей сопоставления, чем файлов. Так как DistCp может назначать только один модуль сопоставления для одного файла, это ограничивает объем параллелизма, который можно использовать для копирования больших файлов.
Если у вас есть несколько больших файлов, их следует разделить на 256 МБ, чтобы обеспечить более потенциальную параллельность.