Управляйте жизненным циклом файлов HDFS

Биг датаBeginner
Практиковаться сейчас

Введение

Розничная компания получила файл с товарами. Одному коллеге нужна копия для проверки, другому — архивная версия, а вам нужно скачать проверенный файл для просмотра. Если при этих действиях случайно заменить или удалить оригинал, команда потеряет надёжный источник данных.

Жизненный цикл файла — совокупность действий, через которые он проходит: получение, использование, архивирование, выгрузка и последующее удаление. В HDFS есть операции для каждого действия, но их последствия различаются. Загрузка и скачивание копируют данные между файловыми системами; копирование и перемещение внутри HDFS не выходят за её пределы.

Вы организуете отдельные каталоги исходных данных, архива и временных файлов, сохраните исходный файл, выгрузите архив и удалите только ненужную копию. Вы уже знаете пути HDFS и команды загрузки и чтения; эта работа добавляет аккуратное управление файлами. Среда и данные не зависят от предыдущих работ. Всю работу выполняйте в терминале.

Сохраните исходные входные данные

На этом шаге вы загрузите входные данные компании в каталог, предназначенный для исходных файлов.

Файл raw — входной файл, сохраняемый в первоначальном виде. Отдельный каталог scratch содержит временные рабочие файлы, а каталог archive — копию для хранения. Имена каталогов не обеспечивают соблюдение этих правил автоматически; они делают ваши намерения понятными.

Начните в локальном рабочем каталоге:

cd /home/labex/project

Прочитайте входной файл перед сохранением:

cat /home/labex/project/data/products.txt

Он содержит:

notebook pen notebook
folder pen
notebook folder

Используйте -mkdir -p с тремя путями каталогов. HDFS создаст каждый указанный каталог и недостающие родительские каталоги:

hdfs dfs -mkdir -p /user/labex/file-lifecycle/raw /user/labex/file-lifecycle/archive /user/labex/file-lifecycle/scratch

Загрузите локальный входной файл в каталог исходных данных:

hdfs dfs -put /home/labex/project/data/products.txt /user/labex/file-lifecycle/raw/products.txt

При успешной загрузке обычно ничего не выводится. При повторе ошибка о существующем назначении защищает сохранённый файл от случайной перезаписи. Просмотрите сохранённые данные, а не удаляйте их ради устранения ошибки:

hdfs dfs -cat /user/labex/file-lifecycle/raw/products.txt

Текст должен совпадать с локальным оригиналом. Оригинал также остаётся в локальной файловой системе: -put копирует локальный источник, а не перемещает его. Дальше вы будете работать с копиями, чтобы сохранить исходные данные нетронутыми.

Скопируйте и архивируйте файл внутри HDFS

На этом шаге вы создадите копию для проверки, затем переместите её в архив, не перемещая исходный файл.

Операция -cp копирует источник HDFS в назначение HDFS. В отличие от -put, оба пути ниже относятся к HDFS:

hdfs dfs -cp /user/labex/file-lifecycle/raw/products.txt /user/labex/file-lifecycle/scratch/review.txt

Просмотрите копию для проверки:

hdfs dfs -cat /user/labex/file-lifecycle/scratch/review.txt

Вы должны увидеть те же обозначения товаров. Другое имя означает те же данные, а не новый пакет продаж.

Когда проверенную копию пора сохранить, переместите её командой -mv. Перемещение внутри этой файловой системы меняет путь; исходный путь перестаёт существовать. Прежде чем выполнить команду, предположите, какой файл исчезнет, а какой останется:

hdfs dfs -mv /user/labex/file-lifecycle/scratch/review.txt /user/labex/file-lifecycle/archive/products-reviewed.txt

Выведите содержимое scratch и archive вместе. -ls принимает несколько путей:

hdfs dfs -ls /user/labex/file-lifecycle/scratch /user/labex/file-lifecycle/archive

Запись архива должна оканчиваться на /archive/products-reviewed.txt; записи review.txt в scratch быть не должно. Убедитесь, что исходный файл не изменился:

hdfs dfs -cat /user/labex/file-lifecycle/raw/products.txt

Его три строки должны по-прежнему совпадать. Если вы вернулись к этому шагу после его завершения, просмотрите существующий архив вместо повторного копирования и перемещения: -mv уже убрала источник из scratch, а существующий архив не следует перезаписывать без необходимости.

Выгрузите файлы и изучите их размеры

На этом шаге вы скачаете архивный файл и изучите число файлов и использование хранилища.

