我有一个火花应用程序。这是从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个。所以我给了一个随机数的执行器。但是这个工作正在顺序运行。我不知道为什么:( –