Миграция кластера Yandex Data Processing с файловой системой HDFS в другую зону доступности
Подкластеры каждого кластера Yandex Data Processing находятся в одной облачной сети и одной зоне доступности. Вы можете перенести кластер в другую зону доступности. Процесс переноса зависит от типа кластера:
- Ниже описано, как перенести кластеры с файловой системой HDFS.
- О миграции легковесных кластеров читайте в инструкции.
Примечание
Для кластеров, хосты которых располагаются в зоне доступности ru-central1-d
, недоступно использование платформы Intel Broadwell.
Чтобы перенести кластер с файловой системой HDFS:
- Создайте кластер через импорт в Terraform.
- Скопируйте данные в новый кластер.
- Удалите первоначальный кластер.
Перед началом работы создайте подсеть в зоне доступности, в которую вы переносите кластер.
Создайте кластер через импорт в Terraform
Чтобы в другой зоне доступности создать кластер Yandex Data Processing, настройки которого совпадают с настройками первоначального кластера, импортируйте конфигурацию первоначального кластера в Terraform:
-
Если у вас еще нет Terraform, установите его.
-
Получите данные для аутентификации. Вы можете добавить их в переменные окружения или указать далее в файле с настройками провайдера.
-
Настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его
. -
Поместите конфигурационный файл в отдельную рабочую директорию и укажите значения параметров. Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле.
-
В той же рабочей директории разместите файл с расширением
.tf
и содержимым:resource "yandex_dataproc_cluster" "old" { }
-
Запишите идентификатор первоначального кластера в переменную окружения:
export DATAPROC_CLUSTER_ID=<идентификатор_кластера>
Идентификатор можно запросить вместе со списком кластеров в каталоге.
-
Импортируйте настройки первоначального кластера в конфигурацию Terraform:
terraform import yandex_dataproc_cluster.old ${DATAPROC_CLUSTER_ID}
-
Получите импортированную конфигурацию:
terraform show
-
Скопируйте ее из терминала и вставьте в файл с расширением
.tf
. -
Расположите файл в новой директории
imported-cluster
. -
Измените скопированную конфигурацию так, чтобы из нее можно было создать новый кластер:
-
Укажите новое имя кластера в строке
resource
и параметреname
. -
Удалите параметры
created_at
,host_group_ids
,id
иsubcluster_spec.id
. -
Измените зону доступности в параметре
zone_id
. -
Укажите идентификатор новой подсети, созданной в нужной зоне доступности, в параметрах
subnet_id
в блокахsubcluster_spec
. -
Измените формат SSH-ключа в параметре
ssh_public_keys
. Исходный формат:ssh_public_keys = [ <<-EOT <ключ> EOT, ]
Требуемый формат:
ssh_public_keys = [ "<ключ>" ]
-
-
В директории
imported-cluster
получите данные для аутентификации. -
В этой же директории настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его
. -
Поместите конфигурационный файл в директорию
imported-cluster
и укажите значения параметров. Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле. -
Проверьте корректность файлов конфигурации Terraform с помощью команды:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
Создайте необходимую инфраструктуру:
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
. -
Скопируйте данные в новый кластер
-
Убедитесь, что над HDFS-файлами и директориями, которые вы хотите скопировать, не выполняются какие-либо операции или задания (jobs).
Чтобы посмотреть список запущенных операций и заданий:
- В консоли управления
выберите сервис Yandex Data Processing. - Нажмите на имя первоначального кластера и выберите вкладку Операции, затем — Задания.
Примечание
Пока вы не завершили миграцию, не запускайте операции или задания, которые изменяют копируемые HDFS-файлы и директории.
- В консоли управления
-
Подключитесь по SSH к хосту-мастеру первоначального кластера.
-
Получите список директорий и файлов, которые надо скопировать в новый кластер:
hdfs dfs -ls /
Вместо символа
/
можно указать нужную вам директорию. -
Чтобы протестировать копирование данных в новый кластер Yandex Data Processing, создайте тестовые директории:
hdfs dfs -mkdir /user/foo &&\ hdfs dfs -mkdir /user/test
В примере ниже для демонстрации копируются только тестовые директории
/user/foo
и/user/test
. -
Подключитесь по SSH к хосту-мастеру нового кластера.
-
Создайте файл
srclist
:nano srclist
-
Добавьте в него список директорий, предназначенных для переноса:
hdfs://<FQDN_первоначального_кластера>:8020/user/foo hdfs://<FQDN_первоначального_кластера>:8020/user/test
В команде укажите FQDN хоста-мастера первоначального кластера. О том, как получить FQDN, читайте в инструкции.
-
Поместите файл
srclist
в HDFS-директорию/user
:hdfs dfs -put srclist /user
-
Создайте директорию, куда будут скопированы данные. В примере это директория
copy
, вложенная в/user
.hdfs dfs -mkdir /user/copy
-
Скопируйте данные между кластерами с помощью утилиты DistCp
:hadoop distcp -f hdfs://<FQDN_нового_кластера>:8020/user/srclist \ hdfs://<FQDN_нового_кластера>:8020/user/copy
В команде укажите FQDN хоста-мастера нового кластера.
В результате в директорию
/user/copy
будут скопированы все директории и файлы, указанные в спискеsrclist
.Если копируется большой объем данных, используйте в команде флаг
-m <максимальное_количество_одновременных_копий>
, чтобы ограничить потребление пропускной способности сети. Подробнее см. в документации DistCp .Объем копируемых данных можно посмотреть в веб-интерфейсе HDFS. Чтобы открыть его:
- В консоли управления
выберите сервис Yandex Data Processing. - Нажмите на имя первоначального кластера.
- На его странице, в разделе UI Proxy, перейдите по ссылке HDFS Namenode UI.
В поле DFS Used указан объем данных в HDFS в первоначальном кластере.
- В консоли управления
-
Проверьте, что данные скопировались:
hdfs dfs -ls /user/copy
Таким образом можно скопировать все нужные данные. Для этого в srclist
укажите требуемые директории и файлы.
Удалите первоначальный кластер
О том, как это сделать, читайте в инструкции.