2016-11-16 23 views
2

我对多线程有一个总体概念,但不确定它是如何在Hadoop中使用的。根据我的知识,Yarn负责管理/控制Spark/Mapreduce作业资源,在这里无法想到多线程。不确定它是否可以在Hadoop Eco System的其他地方使用。Hadoop/Spark中的多线程

如果有人能提供这方面的信息,我将不胜感激。

非常感谢,

+0

我不确定Spark,但是在hadoop上,您的映射器和reducer作业本身可以作为多线程作业实现。参考这个 - 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

关于火花,请[see](http://stackoverflow.com/questions/36671644/how-does-spark-achieve在多核或超线程中的并行处理任务) –

回答

2

实际上,纱线负责管理由申请硕士要求(MR-AppMaster或无火花驱动程序)容器中的资源分配和去分配。所以它们之间的RPC都是关于资源协议的谈判,并没有考虑任何细节如何在MapReduce和Spark内部运行任务。

对于MapReduce-Hadoop,每个任务(映射器或简化器)都是在JVM上运行的单个进程,它在此处不使用任何多线程。

对于Spark,每个执行程序实际上都由许多工作线程组成。这里每个Spark任务都对应于MapReduce中的每个任务(单个进程)。因此,Spark确实实现了基于多线程模型的更低的
JVM开销和任务之间的数据混洗。

根据我的经验,多线程模型降低了开销,但却遭受了巨大的容错成本。如果Spark中的执行程序失败,则执行程序内部运行的所有任务必须重新运行,但只有单个任务需要重新运行MapReduce。此外,Spark还承受着巨大的内存压力,因为执行器端的所有任务都需要根据RDD缓存数据。但Mapreduce任务一次只能处理一个块。

希望这是有帮助的。