Что такое YARN (Hadoop) - очень простой пример - PullRequest
0 голосов
/ 17 мая 2018

Я новичок в Hadoop и пытаюсь понять это. Я нашел хорошее объяснение HDFS и MapReduce с очень простыми примерами (см. ниже). Но я не могу Google любой подобный простой пример для YARN. Может кто-нибудь объяснить это (как для непрофессионала)?

HDFS

Подумайте о файле, который содержит номера телефонов для всех в Соединенных Штатах. Состояния; люди с фамилией, начинающейся с A, могут храниться на сервере 1, B на сервере 2 и т. Д.

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

Кроме того, эта избыточность позволяет кластеру Hadoop разбить работу на меньшие куски и выполнить эти задания на всех серверах в кластере для лучшего масштабируемость. Наконец, вы получаете преимущество локальности данных, что очень важно при работе с большими наборами данных. Мы подробно опишем эти важные преимущества позже в эта глава.

MapReduce

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

Торонто, 20 Уитби, 25 Нью-Йорк, 22 Рим, 32 Торонто, 4 Рим, 33 Нью-Йорк, 18

Из всех собранных нами данных мы хотим найти максимальную температуру для каждого города во всех файлах данных (обратите внимание, что каждый файл может иметь один и тот же город представлен несколько раз). Используя инфраструктуру MapReduce, мы можем разбить это на пять задач карты, где каждый картограф работает над одним из пяти файлы и задача картографа проходит через данные и возвращает максимум температура для каждого города. Например, результаты, полученные от одного картографа Задача для данных выше будет выглядеть так:

(Торонто, 20) (Уитби, 25) (Нью-Йорк, 22) (Рим, 33)

Давайте возьмем другие четыре задачи маппера (работа с остальными четырьмя файлами не показано здесь) получены следующие промежуточные результаты:

(Торонто, 18) (Уитби, 27) (Нью-Йорк, 32) (Рим, 37) (Торонто, 32) (Уитби, 20) (Нью-Йорк, 33) (Рим, 38) (Торонто, 22) (Уитби, 19) (Нью-Йорк, 20) (Рим, 31) (Торонто, 31) (Уитби, 22) (Нью-Йорк, 19) (Рим, 30)

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

(Торонто, 32) (Уитби, 27) (Нью-Йорк, 33) (Рим, 38)

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

Там результаты каждого города будут сведены к одному счету (сумма все города) для определения общей численности населения империи. Это отображение людей в города, параллельно, а затем объединение результатов (сокращение) гораздо эффективнее, чем посылать одного человека для подсчета каждого человека в Империя в серийном стиле.

1 Ответ

0 голосов
/ 17 мая 2018

Скажем, у вас есть 4 машины с 4 ГБ оперативной памяти и двухъядерными процессорами.
Вы можете представить YARN приложению, способному распределять и распараллеливать рабочие нагрузки, например MapReduce, и YARN ответит, что может принять 16 ГБ рабочей нагрузки приложения на 8 ядер ЦП.

Не все узлы должны быть одинаковыми, некоторые могут использоваться с ресурсами GPU или с более высокой пропускной способностью памяти, но вы всегда будете ограничены наименьшим узлом в группе для любого работающего приложения ... И платформа решает на каком узле развернут ваш код, основываясь на доступных ресурсах, а не на вас. Когда NodeManager объединяется с датодой HDFS (они работают на одной машине), ваш код, пытающийся прочитать файл, будет пытаться запускаться на той машине, которая содержит части нужных вам файлов.

По сути, разделите ваше хранилище на маленькие куски (HDFS), предоставьте способ для чтения этих кусков в полные файлы (MapReduce) и используйте некоторый механизм обработки для справедливого или жадного распределения этой операции в пулы ресурсов (Ярмарочный планировщик YARN или Планировщик емкости)

...