[英]Unable to submit a spark job on spark cluster on docker
[英]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.