Bir ec2 elastik blok depo biriminden s3'e 400G dosyaları kopyalamanın en hızlı yolu nedir?


21

400G'lik dosyaları elastik blok mağaza hacminden s3 kovasına kopyalamalıyım ... Bunlar yaklaşık 300k ~ 1Mb dosya

S3cmd ve s3fuse'u denedim , ikisi de gerçekten yavaştır. S3cmd tam bir gün çalıştı, kopyalamayı tamamladı ve kovayı kontrol ettiğimde hiçbir şey olmadı (sanırım bir şeyler ters gitti. s3cmd hiçbir şeyden şikayet etmedi)

S3Fuse başka bir gün için çalışıyor ve dosyaların% 10'undan azını kopyaladı ...

Bunun için daha iyi bir çözüm var mı?

Tabii ki Linux (ubuntu 12.04) kullanıyorum


2
Birçok kıyaslama (örneğin bu ), S3: 1) dosya boyutu 2) paralel iş parçacığı sayısı ve 3) örnek büyüklüğü için 3 belirleyici faktör verimi göstermiştir. 64 ile 128 arasında paralel (eşzamanlı) 1 MB'lık yükleme, bir m1.xlarge'nin bir küme hesaplama (cc1.4xlarge) örneğinin 10Gbps uplink'ını doyurmalı ve hatta doyurmalıdır. Akılda olan birçok senaryo olmalı (örneğin, bu bir veya s3cmd-modifikasyonu)
cyberx86

1
s3-paralel-put işe yaradı!
aseba

Yanıtlar:


20

EC2'den S3'e verimi belirleyen birkaç anahtar faktör vardır:

  • Dosya boyutu - daha küçük dosyalar daha fazla sayıda istek gerektirir ve daha fazla ek yük ve daha yavaş aktarım sağlar. Dosya boyutunda olan kazanç (EC2'den kaynaklanırken) 256kB'den büyük dosyalar için önemsizdir. (Oysa, uzaktaki bir yerden daha yüksek gecikme süresiyle geçiş yapmak, 1MiB ve 2MiB arasında olana kadar kayda değer iyileşmeler göstermeye devam etme eğilimindedir).
  • Paralel iş parçacıklarının sayısı - tek bir yükleme iş parçacığı genellikle oldukça düşüktür - genellikle 5MiB / s'nin altında. Verim, eşzamanlı iş parçacıklarının sayısıyla artar ve 64 ile 128 iş parçacığı arasında doruğa çıkma eğilimindedir. Daha büyük örneklerin daha fazla sayıda eşzamanlı iş parçacığını kaldırabildiğine dikkat edilmelidir.
  • Örnek boyutu - Örnek özelliklerine göre , daha büyük örnekler, ağa bağlı olan (geçici / EBS disklerinden okuma dahil olmak üzere) ağ bant genişliğinin (ve genel olarak G / Ç'nin daha büyük (ve daha az değişken) tahsisi dahil olmak üzere daha özel kaynaklara sahiptir. Her kategori için sayı değerleri:
    • Çok Yüksek: Teorik: 10 Gbps = 1250 MB / s; Gerçekçi: 8.8 Gb / sn = 1100 MB / sn
    • Yüksek: Teorik: 1 Gbps = 125MB / s; Gerçekçi: 750 Mbps = 95MB / sn
    • Orta: Teorik: 250 Mbps; Gerçekçi: 80 Mbps = 10 MB / sn
    • Düşük: Teorik: 100 Mbps; Gerçekçi: 10-15Mbps = 1-2MB / s

Büyük miktarda veri aktarımı durumunda, verimlilikte (> 10x) etkin kazanç maliyet farkından (2-3x) daha fazla olduğundan küme hesaplama örneği kullanmak ekonomik olarak pratik olabilir.

Yukarıdaki fikirler oldukça mantıklı olsa da (konu başına düşen başlık olmayabilir), ancak bunları destekleyen kriterleri bulmak oldukça kolaydır. Özellikle ayrıntılı bir tane burada bulunabilir .

64 ile 128 arasında paralel (eşzamanlı) yükleme, 1 MB'lık nesnelerin kullanılması, bir m1.xlarge öğesinin 1Gbps yukarı bağlantısını doyurmalı ve hatta bir küme hesaplama (cc1.4xlarge) örneğinin 10Gbps yukarı bağlantısını doyurmalıdır.

Örnek boyutunu değiştirmek oldukça kolay olmakla birlikte, diğer iki faktörün yönetilmesi zor olabilir.

  • Dosya boyutu genellikle sabittir - EC2'de dosyaları birleştiremiyoruz ve S3'te ayırmalarını sağlayamıyoruz (küçük dosyalar hakkında yapabileceğimiz fazla bir şey yok). Ancak büyük dosyalar EC2 tarafında ayrılabilir ve S3 tarafında yeniden birleştirilebilir (S3'ün çok parçalı yüklemesini kullanarak). Tipik olarak, bu 100 MB'den büyük dosyalar için avantajlıdır.
  • Paralel ipler yemek biraz zor. En basit yaklaşım, bir kerede birden fazla kopyasını çalıştıracak varolan bazı yükleme komut dosyası için bir sarmalayıcı yazmaya gelir. Daha iyi yaklaşımlar, benzer bir şeyi başarmak için doğrudan API'yi kullanır. Anahtarın paralel istekler olduğunu göz önünde bulundurarak, birkaç olası komut dosyasını bulmak zor değildir, örneğin:
    • s3cmd-modifikasyonu - bu işlevi ekleyen, ancak birkaç senedir güncellenmemiş olan erken sürüm bir s3cmd çatalı.
    • s3-parallel-put - son derece iyi çalışan python betiği

8

Yani, s3-paralel-put birçok testten sonra , numarayı çok fena yaptı. S3'e çok fazla dosya yüklemeniz gerekirse, açık bir şekilde çözüm. Yorumlarınız için cyberx86 teşekkürler .


3
Meraktan, a) 400GB’ın yüklenmesi ne kadar sürdü b) kaç tane konu kullandın c) hangi örnek boyutunu kullandın?
cyberx86

1
@ Cyberx86 Geçenlerde bir Büyük Ec2 Örneği üzerinde s3-paralel-put kullandım. 5 adet iplik kullandım ve 10.49 saat içinde 288.73 GB kopyaladı.
Gortron


2

Bunu yapmak için C # ( CopyFasterToS3 ) bir optimize konsol uygulaması yazdım . EBS vol'da kullandım, benim durumumda 20 milyon adette 2 milyondan fazla dosya bulunan 5 klasör vardı. Senaryo 30 dakikadan daha az bir sürede yürütüldü.

Olarak bu makalede i kadar paralel bir özyinelemeli fonksiyonunu kullanarak göstermiştir. Başka bir dile kopyalayabilirsin.

İyi şanslar!




Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.