2016-11-16 20 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任務一次只能處理一個塊。

希望這是有幫助的。