Как можно менять данные в файле hdfs

Обновлено: 06.07.2024

HDFS (Hadoop Distributed File System) — распределенная файловая система, используемая в проекте Apache Hadoop предназначенная для хранения файлов больших размеров, поблочно распределённых между узлами вычислительного кластера. Все блоки в HDFS (кроме последнего блока файла) имеют одинаковый размер, и каждый блок может быть размещён на нескольких узлах, размер блока и коэффициент репликации (количество узлов, на которых должен быть размещён каждый блок) определяются в настройках на уровне файла. Благодаря репликации обеспечивается устойчивость распределённой системы к отказам отдельных узлов. Файлы в HDFS могут быть записаны лишь однажды (модификация не поддерживается), а запись в файл в одно время может вести только один процесс. Организация файлов в пространстве имён — традиционная иерархическая: есть корневой каталог, поддерживается вложение каталогов, в одном каталоге могут располагаться и файлы, и другие каталоги.

Развёртывание экземпляра HDFS предусматривает наличие центрального узла имён (англ. name node), хранящего метаданные файловой системы и метаинформацию о распределении блоков, и серии узлов данных (англ. data node), непосредственно хранящих блоки файлов. Узел имён отвечает за обработку операций уровня файлов и каталогов — открытие и закрытие файлов, манипуляция с каталогами, узлы данных непосредственно отрабатывают операции по записи и чтению данных. Узел имён и узлы данных снабжаются веб-серверами, отображающими текущий статус узлов и позволяющими просматривать содержимое файловой системы. Административные функции доступны из интерфейса командной строки.

HDFS является неотъемлемой частью Hadoop, однако, Hadoop поддерживает работу и с другими распределёнными файловыми системами без использования HDFS, поддержка Amazon S3 и CloudStore реализована в основном дистрибутиве. С другой стороны, HDFS может использоваться не только для запуска MapReduce-заданий, но и как распределённая файловая система общего назначения, в частности, поверх неё реализована распределённая NoSQL-СУБД Apache HBase, в её среде работает масштабируемая система машинного обучения Apache Mahout. [Источник 1]

Содержание

Архитектура

HDFS имеет архитектуру master/slave. Кластер HDFS состоит из одного NameNode, главного сервера, который управляет пространством имен файловой системы и регулирует доступ к файлам клиентами. Кроме того, существует несколько DataNodes, обычно по одному на узел в кластере, которые управляют хранилищем, прикрепленные к узлам, на которых они запускаются. HDFS предоставляет пространство имен файловой системы и позволяет сохранять пользовательские данные в файлах. Внутри файл разбивается на один или несколько блоков, и эти блоки хранятся в наборе DataNodes. NameNode выполняет операции с пространством имен файловой системы, такие как открытие, закрытие и переименование файлов и каталогов. Он также определяет отображение блоков в DataNodes. DataNodes отвечают за обслуживание запросов на чтение и запись от клиентов файловой системы. DataNodes также выполняют создание, удаление и репликацию блока по команде из NameNode. Архитектура HDFS изображена на рисунке 1.

Рисунок 1 – Архитектура HDFS


Существование единого NameNode в кластере значительно упрощает архитектуру системы. NameNode - это арбитр и репозиторий для всех метаданных HDFS. Система разработана таким образом, что пользовательские данные никогда не проходят через NameNode. [Источник 2]

Пространство имен файловой системы

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

NameNode поддерживает пространство имен файловой системы. Любые изменения в пространстве имен файловой системы или его свойствах регистрируются узлом NameNode. Приложение может указать количество реплик файла, которое должно поддерживаться HDFS. Количество копий файла называется коэффициентом репликации этого файла. Эта информация хранится в NameNode.

Механизм репликации

