2017-11-21 3 views
0

Ich versuche ~ 80.000 Bilder von einem Google Cloud Storage Bucket in einen anderen zu kopieren. Ich starte diese Operation von einem Mac mit Google Cloud SDK 180.0.1, die gsutil 4.28 enthält."cat urls.txt | gsutil -m cp -I gs: // Ziel-Bucket-Name /" bleibt nach dem Übertragen von ~ 10.000 Dateien konstant hängen

Die ~ URL jedes Bildes in eine Textdatei übertragen in werden, die ich ernähren cp gsutil wie so ...

$cat urls.txt | gsutil -m cp -I gs://target-bucket-name/ 

wobei urls.txt sieht aus wie ...

head -3 urls.txt 
gs://source-bucket-name/1506567870546.jpg 
gs://source-bucket-name/1506567930548.jpg 
gs://source-bucket-name/1507853339446.jpg 

Der Prozess bleibt konstant hängen, nachdem ~ 10.000 der Bilder übertragen wurden.

Ich habe $ HOME/.boto bearbeitet Kommentar-:

parallel_composite_upload_threshold = 0 

Dies hat den Betrieb von hängen nicht verhindert.

Ich bin unsicher, was das Hängen verursacht.

Der zugrunde liegende Bedarf besteht darin, dass ein allgemeines Dienstprogramm N Elemente von einem Bucket in einen anderen kopiert. Ich brauche eine Arbeit, die es mir ermöglicht, diese Mission zu erfüllen.

UPDATE

die Option -m Entfernen scheint sich um den hängenden Problem zu arbeiten, aber die Dateiübertragung ist nun deutlich langsamer. Ich möchte in der Lage sein, das hängende Problem zu vermeiden, während ich immer noch die Geschwindigkeit erlange, die mit der Verwendung von Nebenläufigkeit verbunden ist, wenn dies möglich ist.

Antwort

1
  1. gstuil sollte nicht hängen. Dies ist ein Fehler. Könntest du die Ausgabe von gsutl -D aufzeichnen und wenn es hängt, ein Problem in der gsutil github repo mit der angehängten Ausgabe erstellen und hier mit einem Link dazu kommentieren? Sie können den folgenden Befehl verwenden, um die Ausgabe zu protokollieren:

    $ cat urls.txt | gsutil -D -m cp -I gs://target-bucket-name/ 2>&1 | tee output 
    
  2. In der Zwischenzeit können Sie mit der Verringerung der Anzahl der Threads zu experimentieren versuchen und verarbeitet, dass der Parallelmodus (-m) verwendet, die durch diese Standardeinstellung zu ändern in Ihrem Boto-Datei.

    parallel_process_count = 1 # Default - 12 
    parallel_thread_count = 10 # Default - 10 
    
  3. Beachten Sie, dass Optionen gsutil hat alle Dateien in einem Eimer oder ein Unterverzeichnis auf einen neuen Eimer zu kopieren, sowie nur Dateien kopieren, die sich geändert haben oder nicht mit den folgenden Befehlen im Ziel vorhanden sind:

    gsutil -m cp gs://source-bucket/ gs://target-bucket 
    gsutil -m cp 'gs://source-bucket/dir/**' gs://target-bucket 
    gsutil -m rsync -r gs://source-bucket gs://target-bucket 
    
+0

Danke. Ab gcloud 182 (gsutil 4.28) auf Macos scheint es zu funktionieren. –

Verwandte Themen