Операция -get копирует источник HDFS в локальное назначение. Первый путь ниже относится к HDFS, второй — локальный:

hdfs dfs -get /user/labex/file-lifecycle/archive/products-reviewed.txt /home/labex/project/output/products-exported.txt

Приглашение должно вернуться без вывода. Если скачивание уже выполнено, просмотрите локальное назначение: повторное скачивание в существующий файл может вызвать сообщение о его существовании. Проверьте содержимое локальной командой diff, как в первой работе:

diff /home/labex/project/data/products.txt /home/labex/project/output/products-exported.txt

Различия не должны появляться. Это выгруженная копия: и архив HDFS, и локальный оригинал остаются на месте.

Для измерения содержимого каталогов -count выводит число каталогов, число файлов, размер содержимого в байтах и путь. В число каталогов входит и сам указанный каталог:

hdfs dfs -count /user/labex/file-lifecycle/raw /user/labex/file-lifecycle/archive

Каждая строка должна описывать один каталог с одним файлом. Размер содержимого в обеих строках должен совпадать, поскольку байты архива совпадают с исходными. Сохраните фактические строки:

hdfs dfs -count /user/labex/file-lifecycle/raw /user/labex/file-lifecycle/archive > /home/labex/project/output/file-counts.txt

Операция -du показывает сведения о размерах файлов. -h выбирает удобные для чтения единицы, когда это уместно:

hdfs dfs -du -h /user/labex/file-lifecycle/raw

Столбцы показывают размер содержимого, занимаемое место с учётом реплик и путь. В этой среде коэффициент репликации равен 1, поэтому два столбца размеров для этого файла должны совпадать. Вы изучите блоки и репликацию в одной из последующих работ; большее значение второго столбца в другой среде не обязательно означает дополнительные записи о продажах.

Прежде чем продолжать, объясните себе границы операций: -cp осталась внутри HDFS, -mv изменила путь HDFS, а -get создала локальную копию.

Удалите только ненужную временную копию

На этом шаге вы изучите политику удаления и удалите известный временный файл, сохранив входные данные и архив.

Удаление — операция другого рода: когда файл больше не нужен, его путь можно удалить. В HDFS может действовать политика хранения в корзине (Trash), но само использование HDFS не гарантирует возможность восстановления. Сначала прочитайте настроенный интервал хранения в корзине в минутах:

hdfs getconf -confKey fs.trash.interval

В подготовленной среде используется 0, то есть хранение в корзине отключено. Считайте удаление здесь немедленным. Положительное значение в другой среде включает интервал хранения, но не заменяет сохранение надёжных исходных данных.

Создайте копию, единственная цель которой — отработка удаления:

hdfs dfs -cp /user/labex/file-lifecycle/raw/products.txt /user/labex/file-lifecycle/scratch/disposable.txt

Прежде чем что-либо удалять, выведите точный объект удаления:

hdfs dfs -ls /user/labex/file-lifecycle/scratch/disposable.txt

Убедитесь, что путь оканчивается на scratch/disposable.txt, а не на raw/products.txt или путь архива. Операция -rm удаляет указанный файл. Рекурсивное удаление и шаблон с подстановкой не нужны:

hdfs dfs -rm /user/labex/file-lifecycle/scratch/disposable.txt

Команда сообщает об удалении указанного файла. Повторный запуск сообщил бы об отсутствии файла; это повод изучить состояние, а не расширять область удаления. Выведите содержимое scratch, чтобы убедиться в отсутствии оставшихся временных файлов:

hdfs dfs -ls /user/labex/file-lifecycle/scratch

Для пустого каталога записи файлов не выводятся. Наконец, проверьте два файла, которые должны остаться:

hdfs dfs -ls /user/labex/file-lifecycle/raw/products.txt /user/labex/file-lifecycle/archive/products-reviewed.txt

Оба пути должны присутствовать в списке. Вы завершили жизненный цикл, сохранив оригинал: загрузили, скопировали, архивировали, выгрузили, измерили и удалили только временные рабочие данные.

Итоги

Вы сохранили исходные данные нетронутыми, создав копию для проверки, переместив её в архив и выгрузив в локальную файловую систему. Вы разобрались в числе файлов и размерах хранения, изучили настройку корзины и удалили только указанный временный файл.

Далее вы примените эти привычки к ежедневным пакетам из нескольких файлов. Знать, какие файлы входят в пакет, так же важно, как уметь загружать их.