Upgrade и Rollback

При обновлении Hadoop на существующем кластере, как и при любом обновлении программного обеспечения, возможны новые ошибки или несовместимые изменения, которые влияют на существующие приложения и не были обнаружены ранее. Система позволяет администраторам вернуться к более ранней версии Hadoop и откатить кластер до состояния, в котором он находился до обновления. Но HDFS может иметь одну такую резервную копию. Перед обновлением администраторам необходимо удалить существующую резервную копию с помощью команды bin/hadoop dfsadmin -finalizeUpgrade. Далее кратко описывается типичная процедура обновления:

  • Перед обновлением программного обеспечения Hadoop завершить работу, если имеется существующая резервная копия.
  • Остановить кластер и распространить новую версию Hadoop.
  • Запустить новую версию с параметром -upgrade (sbin/start-dfs.sh -upgrade).
  • Завершить обновление, как только новая HDFS считается работающей (возможно, после нескольких дней эксплуатации). Важно обратить внимание, что пока кластер не будет завершен, удаление файлов, существовавших до обновления, не освобождает реальное дисковое пространство на узлах данных DataNodes.
  • При необходимости вернуться к старой версии:
    • Остановить кластер и распространить более раннюю версию Hadoop;
    • Выполнить команду отката в namenode (bin/hdfs namenode -rollback);
    • Запустить кластер с возможностью отката (sbin/start-dfs.sh -rollback).

При обновлении HDFS до новой версии необходимо переименовать или удалить все пути, зарезервированные в новой версии HDFS, в ином случае, когда NameNode встречает зарезервированный путь во время обновления, выдает ошибку:

/.reserved is a reserved path and .snapshot is a reserved path component in this version of HDFS. Please rollback and delete or rename this path, or upgrade with the -renameReserved [key-value pairs] option to automatically rename these paths during upgrade.

Указание -upgrade -renameReserved [optional key-value pairs] заставляет NameNode автоматически переименовывать любые зарезервированные пути, найденные во время запуска. Например, чтобы переименовать все пути с именами .snapshot на .my-snapshot и .reserved на .my-reserved, необходимо указать -upgrade -renameReserved .snapshot=.my-snapshot,.reserved=.my-reserved.

Если с ключом -renameReserved не указаны пары ключ-значение, NameNode добавляет суффиксы зарезервированным путям в виде .<LAYOUT-VERSION>.UPGRADE_RENAMED, например, .snapshot.-51.UPGRADE_RENAMED.

Есть некоторые оговорки к этому процессу переименования и по возможности рекомендуется перед обновлением сначала выполнять hdfs dfsadmin -saveNamespace. Это связано с тем, что может возникнуть несогласованность данных, если операция журнала изменений ссылается на место назначения автоматически переименованного файла.