2016-10-14 3 views
0

Ich habe einen einfachen Funke-Job, der eine Datei aus s3 liest, fünf nimmt und in s3 zurückschreibt. Was ich sehe ist, dass es immer eine zusätzliche Datei in s3 gibt, neben meiner Ausgabe "Verzeichnis", die output_ $ Ordner $ genannt wird.Junk Spark-Ausgabedatei auf S3 mit Dollarzeichen

Was ist das? Wie kann ich verhindern, dass Funken entstehen? Hier ist ein Code zu zeigen, was ich tue ...

x = spark.sparkContext.textFile("s3n://.../0000_part_00") 
five = x.take(5) 
five = spark.sparkContext.parallelize(five) 
five.repartition(1).saveAsTextFile("s3n://prod.casumo.stu/dimensions/output/") 

Nach dem Job, den ich habe s3 „Verzeichnis“ genannt Ausgabe, die output_ $ Ordner $ genannt Ergebnisse und ein anderes s3 Objekt enthält, die ich weiß nicht, was es ist.

Antwort

1

Ok, es scheint, ich habe herausgefunden, was es ist. Es handelt sich um eine Art von Markierungsdatei, die wahrscheinlich verwendet wird, um festzustellen, ob das S3-Verzeichnisobjekt existiert oder nicht. Wie kam ich zu dieser Schlussfolgerung? Zuerst fand ich diesen Link, um die Quelle von

org.apache.hadoop.fs.s3native.NativeS3FileSystem#mkdir 

Methode zeigt: http://apache-spark-user-list.1001560.n3.nabble.com/S3-Extra-folder-files-for-every-directory-node-td15078.html

Dann habe ich eine andere Quelle Repositories googeln, um zu sehen, ob ich andere Version der Methode finden werde. Ich tat es nicht.

Am Ende habe ich ein Experiment gemacht und den gleichen Funke-Job erneut ausgeführt, nachdem ich das s3-Ausgabeverzeichnis-Objekt entfernt habe, aber output_ $ -Ordner $ file. Job konnte nicht angeben, dass das Ausgabeverzeichnis bereits existiert.

Meine Schlussfolgerung, das ist der Weg von Hadoop zu wissen, ob es ein Verzeichnis in s3 mit dem gegebenen Namen gibt und ich muss damit leben.

Alles oben genannte passiert, wenn ich den Job von meinem lokalen, dev Maschine - d. H. Laptop. Wenn ich denselben Job über eine aws-Datenpipeline ausfühle, wird output_ $ ordner $ nicht erstellt.