[Документация Yandex Cloud](../../index.md) > [Yandex Virtual Private Cloud](../index.md) > [Практические руководства](index.md) > Настройка сетевых ресурсов и взаимодействие между ними > Миграция кластера Yandex Data Processing с файловой системой HDFS в другую зону доступности

# Миграция кластера Yandex Data Processing с файловой системой HDFS в другую зону доступности


{% note warning %}

Часть ресурсов, необходимых для прохождения практического руководства, доступны только в [регионе Россия](../../overview/concepts/region.md).

{% endnote %}


Подкластеры каждого кластера Yandex Data Processing находятся в одной [облачной сети](../concepts/network.md#network) и одной [зоне доступности](../../overview/concepts/geo-scope.md). Вы можете перенести кластер в другую зону доступности. Процесс переноса зависит от типа кластера:

* Ниже описано, как перенести кластеры с файловой системой HDFS.
* О миграции [легковесных кластеров](../../data-proc/concepts/index.md#light-weight-clusters) читайте в [инструкции](../../data-proc/operations/migration-to-an-availability-zone.md).

{% note info %}

Для кластеров, хосты которых располагаются в [зоне доступности](../../overview/concepts/geo-scope.md) `kz1-d`, недоступно использование платформы Intel Broadwell.

{% endnote %}

Чтобы перенести кластер с файловой системой HDFS:

1. [Создайте кластер через импорт в Terraform](#create).
1. [Скопируйте данные в новый кластер](#copy).
1. [Удалите первоначальный кластер](#delete).

Перед началом работы [создайте подсеть](../operations/subnet-create.md) в зоне доступности, в которую вы переносите кластер.


## Перед началом работы {#before-you-begin}

Зарегистрируйтесь в Yandex Cloud и создайте [платежный аккаунт](../../billing/concepts/billing-account.md):
1. Перейдите в [консоль управления](https://kz.console.yandex.cloud), затем войдите в Yandex Cloud или зарегистрируйтесь.
1. На странице **[Yandex Cloud Billing](https://kz.console.yandex.cloud/billing)** убедитесь, что у вас подключен платежный аккаунт, и он находится в [статусе](../../billing/concepts/billing-account-statuses.md) `ACTIVE` или `TRIAL_ACTIVE`. Если платежного аккаунта нет, [создайте его](../../billing/quickstart/index.md) и [привяжите](../../billing/operations/pin-cloud.md) к нему облако.

Если у вас есть активный платежный аккаунт, вы можете создать или выбрать [каталог](../../resource-manager/concepts/resources-hierarchy.md#folder), в котором будет работать ваша инфраструктура, на [странице облака](https://kz.console.yandex.cloud/cloud).

[Подробнее об облаках и каталогах](../../resource-manager/concepts/resources-hierarchy.md).


### Необходимые платные ресурсы {#paid-resources}

В стоимость инфраструктуры для миграции в другую зону доступности входит плата за кластеры Yandex Data Processing: использование вычислительных ресурсов с наценкой за сервис Yandex Data Processing, использование сетевых дисков, получение и хранение логов, объем исходящего трафика ([тарифы Yandex Data Processing](../../data-proc/pricing.md)).


## Создайте кластер через импорт в Terraform {#create}

Чтобы в другой зоне доступности создать кластер Yandex Data Processing, настройки которого совпадают с настройками первоначального кластера, импортируйте конфигурацию первоначального кластера в Terraform:

{% list tabs group=instructions %}

* Terraform {#tf}

   1. Если у вас еще нет Terraform, [установите его](../../tutorials/infrastructure-management/terraform-quickstart.md#install-terraform).
   1. [Получите данные для аутентификации](../../tutorials/infrastructure-management/terraform-quickstart.md#get-credentials). Вы можете добавить их в переменные окружения или указать далее в файле с настройками провайдера.
   1. [Настройте и инициализируйте провайдер](../../tutorials/infrastructure-management/terraform-quickstart.md#configure-provider). Чтобы не создавать конфигурационный файл с настройками провайдера вручную, [скачайте его](https://github.com/yandex-cloud-examples/yc-terraform-provider-settings/blob/main/provider.tf).
   1. Поместите конфигурационный файл в отдельную рабочую директорию и [укажите значения параметров](../../tutorials/infrastructure-management/terraform-quickstart.md#configure-provider). Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле.
   1. В той же рабочей директории разместите файл с расширением `.tf` и содержимым:

      ```hcl
      resource "yandex_dataproc_cluster" "old" { }
      ```

   1. Запишите идентификатор первоначального кластера в переменную окружения:

      ```bash
      export DATAPROC_CLUSTER_ID=<идентификатор_кластера>
      ```

      Идентификатор можно запросить вместе со [списком кластеров в каталоге](../../data-proc/operations/cluster-list.md#list).

   1. Импортируйте настройки первоначального кластера в конфигурацию Terraform:

      ```bash
      terraform import yandex_dataproc_cluster.old ${DATAPROC_CLUSTER_ID}
      ```

   1. Получите импортированную конфигурацию:

      ```bash
      terraform show
      ```

   1. Скопируйте ее из терминала и вставьте в файл с расширением `.tf`.
   1. Расположите файл в новой директории `imported-cluster`.
   1. Измените скопированную конфигурацию так, чтобы из нее можно было создать новый кластер:

      * Укажите новое имя кластера в строке `resource` и параметре `name`.
      * Удалите параметры `created_at`, `host_group_ids`, `id` и `subcluster_spec.id`.
      * Измените зону доступности в параметре `zone_id`.
      * Укажите идентификатор новой подсети, созданной в нужной зоне доступности, в параметрах `subnet_id` в блоках `subcluster_spec`.
      * Измените формат SSH-ключа в параметре `ssh_public_keys`. Исходный формат:

         ```hcl
         ssh_public_keys = [
           <<-EOT
             <ключ>
           EOT,
         ]
         ```

         Требуемый формат:

         ```hcl
         ssh_public_keys = [
           "<ключ>"
         ]
         ```

   1. В директории `imported-cluster` [получите данные для аутентификации](../../tutorials/infrastructure-management/terraform-quickstart.md#get-credentials).
   1. В этой же директории [настройте и инициализируйте провайдер](../../tutorials/infrastructure-management/terraform-quickstart.md#configure-provider). Чтобы не создавать конфигурационный файл с настройками провайдера вручную, [скачайте его](https://github.com/yandex-cloud-examples/yc-terraform-provider-settings/blob/main/provider.tf).
   1. Поместите конфигурационный файл в директорию `imported-cluster` и [укажите значения параметров](../../tutorials/infrastructure-management/terraform-quickstart.md#configure-provider). Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле.
   1. Проверьте корректность файлов конфигурации Terraform с помощью команды:

      ```bash
      terraform validate
      ```

      Если в файлах конфигурации есть ошибки, Terraform на них укажет.

   1. Создайте необходимую инфраструктуру:

      1. Выполните команду для просмотра планируемых изменений:
      
         ```bash
         terraform plan
         ```
      
         Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
      
      1. Если вас устраивают планируемые изменения, внесите их:
         1. Выполните команду:
      
            ```bash
            terraform apply
            ```
      
         1. Подтвердите изменение ресурсов.
         1. Дождитесь завершения операции.

      В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в [консоли управления](https://kz.console.yandex.cloud).

{% endlist %}

## Скопируйте данные в новый кластер {#copy}

1. Убедитесь, что над HDFS-файлами и директориями, которые вы хотите скопировать, не выполняются какие-либо операции или задания (jobs).

   Чтобы посмотреть список запущенных операций и заданий:

   1. Откройте [консоль управления](https://kz.console.yandex.cloud).
   1. Перейдите в сервис **Yandex Data Processing**.
   1. Нажмите на имя первоначального кластера и выберите вкладку **Операции**, затем — **Задания**.

   {% note info %}

   Пока вы не завершили миграцию, не запускайте операции или задания, которые изменяют копируемые HDFS-файлы и директории.

   {% endnote %}

1. [Подключитесь по SSH](../../data-proc/operations/connect-ssh.md) к хосту-мастеру первоначального кластера.
1. Получите список директорий и файлов, которые надо скопировать в новый кластер:

   ```bash
   hdfs dfs -ls /
   ```

   Вместо символа `/` можно указать нужную вам директорию.

1. Чтобы протестировать копирование данных в новый кластер Yandex Data Processing, создайте тестовые директории:

   ```bash
   hdfs dfs -mkdir /user/foo &&\
   hdfs dfs -mkdir /user/test
   ```

   В примере ниже для демонстрации копируются только тестовые директории `/user/foo` и `/user/test`.

1. Подключитесь по SSH к хосту-мастеру нового кластера.
1. Создайте файл `srclist`:

   ```bash
   nano srclist
   ```

1. Добавьте в него список директорий, предназначенных для переноса:

   ```text
   hdfs://<FQDN_первоначального_кластера>:8020/user/foo
   hdfs://<FQDN_первоначального_кластера>:8020/user/test
   ```

   В команде укажите FQDN хоста-мастера первоначального кластера. О том, как получить FQDN, читайте в [инструкции](../../data-proc/operations/fqdn.md).

1. Поместите файл `srclist` в HDFS-директорию `/user`:

   ```bash
   hdfs dfs -put srclist /user
   ```

1. Создайте директорию, куда будут скопированы данные. В примере это директория `copy`, вложенная в `/user`.

   ```bash
   hdfs dfs -mkdir /user/copy
   ```

1. Скопируйте данные между кластерами с помощью утилиты [DistCp](https://hadoop.apache.org/docs/current/hadoop-distcp/DistCp.html):

   ```bash
   hadoop distcp -f hdfs://<FQDN_нового_кластера>:8020/user/srclist \
   hdfs://<FQDN_нового_кластера>:8020/user/copy
   ```

   В команде укажите FQDN хоста-мастера нового кластера.

   В результате в директорию `/user/copy` будут скопированы все директории и файлы, указанные в списке `srclist`.

   Если копируется большой объем данных, используйте в команде флаг `-m <максимальное_количество_одновременных_копий>`, чтобы ограничить потребление пропускной способности сети. Подробнее в [документации DistCp](https://hadoop.apache.org/docs/r3.2.2/hadoop-distcp/DistCp.html#Command_Line_Options).

   Объем копируемых данных можно посмотреть в веб-интерфейсе HDFS. Чтобы открыть его:

   1. Откройте [консоль управления](https://kz.console.yandex.cloud).
   1. Перейдите в сервис **Yandex Data Processing**.
   1. Нажмите на имя первоначального кластера.
   1. На его странице, в разделе **UI Proxy**, перейдите по ссылке **HDFS Namenode UI**.

   В поле **DFS Used** указан объем данных в HDFS в первоначальном кластере.

1. Проверьте, что данные скопировались:

   ```bash
   hdfs dfs -ls /user/copy
   ```

Таким образом можно скопировать все нужные данные. Для этого в `srclist` укажите требуемые директории и файлы.

## Удалите первоначальный кластер {#delete}

О том, как это сделать, читайте в [инструкции](../../data-proc/operations/cluster-delete.md).