Введение
Розничная компания получила файл с товарами. Одному коллеге нужна копия для проверки, другому — архивная версия, а вам нужно скачать проверенный файл для просмотра. Если при этих действиях случайно заменить или удалить оригинал, команда потеряет надёжный источник данных.
Жизненный цикл файла — совокупность действий, через которые он проходит: получение, использование, архивирование, выгрузка и последующее удаление. В 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
Оба пути должны присутствовать в списке. Вы завершили жизненный цикл, сохранив оригинал: загрузили, скопировали, архивировали, выгрузили, измерили и удалили только временные рабочие данные.
Итоги
Вы сохранили исходные данные нетронутыми, создав копию для проверки, переместив её в архив и выгрузив в локальную файловую систему. Вы разобрались в числе файлов и размерах хранения, изучили настройку корзины и удалили только указанный временный файл.
Далее вы примените эти привычки к ежедневным пакетам из нескольких файлов. Знать, какие файлы входят в пакет, так же важно, как уметь загружать их.