HDFS предназначен для надежного хранения очень больших файлов на машинах в большом кластере. Он хранит каждый файл в виде последовательности блоков; все блоки в файле, кроме последнего блока, имеют одинаковый размер. Блоки файлов реплицируются для отказоустойчивости. Размер блока и коэффициент репликации настраиваются для каждого файла. Приложение может указывать количество реплик файла. Коэффициент репликации может быть указан во время создания файла и может быть изменен позже. Файлы в HDFS записываются один раз и имеют строго одного автора в любое время.

  • выбор новых DataNode-серверов для новых реплик
  • балансировка размещения данных по DataNode-серверам [Источник 3]

Аналогичные действия производятся в случае повреждении реплик или в случае увеличения количества реплик присущих каждому блоку.

Размещение реплик имеет решающее значение для надежности и производительности HDFS. Оптимизация размещения реплик отличает HDFS от большинства других распределенных файловых систем. Это функция, которая требует большого количества настроек и опыта. Цель политики размещения реплик в стойке - повысить надежность, доступность и пропускную способность сети.

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

NameNode определяет идентификатор стойки, к которому принадлежит каждый DataNode, посредством процесса, описанного в Hadoop Rack Awareness. Простая, но неоптимальная политика заключается в размещении реплик на уникальных стойках. Это предотвращает потерю данных при сбое всей стойки и позволяет использовать полосу пропускания с нескольких стоек при чтении данных. Эта политика равномерно распределяет реплики в кластере, что упрощает балансировку нагрузки при сбое компонента. Тем не менее, эта политика увеличивает стоимость записи, поскольку запись требует передачи блоков на несколько стоек.

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

Постоянство метаданных файловой системы

Пространство имен HDFS хранится в NameNode. NameNode использует журнал транзакций, называемый EditLog, для постоянной записи каждого изменения, которое происходит с метаданными файловой системы. Например, создание нового файла в HDFS заставляет NameNode вставить запись в EditLog, указывающую на это. Аналогично, изменение коэффициента репликации файла приводит к вставке новой записи в EditLog. NameNode использует файл в своей локальной файловой системе ОС для хранения EditLog. Все пространство имен файловой системы, включая отображение блоков в файлы и свойства файловой системы, хранится в файле с именем FsImage. FsImage также сохраняется в виде файла в локальной файловой системе NameNode.

NameNode хранит изображение всего пространства имен файловой системы и файла Blockmap в памяти. Этот ключевой элемент метаданных спроектирован так, чтобы быть компактным, так что NameNode с 4 ГБ ОЗУ достаточно для поддержки огромного количества файлов и каталогов. Когда NameNode запускается, он считывает FsImage и EditLog с диска, применяет все транзакции из EditLog к представлению FsImage в памяти и сбрасывает эту новую версию в новый FsImage на диске. Затем он может усечь старый EditLog, потому что его транзакции были применены к постоянному FsImage. Этот процесс называется контрольной точкой. В текущей реализации контрольная точка возникает только при запуске NameNode. Ведется работа по поддержке периодической проверки в ближайшем будущем.

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

Организация данных

Блоки данных

HDFS предназначена для поддержки очень больших файлов. Приложения, совместимые с HDFS, - это приложения, работающие с большими наборами данных. Эти приложения записывают свои данные только один раз, но читают их один или несколько раз и требуют, чтобы эти чтения выполнялись со скоростью потоковой передачи. HDFS поддерживает семантику «записал один раз -- прочитал много» для файлов. Типичный размер блока, используемый HDFS, составляет 64 МБ. Таким образом, файл HDFS разбивается на фрагменты по 64 МБ, и, если возможно, каждый блок будет находиться на разных узлах DataNode.

Обработка клиентских запросов

Клиентский запрос на создание файла не сразу достигает NameNode. Фактически изначально клиент HDFS кэширует данные файла во временный локальный файл. Записи приложения прозрачно перенаправляются в этот временный локальный файл. Когда локальный файл накапливает данные стоимостью более одного размера блока HDFS, клиент связывается с NameNode. NameNode вставляет имя файла в иерархию файловой системы и выделяет для него блок данных. NameNode отвечает на запрос клиента идентификатором DataNode и целевым блоком данных. Затем клиент сбрасывает блок данных из локального временного файла в указанный DataNode. Когда файл закрыт, оставшиеся неперезаписанные данные во временном локальном файле передаются в узел данных. Затем клиент сообщает NameNode, что файл закрыт. На этом этапе NameNode фиксирует операцию создания файла в постоянном хранилище. Если NameNode отключается до закрытия файла, файл теряется.

Вышеуказанный подход был принят после тщательного рассмотрения целевых приложений, работающих на HDFS. Эти приложения нуждаются в потоковой записи в файлы. Если клиент пишет в удаленный файл напрямую, без какой-либо буферизации на стороне клиента, скорость сети и перегрузка в сети значительно влияют на пропускную способность. Этот подход не без прецедента. Ранее распределенные файловые системы, например AFS использует кэширование на стороне клиента для повышения производительности. Требование POSIX было смягчено для достижения более высокой производительности загрузки данных.

Конвейерная репликация

Когда клиент записывает данные в файл HDFS, его данные сначала записываются в локальный файл, как описано в предыдущем разделе. Предположим, что файл HDFS имеет коэффициент репликации три. Когда локальный файл накапливает полный блок пользовательских данных, клиент извлекает список узлов данных из узла имен. Этот список содержит узлы данных, в которых будет размещаться реплика этого блока. Затем клиент сбрасывает блок данных в первый DataNode. Первый DataNode начинает получать данные небольшими порциями (4 КБ), записывает каждую часть в свой локальный репозиторий и передает эту часть во второй DataNode в списке. Второй DataNode, в свою очередь, начинает получать каждую часть блока данных, записывает эту часть в свой репозиторий и затем сбрасывает эту часть в третий DataNode. Наконец, третий DataNode записывает данные в свой локальный репозиторий. Таким образом, DataNode может получать данные из предыдущего в конвейере и в то же время пересылать данные следующему в конвейере. Таким образом, данные передаются от одного DataNode к следующему.

Надежность

Основная задача HDFS - надежное хранение данных даже в случае сбоев. Наиболее распространены три типа сбоев: сбои NameNode, сбои DataNode и сетевые разделы.

Отказ диска данных, heartbeat и повторная репликация

Перебалансировка кластеров

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

Целостность данных

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

Ошибка метаданных на диске

FsImage и EditLog являются центральными структурами данных HDFS. Повреждение этих файлов может привести к неработоспособности экземпляра HDFS. По этой причине NameNode может быть настроен для поддержки нескольких копий FsImage и EditLog. Любое обновление FsImage или EditLog приводит к тому, что каждый из FsImages и EditLogs обновляется синхронно. Это синхронное обновление нескольких копий FsImage и EditLog может снизить скорость транзакций в секунду, поддерживаемую NameNode. Однако это ухудшение допустимо, поскольку, хотя приложения HDFS по своей природе очень интенсивно используют данные, они не требуют интенсивного использования метаданных. Когда NameNode перезапускается, он выбирает последний совместимый FsImage и EditLog для использования.

Машина NameNode является единственной точкой отказа для кластера HDFS. Если машина NameNode выходит из строя, необходимо ручное вмешательство. В настоящее время автоматический перезапуск и аварийное переключение программного обеспечения NameNode на другой компьютер не поддерживается.

Еще материалы по теме

Один на всех: реализация единого API для унифицированной аналитики больших данных c Apache Flink и Kafka в Pinterest

Один на всех: реализация единого API для унифицированной аналитики больших…

PXF, Greenplum и оптимизация SQL-запросов к разным источникам данных

PXF, Greenplum и оптимизация SQL-запросов к разным источникам данных

AVRO и JSON В Apache Kafka: краткий ликбез по реестру схем

AVRO и JSON В Apache Kafka: краткий ликбез по реестру…

Напиши отзыв и выиграй

