2016-11-16 4 views
2

У меня есть идея многопоточности в целом, но не знаю, как она используется в Hadoop.Многопоточность в Hadoop/Spark

Основываясь на моих знаниях, пряжа отвечает за управление/контроль ресурсов Spark/Mapreduce, не может думать о многопоточности здесь. Не уверен, что его можно использовать где-либо еще в Hadoop Eco System.

Буду признателен, если кто-нибудь может предоставить некоторую информацию об этом.

Большого спасибо,

+0

Я не уверен насчет Spark, однако на вашем рабочем месте ваша работа с картой и редуктором может быть реализована как многопоточные задания. См. Это - https://hadoop.apache.org/docs/r2.6.2/api/org/apache/hadoop/mapreduce/Mapper.html#run(org.apache.hadoop.mapreduce.Mapper.Context) – Amit

+0

Восстановление Hadoop Mapreduce, пожалуйста [см. Мой ответ] (http://stackoverflow.com/a/39904444/647053) –

+0

относительно искры, пожалуйста [см.] (Http://stackoverflow.com/questions/36671644/how-does-spark-achieve -параллельность в пределах одной задачи-на-многоядерном или гипер-потоке) –

ответ

2

на самом деле, ПРЯЖА отвечает за управление распределением ресурсов и перераспределением для контейнеров, запрошенного Application Master (MR-AppMaster или искровых Driver). Таким образом, RPC между ними - все о согласовании соглашения о ресурсах, и он не рассматривает никаких подробностей о том, как задачи выполняются внутри MapReduce и Spark.

Для MapReduce-Hadoop каждая задача (mapper или редуктор) - это единственный процесс, запущенный на JVM, здесь он не использует многопоточность.

Для Spark каждый исполнитель фактически состоит из множества рабочих потоков. Здесь каждая задача Spark соответствует каждой задаче (единому процессу) в MapReduce. Таким образом, Spark реализует на основе многопоточных моделей для нижних
служебных данных JVM и перетасовки данных между задачами.

Основываясь на моих опытах, модели с несколькими нитями уменьшают накладные расходы, но страдают от огромной стоимости отказоустойчивости. Если исполнитель в Spark не работает, все задачи, выполняемые внутри исполнителя, должны повторно запускаться, но для MapReduce требуется повторная перезагрузка только одной задачи. Также Spark страдает от огромного давления в памяти, потому что все задачи, стоящие на стороне исполнителя, должны кэшировать данные с точки зрения RDD. Но задача Mapreduce обрабатывает только один блок за раз.

Надеюсь, это полезно.

Смежные вопросы