簡體   English   中英

在火花紗簇中,容器的工作方式取決於RDD分區的數量?

[英]In spark yarn cluster, How to work the container depends on the number of RDD partitions?

我對Apache Spark(紗線集群)有一個問題

在此代碼中,盡管創建10個分區,但是在紗線簇中,僅需要3個contatiner

val sc = new SparkContext(new SparkConf()。setAppName(“ Spark Count”))

    val sparktest = sc.textFile("/spark_test/58GB.dat",10)
    val test = sparktest.flatMap(line=> line.split(" ")).map(word=>(word, 1))

在火花紗簇中,容器的工作方式取決於RDD分區的數量?

*因為我有一點英語技能,所以希望您能理解我的英語尷尬

在YARN中運行的Spark執行程序只是一個JVM進程,有時將此進程稱為YARN容器。 如果說使用3個容器,則意味着在YARN群集節點(基本上是運行YARN NodeManager的節點)上運行3個JVM。

當你紗群集中啟動星火,可以指定遺囑執行人的數量要與--num-executors和內存量奉獻給他們每個人--executor-memory

當您將文件讀取到RDD並指定應具有10個分區時,這意味着在執行代碼期間,源文件將被讀取到10個分區中。 每個分區都是存儲在單個JVM內存中的數據塊,並且根據源數據的位置選擇存儲它們的節點。

在您使用textFile和設置分區數的特定情況下,此數字將下推到Hadoop TextInputFormat類,該類將實現基於文件大小的10個拆分讀取文件(每個拆分約為5.8GB)

因此,實際上,在將源文件讀取到10個分區之后(我假設您將執行cache()並在其頂部執行類似count()類的操作),您將擁有10個數據塊,每個數據塊約為5.8GB ,存儲在群集中作為YARN容器運行的3個JVM進程的堆中。 如果您沒有足夠的RAM,將僅緩存其中的一部分。 如果沒有足夠的RAM來處理5.8GB的單個分區,則會out of memory不足錯誤

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM