hadoop
Что такое HDFS?
Поиск…
замечания
Хорошее объяснение 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
Размер блока и блоки в 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 Ответ /