2017-05-15 4 views
0

Ich verstehe nicht, wie Sie einfach den Inhalt eines S3-Buckets auf EMR während eines Funkenjobs auflisten. Ich wollte die folgendenListe S3-Ordner auf EMR

Configuration conf = spark.sparkContext().hadoopConfiguration(); 
FileSystem s3 = S3FileSystem.get(conf); 
List<LocatedFileStatus> list = toList(s3.listFiles(new Path("s3://mybucket"), false)) 

Dies immer mit dem folgenden Fehler

java.lang.IllegalArgumentException: Wrong FS: s3://*********/, expected: hdfs://**********.eu-central-1.compute.internal:8020 

im hadoopConfiguration fs.defaultFS -> hdfs://**********.eu-central-1.compute.internal:8020

So wie ich es verstehe nicht tun, wenn ich nur nicht ein Protokoll verwenden,/myfolder/myfile anstelle von zB hdfs: // myordner/meinedatei wird standardmäßig auf df.defaultFS gesetzt. Aber ich würde erwarten, wenn ich meine s3 angeben: // mybucket/die fs.defaultFS sollte keine Rolle spielen.

Wie greift man auf die Verzeichnisinformationen zu? spark.read.parquet ("s3: //mybucket/*.parquet") funktioniert gut, aber für diese Aufgabe muss ich die Existenz einiger Dateien prüfen und möchte auch einige löschen. Ich nahm an, dass org.apache.hadoop.fs.FileSystem das richtige Werkzeug wäre.

PS: Ich verstehe auch nicht, wie die Protokollierung funktioniert. Wenn ich den Bereitstellungsmodus-Cluster verwende (ich möchte jars von s3 bereitstellen, was im Client-Modus nicht funktioniert), kann ich meine Protokolle nur in s3: // logbucket/j -.../containers/application finden ... /conatiner...0001. Es gibt eine ziemlich lange Verzögerung bevor diese in S3 gezeigt werden. Wie finde ich es über ssh auf dem Master? oder gibt es einen schnelleren/besseren Weg, um Funkenanmeldeprotokolle zu prüfen? UPDATE: Gefunden nur unter /mnt/var/log/hadoop-yarn/containers aber die es ist im Besitz von Garn: Garn und als Hadoop Benutzer kann ich es nicht lesen. Ideen :(

Antwort

0

Ich glaube nicht, dass Sie die FS richtig sind Abholung, benutzen Sie einfach die statische FileSystem.get() Methode oder Path.get()

Probieren Sie etwas wie: Path p = new Path("s3://bucket/subdir"); FileSystem fs = p.get(conf); FileStatus[] status= fs.listStatus(p);

In Bezug auf Protokolle, UI GARN sollte Lassen Sie sie über die Node-Manager an.