Ich habe eine Funken-Anwendung. Welches liest Daten von Oracle in Datenrahmen. Dann konvertiere ich es in JavaRDD und SavingAsTExt in hdfs. Ich führe dies auf Garn auf 8-Knoten-Cluster. Wenn ich den Job auf spark-webUI sehe. Ich kann sehen, dass es nur 2 Container und 2 CPUs bekommt.Spark-Job nicht genug Container auf Cluster
Ich lese 5 Tabellen von Oracle. Jeder Tisch hat ungefähr 500 Millionen Reihen. Die Datengröße beträgt etwa 80 GB.
spark-submit --class "oracle.table.join.JoinRdbmsTables" --master yarn --deploy-mode cluster oracleData.jar
Auch i verwendet:
funkenunterwerfen --Klasse "oracle.table.join.JoinRdbmsTables" --master Garn --deploy-mode-Cluster --num Zieher 40 oracleDataWrite .jar
Ich konnte sehen, dass 40 Container dem Job zugewiesen wurden. Allerdings konnte ich nur 1 aktive Aufgabe auf Web-Ui sehen.
Ich habe eine andere Funkenanwendung. Welches eine 20GB Textdatei lädt, dann mache ich etwas Verarbeitung für Daten und das Speichern in hdfs. Ich kann sehen, dass es mit ungefähr 64 Behältern und CPUs zugewiesen wird.
spark-submit --class "practice.FilterSave" --master yarn --deploy-mode cluster batch-spark-0.0.1-SNAPSHOT-jar-with-dependencies.jar mergedData.json
Der Unterschied zwischen ihnen ist :: - >> für die zweite Anwendung i sparkJavaContext verwenden, während für die ersten i SqlContext ist mit Daten-Rahmen zu verwenden.
HINWEIS: Ich bekomme keine Fehlermeldung für BEIDE.
Hier ist das Stück Code i 5 Tabelle
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");
jede Hilfe :)
mit Ihnen einverstanden ist. Danke für die Antwort. Allerdings bin ich mir dieser Sache bewusst. Wenn du meine zweite Anwendung in Betracht ziehst, erwähne ich keine num-Executers im Befehl. Es wird basierend auf der Größe der Eingabe zugewiesen. Aber für die erste Anwendung wird es nicht genug und es wird nur 2. Also gab ich eine zufällige Anzahl von Executers. aber der Job wird sequenziell ausgeführt. Ich weiß nicht warum :( –