我有一個火花應用程序。這是從oracle讀取數據到數據框中的數據。然後我將它轉換成javaRDD並將其保存爲hdfs。 我在8節點集羣上運行這個紗線。當我在spark-webUI上看到這個工作時。我可以看到它只有2個容器和2個cpus。Spark工作沒有得到足夠的集羣容器
我正在閱讀oracle的5個表。每張桌子有大約5億行。數據大小約爲80GB。
spark-submit --class "oracle.table.join.JoinRdbmsTables" --master yarn --deploy-mode cluster oracleData.jar
此外,我使用:
火花提交--class 「oracle.table.join.JoinRdbmsTables」 --master 紗線--deploy模式集羣--num-執行人40 oracleDataWrite .jar
我可以看到40個容器被分配到工作。但是,我只能在web-ui上看到1活動任務。
我有另一個火花應用程序。這是加載一個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
它們之間的區別是:: - >>因爲我而對於第一我使用SQLContext使用數據幀使用sparkJavaContext第二應用。
注意:我沒有得到兩個任何錯誤。
這裏是一段代碼我使用加載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");
任何幫助將不勝感激:)
同意你的觀點。 Thanx回答。但是,我知道這件事。如果你考慮我的第二個應用程序,那麼我沒有提到任何命令中的num-executers。它根據輸入的大小分配。但是對於第一個應用程序來說,它並沒有得到足夠的收益,只有2個。所以我給了一個隨機數的執行器。但是這個工作正在順序運行。我不知道爲什麼:( –