2017-03-14 2 views

Antwort

1

Hier ist ein schöner Artikel zu diesem Thema, den Sie durchlaufen müssen.

storing-apache-hadoop-data-cloud-hdfs-vs-s3

Fazit: Mit einer besseren Skalierbarkeit, integrierte in Ausdauer und niedrigere Preise, S3 Gewinner ist! Nichtsdestotrotz ist HDFS für eine bessere Leistung und keine Dateigrößen oder Speicherformate die richtige Wahl.

Beim Zugriff auf Dateien von S3, gibt die Verwendung von URI Schema s3a mehr Leistung als s3n und auch s3a gibt es keine 5 GB Dateigröße Grenze.

val data = sc.textFile("s3a://bucket-name/key") 

Sie können die scala JAR-Datei für die Funken wie dies zum Beispiel sumbit

spark-submit \ 
    --master local[2] \ 
    --packages datastax:spark-cassandra-connector:2.0.0-M2-s_2.11,org.apache.hadoop:hadoop-aws:2.7.3 \ 
    --conf spark.hadoop.fs.s3a.impl=org.apache.hadoop.fs.s3a.S3AFileSystem \ 
    --conf spark.hadoop.fs.s3a.access.key=xxxx \ 
    --conf spark.hadoop.fs.s3a.secret.key=xxxxxxx \ 
    --class org.etl.jobs.sprint.SprintBatchEtl \ 
    target/scala-2.11/test-ingestion-assembly-0.0.1-SNAPSHOT.jar 
1

Lesen S3 ist eine Frage der Durchführung der Authentifizierung HTTPS-Anfragen mit dem Inhalt-Bereich-Header auf dem Start-zu-Punkt von das Lesen (0 oder der Ort, an dem Sie gerade versucht haben) und das Ende (in der Vergangenheit das Ende der Datei; dies ist jetzt optional und sollte für die schwer zu suchenden ORC- und Parquet-Eingaben vermieden werden).

Key Performance Punkte:

  • lesen: Sie nicht über die Ortschaft Zugang zu erhalten; Netzwerkbandbreite begrenzt durch die von Ihnen gemieteten VMs.
  • S3 ist viel langsamer auf sucht, teilweise in der bevorstehenden Hadoop 2.8
  • S3 ist Weg, viel langsamer auf Metadaten-Operationen (Liste, getFileStatus()). Dies beeinträchtigt die Einrichtung des Jobs.
  • Schreiben: nicht so schlimm, außer dass vor Hadoop 2.8 der Client wartet, bis die close() Aufruf, um den Upload zu tun, die kann Verzögerungen hinzufügen.
  • rename(): wirklich eine Kopie; Da rename() zum Übertragen von Aufgaben und Jobs verwendet wird, beeinträchtigt dies die Leistung, wenn s3 als Arbeitsziel verwendet wird. Da S3 schließlich konsistent ist, könnten Sie trotzdem Daten verlieren. Schreiben Sie an hdfs:// dann kopieren Sie an s3a://

Wie ist das implementiert? Suchen Sie im Apache Hadoop-Quellbaum nach den Implementierungen der abstrakten Klasse org.apache.fs.FileSystem; HDFS und S3A sind beide Beispiele. Hier ist the S3A one. Der Eingabestream mit der Option Hadoop 2.8 true seek und fadvise = random für schnelleres Random IO ist S3AInputStream.


auf dem Artikel der Suche die andere Antwort deckt, es ist ein drei Jahre alter Artikel spricht über S3, wenn es um 5 GB begrenzt war; verpasst einige Schlüsselpunkte auf beiden Seiten des Arguments.

Ich denke, der Autor eine gewisse Tendenz in Richtung S3 in erster Linie hatte „S3 unterstützt Kompression“ :, sowie einige Unkenntnis Aspekte von beidem. (Hinweis, während Parkett und ORC suchen müssen(), tun wir dies in den S3N und S3a S3-Clients über die Content-Range-HTTP-Header)

S3 ist, auf Nicht-EMR-Systemen, ein gefährlicher Ort zu Zwischendaten speichern und leistungsmäßig ein ineffizientes Ziel der Arbeit.Dies liegt an seiner eventuellen Konsistenz, was bedeutet, dass neu erstellte Daten möglicherweise nicht von der nächsten Stufe des Workflows übernommen werden, und weil die Arbeit mit rename() nicht mit großen Datensätzen funktioniert. Es scheint alles gut in der Entwicklung zu arbeiten, aber die Produktion ist, wo die Skala Probleme

getroffen

am Beispielcode Sehen,

  1. Sie verlassen nun die Version von amazon-s3 SDK JAR benötigen eine Hadoop-Versionen übereinstimmen ; für Hadoop 2.7 ist das 1.7.4. Das ist sehr spröde.
  2. am besten, um die s3a-Geheimnisse in spark-defaults.conf; oder belassen Sie sie als AWS_-Umgebungsvariablen und lassen Sie sie von funke-submit automatisch propagieren. Wenn Sie sie in die Befehlszeile einfügen, werden sie in einem Befehl ps sichtbar, und das wollen Sie nicht.
  3. S3a verwendet tatsächlich die IAM-Authentifizierung: Wenn Sie eine EC2-VM einreichen, sollten Sie keine Geheimnisse angeben, da die zum Zeitpunkt des Starts der VM angegebenen Anmeldeinformationen abgerufen werden.
1

Wenn Sie planen, Spark-SQL zu verwenden, dann möchten Sie vielleicht unter

  • Wenn Ihre externe Tabellen S3 zeigen sind zu prüfen, regrediert SPARK SQL erheblich. Sie könnten sogar Speicherproblem wie org.apache.spark.shuffle.FetchFailedException: Too large frame, java.lang.OutOfMemoryError

  • Eine weitere Beobachtung begegnen, Wenn ein Shuffle-Block über 2 GB ist, schlägt der shuffle. Dieses Problem tritt auf, wenn externe Tabellen auf S3 zeigen.

  • SPARK SQL-Performance auf HDFS ist 50% schneller auf 50MM/10G-Datensatz verglichen mit S3