簡體   English   中英

Spark作業沒有在群集上獲得足夠的容器

[英]Spark job not getting Enough Containers on cluster

我有一個火花應用程序。 這是將數據從oracle讀取到數據幀中。 然后我將其轉換為javaRDD並將saveTEExt保存為hdfs。 我在8節點群集上的yarn上運行它。 當我在spark-webUI上看到工作時。 我可以看到它僅獲得2個容器和2個cpus。

我正在從Oracle讀取5個表。 每個表都有大約5億行。 數據大小約為80GB。

spark-submit  --class "oracle.table.join.JoinRdbmsTables"  --master yarn --deploy-mode cluster  oracleData.jar

我也用過:

spark-submit-類“ oracle.table.join.JoinRdbmsTables” --master yarn-部署模式集群--num-executors 40 oracleDataWrite.jar

我可以看到有40個容器分配給工作。 但是,我只能在web-ui上看到1個活動任務

我還有另一個Spark應用程序。 這正在加載20GB的文本文件,然后我正在對數據進行一些處理並將其保存到hdfs。 我可以看到它被分配了約64個容器和cpus。

spark-submit  --class "practice.FilterSave"  --master yarn --deploy-mode cluster  batch-spark-0.0.1-SNAPSHOT-jar-with-dependencies.jar mergedData.json

它們之間的區別是:對於第二個應用程序,我使用sparkJavaContext,而對於第一個應用程序,我使用SQLContext使用數據幀。

注意:我都不會犯任何錯誤。

這是我用來加載5表的代碼

Map<String, String> options = new HashMap();
options.put("driver", "oracle.jdbc.driver.OracleDriver");
options.put("url", "XXXXXXX");
options.put("dbtable", "QLRCR2.table1");
DataFrame df=sqlcontext.load("jdbc", options);
//df.show();
JavaRDD<Row> rdd=df.javaRDD();
rdd.saveAsTextFile("hdfs://path");

Map<String, String> options2 = new HashMap();
options2.put("driver", "oracle.jdbc.driver.OracleDriver");
options2.put("url", "XXXXXXX");
options2.put("dbtable", "QLRCR2.table2");
DataFrame df2=sqlcontext.load("jdbc", options);
//df2.show();
JavaRDD<Row> rdd2=df2.javaRDD();
rdd2.saveAsTextFile("hdfs://path"); 

任何幫助將不勝感激 :)

通過設置--num-executors N來設置在yarn上運行時執行程序的數量。注意,這並不意味着您將獲得N個執行程序,僅是從Yarn請求N。 實際可獲得的數量取決於每個執行者要求的資源數量。 例如,如果每個節點都有25GB專用於Yarn(yarn-site.xml yarn.nodemanager.resource.memory-mb),並且您有8個節點,並且Yarn上沒有其他應用程序在運行,則請求8個執行者使用約20GB。 請注意,除了使用--executor-memory請求的內容外,Spark還增加了10%的開銷(默認),因此您無法要求整個25GB。 --execturo-cores(yarn-site.xml yarn.nodemanager.resource.cpu-vcores)或多或少相似。

關於任務數量的第二個問題是一回事,請查看有關如何將階段拆分為任務的良好解釋

暫無
暫無

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

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