Новое на сайте
Отзывы на Google

BigDataSchool

Курсы от инженеров и для инженеров. Всё чётко, по делу. Тренеры глубоко знают продукты, о которых читают лекции. read more

Принимал участие в обучении по курсу "KAFKA: Администрирование кластера Kafka". В целом понравилось, но хотелось бы более качественной организации работы с лабгайдами. Когда лектор выполняет лабораторную работу, не совсем удобно выполнять её параллельно - где-то отстаешь, где-то убегаешь вперед. Может будет лучше разделить на более мелкие модули. read more

Прошел Курс Администрирование кластера Hadoop. Подача материала хорошая, размеренная. Преподаватель отвечает на все вопросы, и пытается как можно прозрачней приподнести материал. read more

Обучался на программе HADM. Подача материала доступная. Порадовало соотношение теории и практики 50/50. Отзывчивый преподаватель. Однозначно рекомендую. read more

Заканчиваю прохождения курса "ADH: Администрирование кластера Arenadata Hadoop". Хочу сказать, что выстроен грамотный план обучения, где отслеживается отличное соотношение практики и теории. Преподаватель, Комисаренко Николай, обладает отличным чувством юмора, что позволило не скучать на серьезных темах, и обладает отличным навыком объяснять сложные вещи простыми словами. На курс приходил с большим числом вопросов, на все из которых получил грамотные ответы, после чего все разложилось по полочкам. read more

В декабре 2020 прошел курс "Администрирование кластера Kafka". Курс проводился удаленно. В части организации обучения придраться не к чему. Необходимую информацию прислали заранее, лабораторный стенд и портал обучения работали стабильно. Немного разочаровали лабораторные работы. На месте BigDataSchool я бы их переделал. В документах с лабами нужно сделать нормальное форматирование и нумерацию пунктов. Все пункты, необходимые для выполнения, нужно сделать в виде текста. В лабах много работ по созданию «обвязки» kafka (создание самоподписных сертификатов, развертывание MIT и т.п), которые можно сделать заранее. Это позволит студентам уделять больше времени изучению самой kafka. BigDataSchool идет навстречу и позволяет пользоваться лабораторным стендом гораздо дольше установленных часов обучения. Это очень к стати, если в течении дня Вы вынуждены отвлекаться от обучения. В целом, курс дает хорошую базу по kafka. Преподаватель хорошо подает материал, делает акценты в нужных местах, подробно отвечает на вопросы. read more

С 30 ноября по 4 декабря прошел курс "Администрирование кластера Hadoop". Учитывая, что я обладал довольно поверхностной информацией в данной теме (я CIO) - ушел с курсов просветленным. Многое стало понятным, в процессе обучения наложил знания на существующую инфраструктуру компании, в которой работаю. Рекомендую коллегам руководителям в ИТ - прокачаться на данном курсе, вы поймете куда двигаться в ближайшие 2-3 года. Админам, работающим или стремящимся в BigData- обязательно! Рекомендация - настойчиво, для тех кто "думает, что знает": перед курсом уделите время работе с командной строкой Linux! Total recall - обязательное условие. Много практической работы, и если есть затык в Linux - будете безнадежно отставать при выполнении лабораторных работ. read more

В октябре прошел курс Анализ данных с Apache Spark, это был второй раз, когда я обучался в этом месте. В целом, все хорошо, думаю что не последний. Не могу не подчеркнуть профессионализм преподавателя Королева Михаила, отвечал на поставленные вопросы, делился своим опытом. В общем, рекомендую! read more

Прошел тут курс "NIFI: Кластер Apache NiFi", вёл Комисаренко Николай. Живое и понятное обучение. Преподаватель отвечал на все вопросы от самых глупых, до самых умных и это было приятно. Так же порадовало, что преподаватель не идёт по заранее проложенным рельсам, а проходит весь путь вместе с вами, стараясь привнести, что-то новое. read more

Спасибо за обучение!

