我对一般的多线程有一个想法,但不确定它是如何在Hadoop中使用的。
根据我的知识,Yarn负责管理/控制Spark / Mapreduce作业资源,不能在这里考虑多线程。不确定它是否可以在Hadoop Eco System中的任何其他地方使用。
如果有人能提供一些相关信息,我将不胜感激。
非常感谢,
答案 0 :(得分:2)
实际上,YARN负责管理Application Master(MR-AppMaster或Spark-Driver)请求的容器的资源分配和解除分配。所以它们之间的RPC都是关于资源协议的协商,它没有考虑任何在MapReduce和Spark中运行任务的细节。
对于MapReduce-Hadoop,每个任务(mapper或reducer)都是在JVM上运行的单个进程,它不会在这里使用任何多线程。
对于Spark,每个执行程序实际上都由许多工作线程组成。这里每个Spark任务都对应于MapReduce中的每个任务(单个进程)。因此Spark确实基于多线程模型实现了更低的功能 JVM的开销和任务之间的数据混乱。
根据我的经验,多线程模型降低了开销,但却遭受了容错的巨大成本。如果Spark中的执行程序失败,则执行程序内运行的所有任务都必须重新运行,但只需要为MapReduce重新运行单个任务。 Spark也遭受巨大的内存压力,因为执行程序中的所有任务都需要根据RDD缓存数据。但是Mapreduce任务一次只处理一个块。
希望这有用。
答案 1 :(得分:0)
可以在Spark中运行多线程代码。以Spark中的Java代码为例
AnyCollections.parallelStream().forEach(temo -> {
// Add your spark code here.
}
现在,基于驱动程序中的内核数量,它将生成多个执行程序并并行执行操作。