2017-07-24 2 views
0

Ich habe einen Spark-Job, der am COPY Teil des Schreibens fehlgeschlagen ist. Ich habe die gesamte Ausgabe bereits in S3 verarbeitet, habe aber Probleme herauszufinden, wie man sie manuell lädt.Wie man AVRF-Dateien mit Spark-Redshift manuell in Redshift lädt?

COPY table 
FROM 's3://bucket/a7da09eb-4220-4ebe-8794-e71bd53b11bd/part-' 
CREDENTIALS 'aws_access_key_id=XXX;aws_secret_access_key=XXX' 
format as AVRO 'auto' 

In meinem Ordner gibt es eine _SUCCESS, _committedxxx und _startedxxx Datei und dann 99 Dateien alle beginnen mit dem Präfix part-. Als ich das laufen bekomme ich eine stl_load_error ->Invalid AVRO file found. Unexpected end of AVRO file. Wenn ich aus diesem Präfix nehmen, dann erhalte ich:

[XX000] ERROR: Invalid AVRO file Detail: ----------------------------------------------- error: Invalid AVRO file code: 8001 context: Cannot init avro reader from s3 file Incorrect Avro container file magic number query: 10882709 location: avropath_request.cpp:432 process: query23_27 [pid=10653] ----------------------------------------------- 

dies möglich ist, zu tun? Es wäre schön, die Verarbeitung zu speichern.

Antwort

1

Ich hatte den gleichen Fehler von Redshift.

Der COPY funktioniert, nachdem ich die Dateien _committedxxx und _startedxxx gelöscht habe (die Datei _SUCCESS ist kein Problem).

Wenn Sie viele Verzeichnisse in s3 haben, können Sie die aws cli benutzen sie diese Dateien zu reinigen:

aws s3 rm s3://my_bucket/my/dir/ --include "_comm*" --exclude "*.avro" --exclude "*_SUCCESS" --recursive 

Beachten Sie, dass die cli einen Fehler, --include zu haben scheint „_comm *“ tat nicht für mich arbeiten. So versuchte es alle Dateien zu löschen. Die Verwendung von "--exclude * .avro" macht den Trick. Sei vorsichtig und führe den Befehl mit --dryrun zuerst aus !!