Очень крутое место, много практики, понятное объяснение заданной темы. Еще вернусь :) read more

Обучался на курсе HADM администрирование кластера Arenadata Hadoop. Интересный курс, хорошая подача. read more

Обучался на курсе по администрированию Apache Kafka. Хорошая подача материала, интересные практические задачи. Возникающие вопросы доходчиво и ясно объясняют. Остался очень доволен. read more

Был на курсе "Администрирование кластера Hadoop". Отличная подача материала. Очень много практики и технических подробностей. Подробный обзор стека технологий, платформы и инструментов. Рекомендую! read more

Учился на курсе Администрирование Hadoop. Курс вёл Николай Комиссаренко. Отлично подготовленная, продуманная, системная программа курса. Практические занятия организованы так, что у студентов есть возможность познакомиться с реальными особенностями изучаемого продукта. Отключил голову и прощёлкал лабы по книжке - здесь не работает. Преподаватель легко и развёрнуто отвечает на возникающие вопросы не только по теме предмета, но и по смежным. read more

Прошёл курс по администрированию Apache Kafka. Очень понравилась как подача материала, так и структура курса. Только вот времени маловато оказалось. не всё успел доделать, но это уже не к курсу претензии :). Практики было довольно много, и это хорошо read more

Прошёл курс "Hadoop для инженеров данных" у Николая Комиссаренко. Информация очень актуальна и полезна, заставляет задуматься о текущих методах работы с большими данными в нашей компании и, возможно, что-то поменять. Занятия с большим количеством практики, поэтому материал хорошо усваивается. Отдельное спасибо Николаю за то, что некоторые вещи объяснял простым языком, понятным даже для "чайников" в области Hadoop. read more

I did not find any disadvantages in the course. Pluses: + A lot of practice (50% of the time). + The teacher can explain difficult topics easy way. + Announced topics were considered. Besides additional materials were studied. read more

Посетил курс администрирование Hadoop. На курсе устанавливали кластер с нуля на виртуалках в облаке Amazon. Настраивали Kerberos, тестировали выполнение задач на кластере, управление ресурсами кластера. Т.к. кластер развернут в облаке, после завершения занятий можно самостоятельно работать с кластером из дома. Лекции вел Николай Комиссаренко, после обучения предоставил все материалы. На занятиях отвечал на дополнительные вопросы, рассмотрели как решить пару живых задач от студентов. Хороший курс для начала изучения BigData. Update Дополнительно прошел обучения по Airflow и NiFi. Курсы двух дневные упор на занятиях делался на использовании продуктов, администрированию уделялось меньше времени. Т.к. курсы короткие, то перед занятиями желательно почитать обзорные статьи по продуктам, чтобы не терять время на базовое погружение и задавать более предметные вопросы. Перед началом занятий желательно связаться с школой и запросить что больше интересуется на обучении. Может быть предложить свои кейсы, чтобы на лабораторных отработать не только общий функционал. read more

Был на основах хадупа, все материалы описаны доступным языком. В частности хочу отметить преподавателя Николая Комисаренко, как очень квалифицированного преподавателя и специалиста. read more

Отличные курсы по "Администрированию Hadoop" и отличная организация проведения занятий, все по делу и понятно. Очень понравилось, знания получены основательные. Материал подаётся основательно. Постараюсь ещё попасть на другие курсы. read more

Курс по Isilon у Николая Комиссаренко мне тоже понравился. Грамотный и отзывчивый. Возникали вопросы по курсу он отвечал на все вопросы. Спасибо. Успехов ему read more

Посетил курс администрирование Hadoop. На курсе устанавливали кластер с нуля на виртуалках в облаке Amazon. Настраивали Kerberos, тестировали выполнение задач на кластере, управление ресурсами кластера. Т.к. кластер развернут в облаке, после завершения занятий можно самостоятельно работать с кластером из дома. Лекции вел Николай Комиссаренко, после обучения предоставил все материалы. На занятиях отвечал на дополнительные вопросы, рассмотрели как решить пару живых задач от студентов. Хороший курс для начала изучения BigData. read more

