Teknik olarak s3n, s3a ve s3 arasındaki fark nedir?


121

Https://wiki.apache.org/hadoop/AmazonS3'ün ve aşağıdaki kelimelerin varlığının farkındayım :

S3 Native FileSystem (URI şeması: s3n) S3'te normal dosyaları okumak ve yazmak için yerel bir dosya sistemi. Bu dosya sisteminin avantajı, S3 üzerindeki diğer araçlarla yazılmış dosyalara erişebilmenizdir. Tersine, diğer araçlar Hadoop kullanılarak yazılan dosyalara erişebilir. Dezavantajı, S3 tarafından uygulanan dosya boyutundaki 5 GB sınırdır.

S3A (URI şeması: s3a) S3 Native, s3n fs'nin halefi olan S3a: sistemi, S3 ile etkileşimde bulunmak için Amazon'un kitaplıklarını kullanır. Bu, S3a'nın daha büyük dosyaları (5 GB sınırı yoktur), daha yüksek performanslı işlemleri ve daha fazlasını desteklemesini sağlar. Dosya sisteminin S3 Native'in yerine / yerine geçmesi amaçlanmıştır: s3n: // URL'lerinden erişilebilen tüm nesnelere, URL şeması değiştirilerek s3a'dan da erişilebilir.

S3 Blok Dosya Sistemi (URI şeması: s3) S3 tarafından desteklenen blok tabanlı bir dosya sistemi. Dosyalar, HDFS'de olduğu gibi bloklar halinde depolanır. Bu, yeniden adların verimli bir şekilde uygulanmasına izin verir. Bu dosya sistemi, dosya sistemi için bir grup ayırmanızı gerektirir - dosyaları içeren mevcut bir grubu kullanmamalı veya aynı gruba başka dosyalar yazmamalısınız. Bu dosya sistemi tarafından depolanan dosyalar 5 GB'tan büyük olabilir, ancak diğer S3 araçlarıyla birlikte çalışamazlar.

URI'daki bir harf değişikliği neden bu kadar fark yaratabilir? Örneğin

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

için

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

Bu değişikliğin altında yatan teknik fark nedir? Bununla ilgili okuyabileceğim iyi makaleler var mı?

Yanıtlar:


136

URI şemasındaki harf değişikliği büyük bir fark yaratır çünkü S3 ile arayüz oluşturmak için farklı yazılımların kullanılmasına neden olur. Bir şekilde http ve https arasındaki fark gibi - bu yalnızca tek harfli bir değişikliktir, ancak davranışta büyük bir farkı tetikler.

S3 ve s3n / s3a arasındaki fark, s3'ün Amazon S3'ün üzerinde blok tabanlı bir kaplama olması, s3n / s3a'nın ise (nesne tabanlıdır) olmasıdır.

S3n ve s3a arasındaki fark, s3n'nin boyutu 5 GB'a kadar olan nesneleri desteklerken, s3a'nın 5 TB'a kadar olan nesneleri desteklemesi ve daha yüksek performansa sahip olmasıdır (her ikisi de çok parçalı yüklemeyi kullandığı için). s3a, s3n'nin halefidir.

Amazon EMR ile hangi S3 dosya sistemini kullanmanız gerektiğini anlamak istediğiniz için buradaysanız, bu makaleyi Amazon'dan okuyun (yalnızca wayback makinesinde mevcuttur). Ağ: s3: // kullanın çünkü s3: // ve s3n: //, EMR bağlamında işlevsel olarak birbirinin yerine kullanılabilir, s3a: // ise EMR ile uyumlu değildir.

Ek tavsiyeler için Depolama ve Dosya Sistemleriyle Çalışma bölümünü okuyun .


13
Amazon'daki destek makalesi hala güncel görünüyor, ancak artık s3aşemayı kullanarak EMR işlerinden S3'e yazabilirim . Cevabın revize edilmesi mümkündür.
mlg

1
@mig s3a işe yarayabilir ve benim deneyimlerime göre işe yarıyor gibi görünse de, teknik olarak AWS tarafından desteklenmiyor. Bu yüzden, bunu kendi sorumluluğunuzda kullanacağınızı düşünüyorum.
jarmod

@jarmod burada alıntı yaptığınız makale artık çalışmıyor. Bağlantıyı güncelleyebilir misin?
christang

@christang Görünüşe göre artık mevcut değil, bu yüzden geri dönüş makinesi bağlantısı sağladık.
jarmod

2
Temel olarak, AWS desteği herhangi bir destek bileti için s3: // un place of s3a: // önerir
Abhi

56

Apache Hadoop'ta "s3: //", ölçeklenebilirlik için standart olmayan bir yapı kullanan orijinal S3 istemcisini ifade eder. Bu kitaplık kullanımdan kaldırıldı ve yakında silinecek,

s3n, nesnelere doğrudan yol adları kullanan halefidir, böylece diğer uygulamalarla veri okuyabilir ve yazabilirsiniz. S3: // gibi, S3 ile konuşmak için jets3t.jar kullanır.

Amazon'un EMR hizmetinde s3: //, Amazon'un farklı olan kendi S3 istemcisini ifade eder. EMR üzerinde s3: // içindeki bir yol, doğrudan nesne deposundaki bir nesneye başvurur.

Apache Hadoop'ta S3N ve S3A, Amazon'un kendi AWS SDK'sı kullanılarak oluşturulan halefi S3A ile S3 için bağlayıcıdır. Neden yeni isim? böylece onu stabil olanla yan yana gönderebiliriz. S3A, ölçeklenebilirlik, performans, güvenlik vb. İle ilgili devam eden tüm çalışmaların gittiği yerdir. S3N yalnız kaldı, bu yüzden onu kırmayız. S3A, Hadoop 2.6'da sevk edildi, ancak temelde bazı küçük ölçekli sorunların ortaya çıkmasıyla birlikte 2.7'ye kadar hala stabilize oluyordu.

Hadoop 2.7 veya üzerini kullanıyorsanız, s3a kullanın. Hadoop 2.5 veya önceki bir sürümünü kullanıyorsanız. s3n, Hadoop 2.6 kullanıyorsanız, bu daha zor bir seçimdir. -S3a'yı denerim ve sorun çıkarsa s3n'ye geri dönerim-

Geçmişle ilgili daha fazla bilgi için bkz. Http://hortonworks.com/blog/history-apache-hadoops-support-amazon-s3/

2017-03-14 Güncelleme aslında, Hadoop 2.6'da S3a'da bölümleme bozuldu çünkü bir listFiles()çağrıda döndürülen blok boyutu 0: Spark ve pig gibi şeyler işi tek bir göreve / bayta bölüyor. Hadoop 2.6'da analiz çalışması için S3a'yı, çekirdek dosya sistemi işlemleri ve veri üretimi memnun olsa bile kullanamazsınız. Hadoop 2.7 bunu düzeltir.

2018-01-10 Hadoop 3.0 Güncellemesi s3: ve s3n uygulamalarını kesti: Tek aldığınız s3a. Artık selefinden önemli ölçüde daha iyi ve en az Amazon uygulaması kadar iyi performans gösteriyor. Amazon'un "s3:" ü hala kapalı kaynak müşterileri olan EMR tarafından sunulmaktadır. Daha fazla bilgi için EMR belgelerine başvurun .

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.