2017-07-24 4 views
0

J'ai un travail Spark qui a échoué à la partie COPY de l'écriture. J'ai toutes les sorties déjà traitées en S3, mais je n'arrive pas à trouver comment les charger manuellement.Comment charger manuellement les fichiers AVRO spark-redshift dans Redshift?

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' 

Dans mon dossier il y a un _SUCCESS, _committedxxx et le fichier _startedxxx, puis 99 tous les fichiers commençant par le préfixe part-. Quand je lance ce que je reçois un stl_load_error ->Invalid AVRO file found. Unexpected end of AVRO file. Si je prends ce préfixe hors tension, puis je reçois:

[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] ----------------------------------------------- 

Est-ce possible de le faire? Ce serait bien d'enregistrer le traitement.

Répondre

1

J'ai eu la même erreur de Redshift.

La copie fonctionne après avoir supprimé les fichiers _committedxxx et _startedxxx (le fichier _SUCCESS ne pose aucun problème).

Si vous avez plusieurs répertoires s3, vous pouvez utiliser les Aws cli pour les nettoyer de ces fichiers:

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

Notez que le cli semble avoir un bug, --include « _comm * » did ne travaille pas pour moi. Donc, il a essayé de supprimer tous les fichiers. Utiliser "--exclude * .avro" fait l'affaire. Soyez prudent et lancez la commande avec --dryrun d'abord !!