Поиск…


замечания

Хорошее объяснение HDFS и то, как он работает.

Синтаксис должен содержать команды, которые могут использоваться в HDFS.

HDFS - распределенная файловая система Hadoop

Распределенная файловая система Hadoop (HDFS) представляет собой файловую систему на базе Java, которая обеспечивает масштабируемое и надежное хранилище данных, предназначенное для охвата больших кластеров товарных серверов. HDFS, MapReduce и YARN образуют ядро ​​Apache ™ Hadoop®.

HDFS отличается высокой отказоустойчивостью, что достигается за счет сохранения нескольких копий (по умолчанию 3) данного блока данных на нескольких узлах.

Поиск файлов в HDFS

Чтобы найти файл в распределенной файловой системе Hadoop:

hdfs dfs -ls -R / | grep [search_term]

В приведенной выше команде,

-ls - для записи файлов

-R для рекурсивной (итерации по вспомогательным каталогам)

/ из корневого каталога

| для вывода вывода первой команды на второй

Команда grep для извлечения соответствующих строк

[search_term] имя файла, которое нужно найти в списке всех файлов в файловой системе hadoop.

Альтернативно, приведенная ниже команда также может использоваться для поиска, а также применять некоторые выражения:

hadoop fs -find / -name test -print

Находит все файлы, соответствующие указанному выражению, и применяет к ним выбранные действия. Если путь не указан, по умолчанию используется текущий рабочий каталог. Если выражение не указано, по умолчанию используется значение -print.

Признаются следующие первичные выражения:

  • name pattern
  • iname pattern

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

  • print
  • print0Always

Оценивает значение true. Заставляет текущее имя пути записываться в стандартный вывод. Если -print0 выражение -print0 добавляется символ ASCII NULL.

Признаны следующие операторы:

expression -a expression
expression -and expression
expression expression

Блоки и разделители HDFS

  1. Размер блока и блоки в HDFS : HDFS имеет концепцию хранения данных в блоках всякий раз, когда загружается файл. Блоки - это физические разделы данных в HDFS (или в любой другой файловой системе, если на то пошло).

    Всякий раз, когда файл загружается в HDFS, он разделяется физически (да, файл разделен) на разные части, известные как блоки. Количество блоков зависит от значения dfs.block.size в hdfs-site.xml

    В идеале размер блока устанавливается на большое значение, такое как 64/128/256 МБ (по сравнению с 4 КБ в обычной FS). Значение размера блока по умолчанию для большинства дистрибутивов Hadoop 2.x составляет 128 МБ. Причина более высокого размера блока заключается в том, что Hadoop предназначен для обработки данных PetaBytes с каждым файлом в диапазоне от нескольких сотен мегабайт до порядка TeraBytes.

    Скажем, например, у вас есть файл размером 1024 МБ. если размер вашего блока составляет 128 МБ, вы получите 8 блоков по 128 МБ каждый. Это означает, что вашему namenode необходимо будет хранить метаданные из 8 x 3 = 24 файлов (3 - коэффициент репликации).

    Рассмотрим тот же сценарий с размером блока 4 КБ. Это приведет к тому, что 1GB / 4KB = 250000 блоков, и это потребует, чтобы namenode сохранил метаданные для 750000 блоков всего за 1GB-файл. Поскольку вся эта информация, связанная с метаданными, хранится в памяти, больший размер блока предпочтительнее, чтобы сохранить этот бит дополнительной нагрузки на NameNode.

    Теперь снова размер блока не установлен на чрезвычайно высокое значение, например, 1 ГБ и т. Д., Потому что, в идеале, для каждого блока данных запускается 1 картограф. Поэтому, если вы установите размер блока в 1 ГБ, вы можете потерять параллелизм, который может привести к более низкой пропускной способности в целом.

2.) Разделить размер в HDFS : Разделение в обработке Hadoop - это логические фрагменты данных. Когда файлы делятся на блоки, hasoop не уважает никакие файловые bopundaries. Он просто разбивает данные в зависимости от размера блока. Скажем, если у вас есть файл 400 МБ, с 4 строками, и каждая строка имеет 100 МБ данных, вы получите 3 блока по 128 MB x 3 и 16 MB x 1 . Но когда расчитываются входные расщепления, в то время как prceossing данных, границы файлов / записей сохраняются в виду, и в этом случае у нас будет 4 входных разделения по 100 МБ каждый, если вы используете, скажем, NLineInputFormat .

Разделение размера также может быть задано для каждого задания, используя свойство mapreduce.input.fileinputformat.split.maxsize

Очень хорошее объяснение Blocks vs Splits можно найти в этом SO Ответ /



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow