Ongoing service disruptions
For the most recent update on ongoing service disruptions affecting the AWS Middle East (UAE) Region (ME-CENTRAL-1), refer to the AWS Health Dashboard. For information on AWS Service migration, see How do I migrate my services to another region?
Wie behebe ich den Athena-Abfragefehler „HIVE_CANNOT_OPEN_SPLIT“?
Meine Amazon-Athena-Abfrage ist mit dem Fehler „HIVE_CANNOT_OPEN_SPLIT“ fehlgeschlagen.
Kurzbeschreibung
Ein Amazon Simple Storage Service (Amazon S3)-Bucket kann bis zu 3.500 PUT/COPY/POST/DELETE- oder 5.500 GET/HEAD-Anfragen pro Sekunde und Präfix verarbeiten. Dies ist ein Gesamtlimit für die kombinierten Anfragen aller Benutzer und Dienste eines AWS-Kontos.
Standardmäßig skaliert Amazon S3 automatisch, um hohe Raten von Anfragen zu unterstützen. Wenn Ihre Anfragenrate steigt, wird Ihr S3-Bucket automatisch partitioniert, um höhere Anfragenraten zu bewältigen. Wenn der Schwellenwert für Anfragen jedoch überschritten wird, erhalten Sie die Fehlermeldung „5xx Slow Down“.
Angenommen, Sie führen eine Athena-Anfrage für ein Präfix aus, das 10.000 Dateien enthält. Athena verwendet die GET/HEAD-Anfragen, um zu versuchen, alle 10.000 Dateien gleichzeitig zu lesen. Da das Präfix jedoch nur bis zu 5.500 GET/HEAD-Anfragen pro Sekunde unterstützt, werden Ihre S3-Anfragen gedrosselt und Sie erhalten den Fehler „5xx Slow Down“.
Lösung
Verwenden Sie eine oder mehrere der folgenden Methoden, um eine Drosselung Ihrer Anfragen zu vermeiden.
Verteilen von S3-Objekten und Anfragen auf mehrere Präfixe
Partitionieren Sie Ihre Daten, um Objekte und Anfragen auf mehrere Präfixe zu verteilen. Speichern Sie keine große Anzahl von Dateien unter einem einzigen S3-Präfix. Verwenden Sie stattdessen mehrere Präfixe, um die S3-Objekte auf diese Präfixe zu verteilen. Weitere Informationen finden Sie unter Partitioning data in Athena.
Speichern Sie beispielsweise nicht alle Dateien unter s3://my-athena-bucket/my-athena-data-files. Partitionieren Sie stattdessen die Daten und speichern Sie sie unter den folgenden individuellen Präfixen:
s3://my-athena-bucket/jan
s3://my-athena-bucket/feb
s3://my-athena-bucket/mar
Sie können die Daten in diesen Dateien weiter partitionieren, um die Objekte breiter zu verteilen. Beispiel: s3://my-athena-bucket/jan/01.
Reduzieren der Anzahl der Dateien in jedem Präfix
Möglicherweise erhalten Sie den Fehler „HIVE_CANNOT_OPEN_SPLIT“, wenn Sie einen S3-Bucket anfragen, der eine große Anzahl kleiner Objekte enthält. Befindet sich beispielsweise eine Datei von 100 MB Größe in einem S3-Bucket, muss Athena eine GET-Anfrage stellen, um die Datei zu lesen. Für 1.000 Dateien mit jeweils 100 KB muss Athena jedoch 1.000 GET-Anfragen stellen, um dieselben 100 MB an Daten zu lesen. Die Anforderungen überschreiten dann die Limits für S3-Anfragen.
Um die Anzahl der Amazon-S3-Anfragen zu reduzieren, verringern Sie die Anzahl der Dateien. Verwenden Sie beispielsweise das Tool S3DistCp, um eine große Anzahl kleiner Dateien von weniger als 128 MB zu einer kleineren Anzahl großer Dateien zusammenzuführen. Weitere Informationen finden Sie im Abschnitt Optimize file sizes in den Top 10 performance tuning tips for Amazon Athena.
Beispielbefehl:
s3-dist-cp --src=s3://my_athena_bucket_source/smallfiles/ --dest=s3://my_athena_bucket_target/largefiles/ --groupBy='.*(.csv)'
Hinweis: Ersetzen Sie im obigen Befehl my_athena_bucket_source durch den S3-Quell-Bucket, in dem die kleinen Dateien vorliegen. Ersetzen Sie außerdem my_athena_bucket_target mit dem Ziel-S3-Bucket, in dem die Ausgabe gespeichert wird.
Um die Abfrageleistung und die Kosten zu optimieren, fassen Sie kleine Dateien anhand der groupBy-Option zu einer geringeren Anzahl großer Dateien zusammen.
Hinweis: S3DistCp unterstützt keine Verkettung von Apache-Parquet-Dateien. Verwenden Sie stattdessen PySpark. Weitere Informationen finden Sie unter Wie kann ich Parquet-Dateien in Amazon EMR verketten?
Überprüfen, ob die Versionierung für Ihren S3-Bucket aktiviert ist
Wenn Sie Objekte aus einem S3-Bucket löschen, der Versionierung verwendet, entfernt Amazon S3 das Objekt nicht dauerhaft. Stattdessen fügt Amazon S3 eine Löschmarkierung ein. Wenn viele Dateien in Ihrem S3-Bucket Löschmarkierungen aufweisen, erhalten Sie möglicherweise den Fehler „HIVE_CANNOT_OPEN_SPLIT“. Wenn Sie eine Abfrage für einen Bucket ausführen, für den die Versionierung aktiviert ist, muss Athena die verschiedenen Versionen jedes Objekts überprüfen. Während die Abfrage dann verarbeitet wird, entscheidet Athena, ob ein bestimmtes Objekt eingeschlossen werden soll.
Um dieses Problem zu beheben, entfernen Sie die Löschmarkierungen aus Ihrem S3-Bucket. Führen Sie eine der folgenden Aktionen aus, um die Löschmarkierungen zu entfernen:
- Löschen Sie die Löschmarkierungen manuell. Verwenden Sie die ListObjectVersions-API, um die Metadaten zu allen Versionen der Objekte in Ihrem S3-Bucket aufzulisten. Suchen Sie in den Metadaten die versionID des Objekts und entfernen Sie die Löschmarkierung dauerhaft.
- Legen Sie eine Lebenszykluskonfiguration fest, um die Löschmarkierungen zu löschen. Verwenden Sie S3-Lebenszyklusregeln, um Aktionen zu definieren, die Amazon S3 für die Lebensdauer eines Objekts ausführen soll.
Prüfen, ob andere Anwendungen dasselbe S3-Präfix verwenden
Verwenden Sie die Amazon-CloudWatch-Metrik „5xxErrors“ und die S3-Serverzugriffsprotokolle, um zu überprüfen, ob andere Anwendungen dasselbe S3-Präfix verwendet haben, als Sie die Athena-Abfrage ausgeführt haben. Wenn mehrere Anwendungen versuchen, die Daten aus demselben S3-Präfix zu lesen, kann dies zu gedrosselten Anfragen führen. Vermeiden Sie es, Anwendungen zu planen, die gleichzeitig auf dasselbe Präfix zugreifen. Verwenden Sie außerdem unterschiedliche S3-Präfixe für die Athena-Datenquelle und die Anwendungsdatenquelle.
Erstellen Sie eine CloudWatch-Metriken-Konfiguration für alle Objekte in Ihrem S3-Bucket. Verwenden Sie diese Metriken, um die Raten von API-Aufrufen für ein bestimmtes Präfix zu einem bestimmten Zeitpunkt zu überwachen. Aktivieren Sie S3-Anfragemetriken für ein Präfix, um die Gesamtrate an API-Aufrufen für ein Präfix zu einem bestimmten Zeitpunkt zu ermitteln. Verwenden Sie diese Informationen zusammen mit den Zugriffsprotokollen des S3-Servers, um herauszufinden, welche Anwendung den API-Aufruf für das Präfix verwendet hat.
Um Ihre Daten innerhalb einer einzigen Partition zu partitionieren, können Sie Ihre Daten auch in einem Bucket speichern. Weitere Informationen finden Sie unter What is bucketing?
Verwandte Informationen
Wie behebe ich einen HTTP 500- oder 503-Fehler von Amazon S3?
- Themen
- Analytics
- Tags
- Amazon Athena
- Sprache
- Deutsch
Ähnliche Videos


Relevanter Inhalt
AWS OFFICIALAktualisiert vor 4 Monaten
AWS OFFICIALAktualisiert vor 3 Jahren