2016-06-07 1 views
0

Ich versuche ein (Wordcount) Programm zu schreiben, um einen Anwendungsfall zu simulieren, in dem der Netzwerkverkehr wegen des Shuffle-Prozesses von Spark sehr hoch wäre. Ich habe einen Apache-Funke-Cluster mit 3 Knoten (2 Kerne, jeweils 8GB RAM), der mit 1 Master und 2 Arbeitern konfiguriert ist. Ich habe eine 5-GB-Datei für Wordcount bearbeitet und konnte einen Netzwerkverkehr zwischen 2 Arbeiterknoten sehen, der in 10-15 Minuten bis zu 1 GB erhöht. Ich bin auf der Suche nach einem Weg, wo ich den Verkehr zwischen den Knoten bis zu 1GB innerhalb von 30s-60s erhöhen könnte. Die Ineffizienz des Programms oder der Best Practices spielt in meinem aktuellen Anwendungsfall keine Rolle, da ich gerade versuche, den Traffic zu simulieren.Erhöhen Sie den Netzwerkverkehr zwischen Arbeiterknoten durch den Shuffle-Prozess von Apache Spark

Dies ist das Programm i

indem Operationen erzeugt werden, die keine Daten kombinieren sehr gut auf jedem Knoten geschrieben haben
val sc = new SparkContext(new SparkConf().setAppName("LetterCount-GroupBy-Map")) 
val x = sc.textFile(args(0)).flatMap(t => t.split(" ")) 
val y = x.map(w => (w.charAt(0),w)) 
val z = y.groupByKey().mapValues(n => n.size) 
z.collect().foreach(println) 

Antwort

1

Mehr Shuffled Daten können. Zum Beispiel: In dem Code, den Sie geschrieben haben, wird die groupby die gemeinsamen Schlüssel kombinieren (oder tun groupby lokal). Wählen Sie stattdessen eine hohe Kardinalität der Schlüssel (im obigen Beispiel ist es nur 26). Außerdem kann die Größe der Werte nach der Kartenoperation erhöht werden. In Ihrem Fall ist es die Textzeile. Möglicherweise möchten Sie für jeden Schlüssel eine sehr lange Zeichenfolge mit Werten angeben.

Abgesehen davon, wenn Sie 2 verschiedene Dateien/Tabellen nehmen und Join auf einen Parameter anwenden, wird auch ein Shuffling verursacht.

Hinweis: Ich gehe davon aus, dass der Inhalt keine Rolle spielt. Sie sind nur daran interessiert, stark gemischte Daten zu generieren.

Verwandte Themen