Secara teknis apa perbedaan antara s3n, s3a dan s3?

121

Saya mengetahui keberadaan https://wiki.apache.org/hadoop/AmazonS3 dan kata-kata berikut:

S3 Native FileSystem (skema URI: s3n) Sistem file asli untuk membaca dan menulis file biasa di S3. Keuntungan dari sistem file ini adalah Anda dapat mengakses file di S3 yang ditulis dengan alat lain. Sebaliknya, alat lain dapat mengakses file yang ditulis menggunakan Hadoop. Kerugiannya adalah batas 5GB untuk ukuran file yang diberlakukan oleh S3.

S3A (skema URI: s3a) Penerus S3 Native, s3n fs, sistem S3a: menggunakan pustaka Amazon untuk berinteraksi dengan S3. Hal ini memungkinkan S3a untuk mendukung file yang lebih besar (tidak lebih dari batas 5GB), operasi kinerja yang lebih tinggi dan banyak lagi. Sistem file dimaksudkan sebagai pengganti / penerus S3 Native: semua objek yang dapat diakses dari s3n: // URL juga harus dapat diakses dari s3a hanya dengan mengganti skema URL.

S3 Block FileSystem (skema URI: s3) Sistem file berbasis blok yang didukung oleh S3. File disimpan sebagai blok, sama seperti di HDFS. Ini memungkinkan implementasi penggantian nama yang efisien. Sistem file ini mengharuskan Anda untuk mendedikasikan sebuah keranjang untuk sistem file - Anda tidak boleh menggunakan keranjang yang berisi file, atau menulis file lain ke keranjang yang sama. File yang disimpan oleh sistem file ini bisa lebih besar dari 5GB, tetapi tidak dapat dioperasikan dengan alat S3 lainnya.

Mengapa perubahan huruf pada URI bisa membuat perbedaan seperti itu? Sebagai contoh

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

untuk

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

Apa perbedaan teknis yang mendasari perubahan ini? Apakah ada artikel bagus yang bisa saya baca tentang ini?

Halo anak laki-laki
sumber

Jawaban:

136

Perubahan huruf pada skema URI membuat perbedaan besar karena menyebabkan perangkat lunak yang berbeda digunakan untuk antarmuka ke S3. Agak seperti perbedaan antara http dan https - ini hanya perubahan satu huruf, tetapi memicu perbedaan besar dalam perilaku.

Perbedaan antara s3 dan s3n / s3a adalah bahwa s3 adalah overlay berbasis blok di atas Amazon S3, sedangkan s3n / s3a tidak (berbasis objek).

Perbedaan antara s3n dan s3a adalah s3n mendukung objek berukuran hingga 5GB, sedangkan s3a mendukung objek hingga 5TB dan memiliki kinerja yang lebih tinggi (keduanya karena menggunakan unggahan multi-bagian). s3a adalah penerus s3n.

Jika Anda berada di sini karena ingin memahami sistem file S3 mana yang harus Anda gunakan dengan Amazon EMR, baca artikel ini dari Amazon (hanya tersedia di mesin wayback). Netnya adalah: gunakan s3: // karena s3: // dan s3n: // secara fungsional dapat dipertukarkan dalam konteks EMR, sedangkan s3a: // tidak kompatibel dengan EMR.

Untuk saran tambahan, baca Bekerja dengan Penyimpanan dan Sistem File .

jarmod.dll
sumber
13
Artikel dukungan dari Amazon tampaknya masih mutakhir, tetapi sekarang saya dapat menulis ke S3 dari pekerjaan EMR menggunakan s3askema. Mungkin saja jawabannya harus direvisi.
mlg
1
@mig Meskipun s3a mungkin berfungsi, dan tampaknya berfungsi menurut pengalaman saya, ini secara teknis tidak didukung oleh AWS. Jadi, saya pikir Anda akan menggunakannya dengan risiko Anda sendiri.
jarmod
@jarmod artikel yang Anda kutip di sini tidak berfungsi lagi. Apakah Anda dapat memperbarui tautan?
christang
@christang Sepertinya sudah tidak tersedia lagi jadi sudah disediakan link mesin wayback.
jarmod
2
Pada dasarnya, dukungan AWS merekomendasikan s3: // un place of s3a: // untuk tiket dukungan apa pun
Abhi
56

di Apache Hadoop, "s3: //" mengacu pada klien S3 asli, yang menggunakan struktur non-standar untuk skalabilitas. Perpustakaan itu tidak digunakan lagi dan akan segera dihapus,

s3n adalah penggantinya, yang menggunakan nama jalur langsung ke objek, sehingga Anda dapat membaca dan menulis data dengan aplikasi lain. Seperti s3: //, ini menggunakan jets3t.jar untuk berbicara dengan S3.

Pada layanan Amazon EMR, s3: // mengacu pada klien S3 Amazon sendiri, yang berbeda. Sebuah jalur di s3: // di EMR merujuk langsung ke sebuah objek di penyimpanan objek.

Di Apache Hadoop, S3N dan S3A keduanya merupakan konektor ke S3, dengan S3A penggantinya dibuat menggunakan AWS SDK Amazon sendiri. Kenapa namanya baru? sehingga kami dapat mengirimkannya berdampingan dengan yang stabil. S3A adalah tempat semua pekerjaan yang sedang berlangsung pada skalabilitas, kinerja, keamanan, dll. S3N dibiarkan sendiri jadi kami tidak merusaknya. S3A dikirim dalam Hadoop 2.6, tetapi masih stabil hingga 2.7, terutama dengan beberapa masalah skala kecil yang muncul.

Jika Anda menggunakan Hadoop 2.7 atau yang lebih baru, gunakan s3a. Jika Anda menggunakan Hadoop 2.5 atau sebelumnya. s3n, Jika Anda menggunakan Hadoop 2.6, itu adalah pilihan yang lebih sulit. -Aku akan mencoba s3a dan beralih kembali ke s3n jika ada masalah-

Untuk mengetahui lebih banyak tentang sejarah, lihat http://hortonworks.com/blog/history-apache-hadoops-support-amazon-s3/

Pembaruan 2017-03-14 sebenarnya, partisi rusak pada S3a di Hadoop 2.6, karena ukuran blok yang dikembalikan dalam listFiles()panggilan adalah 0: hal-hal seperti partisi Spark & ​​pig bekerja menjadi satu tugas / byte. Anda tidak dapat menggunakan S3a untuk pekerjaan analitik di Hadoop 2.6, meskipun operasi sistem file inti & pembuatan data senang. Hadoop 2.7 memperbaikinya.

2018-01-10 Pembaruan Hadoop 3.0 telah memotong implementasi s3: dan s3nnya: s3a adalah semua yang Anda dapatkan. Sekarang secara signifikan lebih baik daripada pendahulunya dan berkinerja sebaik implementasi Amazon. Amazon "s3:" masih ditawarkan oleh EMR, yang merupakan klien sumber tertutup mereka. Lihat dokumen EMR untuk info lebih lanjut.

stevel
sumber