2017-03-02 4 views
1

Ich versuche viele CSV-Dateien von s3 mit Arbeitern zu lesen, die auf ec2-Instanzen mit den richtigen IAM-Rollen laufen (ich kann aus den gleichen Buckets von anderen Skripten lesen). Wenn ich versuche, meine eigenen Daten von einem privaten Eimer mit diesem Befehl zu lesen:dask s3 Zugriff auf ec2 worker

client = Client('scheduler-on-ec2') 
df = read_csv('s3://xyz/*csv.gz', 
       compression='gzip', 
       blocksize=None, 
       #storage_options={'key': '', 'secret': ''} 
      ) 
df.size.compute() 

Daten zu sehen ist lokal wie lesen (von lokalen Python-Interpreter, nicht die Arbeiter), dann für die Arbeitnehmer gesendet wird (oder Scheduler?) durch den lokalen Interpreter, und wenn die Arbeiter die Brocken erhalten, führen sie die Berechnung aus und geben die Ergebnisse zurück. Gleiches mit oder ohne Passieren des Schlüssels und des Geheimnisses über storage_options.

Wenn ich von einem öffentlichen S3 Eimer (Nyc Taxi Daten), mit storage_options={'anon': True} lesen, sieht alles in Ordnung.

Was denkst du ist das Problem und was sollte ich neu konfigurieren, um die Arbeiter direkt von s3 lesen zu lassen?

s3fs korrekt installiert ist, und das sind die unterstützten Dateisysteme nach dask:

>>>> dask.bytes.core._filesystems 
{'file': dask.bytes.local.LocalFileSystem, 
's3': dask.bytes.s3.DaskS3FileSystem} 

aktualisieren

Nach Monitoring-Netzwerk-Schnittstellen, es sieht aus wie etwas aus dem Interpreter an den Scheduler hochgeladen . Je mehr Partitionen im Datenrahmen (oder Beutel) vorhanden sind, desto größer werden die Daten an den Scheduler gesendet. Ich dachte, es könnte das Berechnungsdiagramm sein, aber es ist wirklich groß. Für 12 Dateien sind es 2-3 MB, für 30 Dateien sind es 20 MB und für größere Daten (150 Dateien) dauert es einfach zu lange, um es an den Scheduler zu senden, und ich habe nicht darauf gewartet. Was wird noch an den Scheduler gesendet, der diese Datenmenge aufnehmen kann?

+0

> Was wird noch an den Scheduler gesendet, der diese Datenmenge aufnehmen kann? Soweit ich weiß. Nichts. Wenn Sie ein reproduzierbares [minimum failing example] (http://stackoverflow.com/help/mcve) erstellen können, empfehle ich, etwas auf Github einzureichen. Wenn ich dieses Problem versuche, läuft alles gut. Sie könnten versuchen [das dask-Diagramm manuell zu inspizieren] (http://dask.pydata.org/en/latest/inspect.html). – MRocklin

Antwort

0

Wenn Sie dd.read_csv('s3://...') anrufen, liest die lokale Maschine ein wenig Daten, um Spaltennamen, DTypes usw. zu erraten. Die Arbeiter lesen jedoch die meisten Daten direkt ein.

Wenn Sie den verteilten Scheduler verwenden, lädt Dask Daten nicht auf dem lokalen Computer und pumpt sie dann an die Worker. Wie Sie vorschlagen, wäre dies ineffizient.

Sie könnten sich die web diagnostic pages ansehen, um mehr Informationen darüber zu bekommen, was Zeit braucht.

+0

Ja, ich habe die Web-Diagnoseseiten überprüft. Als ich eine kleine Menge von csvs und meine Netzwerkschnittstelle überwachte, sah ich, dass mein Rechner etwas auf ec2 hochlädt, und als es fertig war, begannen die Aufgaben auf Workern wie erwartet zu laufen, was auf der Diagnoseseite angezeigt wurde. Bei mehr csvs wurde das Hochladen nicht beendet. Ich bin nicht sicher, was passiert, es war nur eine Vermutung, dass alle Daten hochgeladen werden, aber ich habe keine Ahnung, was unter der Haube passiert. – zseder