Mam robotę iskrową, która pobiera plik z 8 rekordami z hdfs, wykonuje prostą agregację i zapisuje ją z powrotem do Hadoop. Zauważam, że są setki zadań, kiedy to robię.Dlaczego tak wiele zadań w mojej pracy iskier?
Nie jestem również pewien, dlaczego istnieje wiele zadań do tego? Myślałem, że praca była bardziej podobna do akcji. Mogę spekulować, dlaczego, ale rozumiem, że wewnątrz tego kodu powinno to być jedno zlecenie, które powinno być podzielone na etapy, a nie wiele zadań. Dlaczego nie dzieli się go na etapy, jak to się dzieje w pracy?
Jeśli chodzi o zadania o wielkości 200 plus, ponieważ ilość danych i liczba węzłów jest niewielka, nie ma sensu, aby było 25 zadań dla każdego wiersza danych, gdy istnieje tylko jedna agregacja i kilka filtrów. Dlaczego nie miałoby to jednego zadania na partycję na operację atomową?
Oto odpowiedni kod Scala -
import org.apache.spark.sql._
import org.apache.spark.sql.types._
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
object TestProj {object TestProj {
def main(args: Array[String]) {
/* set the application name in the SparkConf object */
val appConf = new SparkConf().setAppName("Test Proj")
/* env settings that I don't need to set in REPL*/
val sc = new SparkContext(appConf)
val sqlContext = new SQLContext(sc)
import sqlContext.implicits._
val rdd1 = sc.textFile("hdfs://node002:8020/flat_files/miscellaneous/ex.txt")
/*the below rdd will have schema defined in Record class*/
val rddCase = sc.textFile("hdfs://node002:8020/flat_files/miscellaneous/ex.txt")
.map(x=>x.split(" ")) //file record into array of strings based spaces
.map(x=>Record(
x(0).toInt,
x(1).asInstanceOf[String],
x(2).asInstanceOf[String],
x(3).toInt
))
/* the below dataframe groups on first letter of first name and counts it*/
val aggDF = rddCase.toDF()
.groupBy($"firstName".substr(1,1).alias("firstLetter"))
.count
.orderBy($"firstLetter")
/* save to hdfs*/
aggDF.write.format("parquet").mode("append").save("/raw/miscellaneous/ex_out_agg")
}
case class Record(id: Int
, firstName: String
, lastName: String
, quantity:Int)
}
Poniżej znajduje się zrzut ekranu po kliknięciu w aplikacji
Poniżej są etapy pokazać podczas przeglądania konkretnej „pracy” z identyfikatorem 0
Poniżej znajduje się pierwsza część ekranu po kliknięciu na scenie z ponad 200 zadaniami
Jest to druga część ekranu wewnątrz etapie
Poniżej znajduje się po kliknięciu na „wykonawców” Zakładka
Zgodnie z życzeniem, tutaj są etapy Job ID 1
Oto th Szczegóły E dla etapu ID pracą 1 z 200 zadań
Dzięki człowiek! Zrobię to natychmiast, aby to sprawdzić. A co z wieloma zleceniami? Dlaczego są dwie prace? –
Czy masz ekran dla etapów Job ID 1? – marios
Dodałem je do OP –