Эффективный практический курс. Прошел курс Администрирование Hadoop в октябре 2018. Хорошо наполненный материал, оптимальная длительность курса и все делалось своими руками. Местами было непросто, но преодолимо. Оправдал все ожидания, после курса появилось целостное понимание создания и работы кластера. Николай, большое спасибо read more

Прошёл курс по администрированию Hadoop Cloudera. Отличная "живая" подача материала на "простом" языке. Как плюс работа с кластером построена на платформе AWS. На курсах не скучно, рекомендую! read more

Я узнал много нового посетив курс уважаемого Николая Комиссаренко по айзелону. Очень грамотный специалист обучение было очень полезным и грамотным. Спасибо вам большое read more

Изучение основных операций для работы с распределенной файловой системой HDFS.

  • подготовка окружения
  • запуск shell-клиента
  • изучение основных shell-команд

Подготовка рабочего окружения

Работа на сервере

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

  • указать сервер 10.101.26.201, порт 22
  • логин (vtizi) и пароль (секретный)

Работа с виртуальной машиной

Для выполнения задания вне сети кафедры необходимо подготовить виртуальное окружение:

  • настроить окружения для запуска виртуальных машин VMware
  • скачать и развернуть виртуальную машину от компании Cloudera по ссылке
  • ИЛИ сразу скачать готовый образ для VMWare

Выбор параметров загружаемого образа

Картинка с запущенной виртуальной машиной

Задание на лабораторную работу

Запуск shell-клиента HDFS в терминале

Нативный shell-клиент для HDFS позволяет работать с файловой системой через командную строку. Для использования shell-клиента через командную строку, необходимо в терминале запустить утилиту hdfs:

  • hdfs -- утилита работы с HDFS;
  • dfs -- специальный параметр, который обозначает, что мы будем работать с непосредственно с распределенной файловой системой. Могут быть указаны другие параметры;
  • <command> -- команда, которую мы хотим применить к файловой системе;
  • <command> -- опции команды (могут отсутствовать);
  • <URI> -- путь в виде URI-схемы. URI (/ˌjuː ɑːr ˈaɪ/англ. Uniform Resource Identifier) — унифицированный (единообразный) идентификатор ресурса. символьная строка, позволяющая идентифицировать какой-либо ресурс: документ, изображение, файл, службу, ящик электронной почты и т. д. Прежде всего, речь идёт о ресурсах сети Интернет и Всемирной паутины. URI предоставляет простой и расширяемый способ идентификации ресурсов. Расширяемость URI означает, что уже существуют несколько схем идентификации внутри URI, и ещё больше будет создано в будущем.

Пример команды для просмотра содержимого (листинг) корневой директории:

Запуск терминала Запуск на виртуальной машине

Задание пути в виде URI-схемы

  • Local Указываем file:// -- схема, а путь -- /to/path/dir . Аналогична команде ls /to/path/dir локальной файловой системы
  • HDFS Просмотр файлов в распределенной файловой системе HDFS

где hdfs:// -- схема, а localhost/to/path/dir -- расположение namenode, а далее путь к файлам в HDFS. На сервере:

В виртуальной машине:

  • fs.default.name=hdfs://localhost Чтобы постоянно не указывать схему и сервер при работе с одной и той же HDFS применяется упрощенный способ доступа к файлам HDFS без схемы и части авторизации. В конфигурации указан специальный параметр, который автоматически будет подставляться в схему

В HDFS клиенте реализованы стандартные команды для работы с файловой системой. Называются похоже на команды bash (локальной файловой системы).

  • похожие на команды Linux : cat, rm, ls, du, . ;
  • специфичные для HDFS операции: setrep -- смена фактора репликации;

получить список всех команд в HDFS-клиенте

показать информацию по команде:

