EMR mengintegrasikan Spark dengan Object Storage Service (OSS), memungkinkan Anda membaca dan menulis data di OSS menggunakan Spark RDD (Scala), PySpark, atau Spark SQL. EMR mendukung akses ke OSS baik tanpa menentukan pasangan AccessKey maupun dengan secara eksplisit menentukan pasangan AccessKey.
Pilih metode akses
| Metode | Kapan digunakan |
|---|---|
| Akses tanpa password (disarankan) | Kluster EMR Anda mendukung akses OSS tanpa password. Tidak perlu mengelola kredensial. |
| AccessKey eksplisit | Anda memerlukan pasangan AccessKey tertentu, atau kluster Anda tidak mendukung akses tanpa password. |
Prasyarat
Kluster EMR dengan Spark terinstal
Akses SSH ke node master. Untuk detailnya, lihat Masuk ke node master kluster
Bucket OSS yang berisi data untuk dibaca, atau path OSS yang dapat ditulis untuk output
Akses OSS tanpa menentukan pasangan AccessKey
Kluster EMR menggunakan akses OSS tanpa password secara default. Contoh berikut menggunakan skema URI oss:// untuk membaca dari dan menulis ke OSS.
Gunakan Spark Shell (Scala)
Masuk ke node master melalui SSH.
Jalankan Spark Shell:
spark-shellJalankan kode berikut. Ganti
<yourBucket>dengan nama bucket OSS Anda.scala> val pathIn = "oss://<yourBucket>/path/to/read" scala> val inputData = sc.textFile(pathIn) scala> val cnt = inputData.count cnt: Long = ... scala> println(s"count: $cnt") scala> val outputPath = "oss://<yourBucket>/path/to/write" scala> val outputData = inputData.map(e => s"$e has been processed.") scala> outputData.saveAsTextFile(outputPath)Kode ini membaca semua baris dari path input, menghitung jumlahnya, menambahkan sufiks ke setiap baris, lalu menulis hasilnya ke path output. Untuk contoh lengkapnya, lihat SparkOssDemo.scala di GitHub.
Gunakan PySpark
Masuk ke node master melalui SSH.
Jalankan PySpark:
pysparkJalankan kode berikut. Ganti
<yourBucket>dengan nama bucket OSS Anda.>>> pathIn = "oss://<yourBucket>/path/to/read" >>> df = spark.read.text(pathIn) >>> cnt = df.count() >>> print(cnt) >>> outputPath = "oss://<yourBucket>/path/to/write" >>> df.write.format("parquet").mode("overwrite").save(outputPath)Kode ini membaca path input sebagai DataFrame teks, mencetak jumlah barisnya, lalu menulis hasilnya dalam format Parquet ke path output.
Gunakan Spark SQL
Masuk ke node master melalui SSH.
Jalankan CLI Spark SQL:
spark-sqlBuat database yang disimpan di OSS, buat tabel CSV, dan masukkan satu baris:
Parameter Deskripsi delimiterKarakter yang digunakan untuk memisahkan bidang dalam file CSV. headerAtur ke truejika baris pertama berisi nama kolom;falsejika tidak.CREATE DATABASE test_db LOCATION "oss://<yourBucket>/test_db"; USE test_db; CREATE TABLE student (id INT, name STRING, age INT) USING CSV OPTIONS ("delimiter"=";", "header"="true"); INSERT INTO student VALUES(1, "ab", 12); SELECT * FROM student;Ganti
<yourBucket>dengan nama bucket OSS Anda. PernyataanSELECTmengembalikan:1 ab 12Untuk memverifikasi hasilnya, periksa file CSV di OSS. File tersebut menggunakan delimiter titik koma, dengan baris pertama sebagai header:
id;name;age 1;ab;12
Akses OSS dengan menentukan pasangan AccessKey
Gunakan metode ini ketika akses tanpa password tidak tersedia atau ketika Anda perlu mengotentikasi dengan pasangan AccessKey tertentu.
Langkah 1: Hapus konfigurasi akses tanpa password
Hapus parameter fs.oss.credentials.provider dari file core-site.xml layanan Hadoop-Common.
Langkah 2: Verifikasi bahwa akses tanpa password telah dihapus
Jalankan perintah berikut:
hadoop fs -ls oss://<yourBucket>/test_dbJika penghapusan berhasil, Anda akan melihat:
ls: ERROR: not found login secrets, please configure the accessKeyId and accessKeySecret.Langkah 3: Tambahkan parameter AccessKey ke core-site.xml
Dalam file core-site.xml layanan Hadoop-Common, tambahkan parameter berikut:
| Kunci | Nilai contoh | Deskripsi |
|---|---|---|
fs.oss.accessKeyId | LTAI5tM85Z4sc**** | ID AccessKey Anda |
fs.oss.accessKeySecret | HF7P1L8PS6Eqf**** | Rahasia AccessKey Anda |
Langkah 4: Verifikasi konfigurasi AccessKey
Jalankan perintah berikut:
hadoop fs -ls oss://<yourBucket>/test_dbJika pasangan AccessKey dikonfigurasi dengan benar, output akan menampilkan daftar path OSS:
drwxrwxrwx - root root 0 2025-02-24 11:45 oss://<yourBucket>/test_db/studentLangkah 5: Mulai ulang layanan Spark
Mulai ulang semua layanan terkait Spark. Setelah berjalan, gunakan Spark Shell, PySpark, atau Spark SQL untuk membaca dari dan menulis ke OSS.
FAQ
Bagaimana cara membaca dari satu bucket dan menulis ke bucket lain yang menggunakan kredensial berbeda?
Konfigurasikan penyedia kredensial tingkat bucket menggunakan parameter fs.oss.bucket.<BucketName>.credentials.provider, di mana <BucketName> adalah nama bucket yang ingin Anda konfigurasi. Untuk detailnya, lihat Konfigurasikan penyedia kredensial OSS atau OSS-HDFS berdasarkan bucket.
Bagaimana cara mengakses bucket di wilayah berbeda?
Gunakan format oss://<BucketName>.<public endpoint of the bucket>/ untuk menentukan titik akhir publik bucket tersebut. Akses lintas-wilayah dikenai biaya transfer data dan dapat memengaruhi stabilitas.
Bagaimana cara menggunakan SDK Amazon S3 untuk mengakses OSS?
OSS menyediakan operasi API yang kompatibel dengan Amazon S3. Setelah memigrasikan data dari Amazon S3 ke OSS, perbarui konfigurasi klien Anda agar mengarah ke titik akhir OSS. Untuk detailnya, lihat Gunakan SDK Amazon S3 untuk mengakses OSS.