【发布时间】:2016-07-27 21:42:42
【问题描述】:
我有一个 spark 应用程序。它将数据从 oracle 读取到数据帧中。然后我将其转换为 javaRDD 并将 AsTText 保存为 hdfs。 我在 8 节点集群上的 yarn 上运行它。当我在 spark-webUI 上看到工作时。我可以看到它只有 2 个容器和 2 个 cpu。
我正在从 oracle 读取 5 个表。每个表大约有 5 亿行。数据大小约为 80GB。
spark-submit --class "oracle.table.join.JoinRdbmsTables" --master yarn --deploy-mode cluster oracleData.jar
我也用过:
spark-submit --class "oracle.table.join.JoinRdbmsTables" --master yarn --deploy-mode cluster --num-executors 40 oracleDataWrite.jar
我可以看到 40 个容器被分配到工作中。但是,我只能在 web-ui 上看到 1 个活动任务。
我有另一个 spark 应用程序。它正在加载一个 20GB 的文本文件,然后我正在对数据进行一些处理并保存到 hdfs。我可以看到它被分配了大约 64 个容器和 CPU。
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");
任何帮助将不胜感激:)
【问题讨论】:
标签: java apache-spark hadoop-yarn spark-dataframe