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?
sumber
s3a
skema. Mungkin saja jawabannya harus direvisi.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.
sumber