ls -- самая популярная команда, выводит листинг директории и статистику файлов. Если запустим команду для определенной директории, то увидим ее содержимое:

  • сколько элементов в данной директории items
  • файлы, которые содержатся в директории
  • статистика -- указание прав доступа и типа файла (поддиректории), фактор репликации (у директории -- нет), принадлежность файла (пользователь и группа), время создания. Параметры команды:
  • -r -- вывести статистику по поддиректориям Пример команды:

3. Команда mkdir

4. Команда чтения файлов cat

Выводит источник в стандартный поток вывода -- stdout .

  • вывести весь файл hdfs dfs -cat /dir/file.txt -- для больших файлов очень долго и не понятно для чего
  • перенаправление потока вывода через каналы pipe в утилиты less, head, tail
  • получить первые 100 строк из файла hdfs dfs -cat /dir/file.txt | head -n 100

5. Команда чтения файлов text

Аналог команды cat , но разархивирует архивы:

Если файл не заархивирован, то работа команд text и cat будет одинакова.

6. Команда чтения файлов tail

Выводит последние строчки файла:

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

Полезна для просмотра, например, логов.

7. Копирование данных в shell

cp -- копирование файла из одного места в другое. Годится только для небольших файлов!

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

distcp -- копирование больших файлов или множества файлов.

это команда не часть команды dfs . При использовании команды distcp блоки файла копируются параллельно и независимо друг от друга. Файл копируется быстро. Для больших файлов. mv -- перемещение файла из одного места в другое

Физически перемещение данных не происходит. Указание Namenode, что файл теперь будет храниться в другой директории.

put , copyFromLocal -- копирование локального файла в директорию HDFS

get , copyToLocal -- копирование файла из HDFS в локальную файловую систему

8. Команда удаления в shell

rm -- удаляет файл в корзину. При случайном удалении большого файла его очень трудно восстановить. Поэтому файл сначала помещается в корзину. Корзина -- специальная для каждого пользователя директория. Файлы из нее можно удалить или скопировать на прежнее место. Автоматически очистка корзины задана в параметрах HDFS. Если нужно освободить место в HDFS, то можно удалить файл из корзины.

9. Команда выведения статистики в shell

du -- размер файла или директории в байтах du -h -- размер файла или директории в удобно-читаемом формате

Шпаргалка по командам Hadoop HDFS

Кластер HDFS состоит из главного сервера (namenode), который управляет пространством имен файловой системы и контролирует доступ к файлам. Другие узлы в кластере являются серверами datanodes, которые управляют хранилищем, подключенным к узлам, а также отвечают за создание/удаление/репликацию блоков по указанию namenodes. HDFS написана на языке Java, поэтому любые узлы, поддерживающие Java, могут запускать nameNode или dataNode приложения.

В этом руководстве представлена шпаргалка по командам Hadoop HDFS. Она пригодится вам при работе с этими командами в распределенной файловой системе Hadoop). Ранее в командах использовался hadoop fs, сейчас он устарел, поэтому мы используем hdfs dfs. Все команды Hadoop вызываются скриптом bin/hadoop. Эта шпаргалка содержит множество команд, я бы сказал, почти все команды, которые часто используются как разработчиками, так и администраторами Hadoop. Она довольно полная, я также показывает все опции, которые могут быть использованы одной и той же командой. В любом случае, если при выполнении команды вы получаете ошибку, не паникуйте и просто проверьте синтаксис команды, возможно, проблема в синтаксисе команды или в источнике или пункте назначения, который вы указали.

Мы сгруппировали команды в следующие категории:

1) Список файлов
2) Чтение/запись файлов
3) Загрузка/выгрузка файлов
4) Управление файлами
5) Владение и проверка
6) Файловая система
7) Администрирование

Шпаргалка по командам Hadoop HDFS

Вы можете скачать отсюда pdf-версию шпаргалки по командам hadoop hdfs или распечатать файл изображения формата A4.

Читайте также: