2016-06-25 13 views
0

Ich lerne Hadoop und mache ein Experiment zu einem Projekt, das als Big-Data-Projekt in Produktion gehen könnte. Im Moment mache ich nur einen Test mit kleinen Datenmengen. Das Szenario ist wie folgt ein bounch von JSON-Dateien ist, dass ich in der Schweine laden, wie unter:Warum laufen meine Aufgaben in Pig nicht parallel?

a = load 's3n://mybucket/user_*.json' using com.twitter.elephantbird.pig.load.JsonLoader('-nestedLoad') AS (json:map []); 
b = FOREACH a GENERATE flatten(json#'user') as (m:map[]) ; 

lassen Sie uns sagen Datei sind klein, sie enthalten nur ein Objekt, aber es gibt eine bounch von ihnen. Ich nehme an, das FOREACH würde parallel arbeiten und mehr Dateien gleichzeitig öffnen, liege ich falsch? Programme dauern eine Weile, um etwa 10 Sekunden auf einem Amazonas zu laufen, und es gibt etwa 400 Dateien. Ich bin sicher, wenn ich ein Programm in C# mache, wird es einen Bruchteil der Sekunde dauern, wo ich falsch liege?

+0

C# kann Hunderte von Dateien von s3 in Sekundenbruchteilen lesen? Ich bin mir nicht sicher ob –

+0

In jedem Fall, wenn Sie parallel Verarbeitung wollen, verwenden Sie Spark, nicht Schwein –

+0

@ cricket_007 also s3 ist der Flaschenhals? Aber sollte ich mehr als einen Mapper laufen sehen? –

Antwort

1

Schwein läuft Aufgabe als parallel, es gibt einige Zeit Zeit Schwein gibt zunächst, weil es als mapreduce läuft und optimiert das gesamte Skript, so dass auf kleine Datenmenge wird langsamer in Schwein. Es sollte für große Datenmengen verwendet werden. Um die Anzahl der parallelen Tasks in Pig für kleine Daten zu erhöhen, können Sie den PARALLEL-Befehl in der FOREACH-Zeile verwenden. Andernfalls können Sie die Anzahl der Reducer erhöhen, indem Sie default_parallel n setzen, um die Parallelität auf n zu setzen. Der letzte Fall kann sein, dass Schwein alle Aufgabe als Mapper ausgeführt wird, und die Anzahl der Mapper zu klein ist, da Ihre Dateigröße klein ist, müssen Sie einige Garnkonfiguration ändern, um die Anzahl der Mapper zu erhöhen.

Verwandte Themen