Migrasi program Apache Spark ke AWS Glue - AWS Glue

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Migrasi program Apache Spark ke AWS Glue

Apache Spark adalah platform sumber terbuka untuk beban kerja komputasi terdistribusi yang dilakukan pada kumpulan data besar. AWS Gluememanfaatkan kemampuan Spark untuk memberikan pengalaman yang dioptimalkan untuk ETL. Anda dapat memigrasi program Spark AWS Glue untuk memanfaatkan fitur kami. AWS Gluememberikan peningkatan kinerja yang sama seperti yang Anda harapkan dari Apache Spark di Amazon EMR.

Jalankan kode Spark

Kode Native Spark dapat dijalankan di AWS Glue lingkungan di luar kotak. Skrip sering dikembangkan dengan mengubah sepotong kode secara iteratif, alur kerja yang cocok untuk Sesi Interaktif. Namun, kode yang ada lebih cocok untuk dijalankan dalam AWS Glue pekerjaan, yang memungkinkan Anda menjadwalkan dan secara konsisten mendapatkan log dan metrik untuk setiap skrip yang dijalankan. Anda dapat mengunggah dan mengedit skrip yang ada melalui konsol.

  1. Dapatkan sumber ke skrip Anda. Untuk contoh ini, Anda akan menggunakan contoh skrip dari repositori Apache Spark. Contoh Binarizer

  2. Di AWS Glue Console, perluas panel navigasi sisi kiri dan pilih ETL > Jobs

    Di panel Buat pekerjaan, pilih Editor skrip Spark. Bagian Opsi akan muncul. Di bawah Opsi, pilih Unggah dan edit skrip yang ada.

    Bagian unggahan file akan muncul. Di bawah Unggah file, klik Pilih file. Pemilih file sistem Anda akan muncul. Arahkan ke lokasi tempat Anda menyimpanbinarizer_example.py, pilih dan konfirmasikan pilihan Anda.

    Tombol Create akan muncul di header untuk panel Create job. Klik itu.

    Halaman AWS Glue Studio Jobs dengan panel editor skrip Spark dipilih.
  3. Browser Anda akan menavigasi ke editor skrip. Pada header, klik tab Job details. Tetapkan Nama dan Peran IAM. Untuk panduan seputar peran AWS Glue IAM, konsultasikanMenyiapkan izin IAM untuk AWS Glue.

    Opsional - atur jumlah pekerja yang diminta ke 2 dan Jumlah percobaan ulang ke. 1 Opsi ini berharga saat menjalankan pekerjaan produksi, tetapi menolaknya akan merampingkan pengalaman Anda saat menguji fitur.

    Di bilah judul, klik Simpan, lalu Jalankan

    Halaman detail pekerjaan dengan opsi ditetapkan seperti yang diinstruksikan.
  4. Arahkan ke tab Runs. Anda akan melihat panel yang sesuai dengan pekerjaan Anda. Tunggu beberapa menit dan halaman akan disegarkan secara otomatis untuk menampilkan Berhasil di bawah status Jalankan.

    Halaman pekerjaan berjalan dengan pekerjaan yang sukses.
  5. Anda akan ingin memeriksa output Anda untuk mengonfirmasi bahwa skrip Spark berjalan sebagaimana dimaksud. Skrip contoh Apache Spark ini harus menulis string ke aliran output. Anda dapat menemukannya dengan menavigasi ke log Output di bawah log Cloudwatch di panel agar pekerjaan berhasil dijalankan. Perhatikan id job run, id yang dihasilkan di bawah label Id yang dimulai denganjr_.

    Ini akan membuka CloudWatch konsol, diatur untuk memvisualisasikan konten grup AWS Glue log default/aws-glue/jobs/output, disaring ke konten aliran log untuk id jalankan pekerjaan. Setiap pekerja akan membuat aliran log, ditampilkan sebagai baris di bawah aliran Log. Satu pekerja seharusnya menjalankan kode yang diminta. Anda harus membuka semua aliran log untuk mengidentifikasi pekerja yang benar. Setelah Anda menemukan pekerja yang tepat, Anda akan melihat output skrip, seperti yang terlihat pada gambar berikut:

    Halaman CloudWatch konsol dengan output program Spark.

Prosedur umum yang diperlukan untuk memigrasi program Spark

Menilai dukungan versi Spark

AWS Glueversi rilis menentukan versi Apache Spark dan Python yang tersedia untuk pekerjaan itu. AWS Glue Anda dapat menemukan AWS Glue versi kami dan apa yang mereka dukungVersi AWS Glue. Anda mungkin perlu memperbarui program Spark Anda agar kompatibel dengan versi Spark yang lebih baru untuk mengakses fitur tertentu. AWS Glue

Sertakan pustaka pihak ketiga

Banyak program Spark yang ada akan memiliki ketergantungan, baik pada artefak pribadi maupun publik. AWS Gluemendukung dependensi gaya JAR untuk Pekerjaan Scala serta dependensi Roda dan sumber pure-Python untuk pekerjaan Python.

Python - Untuk informasi tentang dependensi Python, lihat Menggunakan pustaka Python dengan AWS Glue

Dependensi Python umum disediakan di AWS Glue lingkungan, termasuk pustaka Pandas yang umum diminta. Dependensi disertakan dalam AWS Glue Versi 2.0+. Untuk informasi selengkapnya tentang modul yang disediakan, lihatModul Python sudah disediakan di AWS Glue. Jika Anda perlu menyediakan Job dengan versi dependensi yang berbeda yang disertakan secara default, Anda dapat menggunakannya--additional-python-modules. Untuk informasi tentang argumen pekerjaan, lihatAWS Glueparameter pekerjaan.

Anda dapat menyediakan dependensi Python tambahan dengan argumen pekerjaan. --extra-py-files Jika Anda memigrasikan pekerjaan dari program Spark, parameter ini adalah opsi yang baik karena secara fungsional setara dengan --py-files bendera di PySpark, dan tunduk pada batasan yang sama. Untuk informasi selengkapnya tentang --extra-py-files parameter, lihat Termasuk file Python dengan fitur asli PySpark

Untuk pekerjaan baru, Anda dapat mengelola dependensi Python dengan argumen pekerjaan. --additional-python-modules Menggunakan argumen ini memungkinkan pengalaman manajemen ketergantungan yang lebih menyeluruh. Parameter ini mendukung dependensi gaya Roda, termasuk yang memiliki binding kode asli yang kompatibel dengan Amazon Linux 2.

Scala

Anda dapat menyediakan dependensi Scala tambahan dengan Job --extra-jars Argument. Dependensi harus di-host di Amazon S3 dan nilai argumen harus berupa daftar jalur Amazon S3 yang dibatasi koma tanpa spasi. Anda mungkin merasa lebih mudah untuk mengelola konfigurasi Anda dengan menggabungkan ulang dependensi Anda sebelum menghosting dan mengonfigurasinya. AWS Glue Dependensi JAR berisi bytecode Java, yang dapat dihasilkan dari bahasa JVM apa pun. Anda dapat menggunakan bahasa JVM lainnya, seperti Java, untuk menulis dependensi khusus.

Mengelola kredensi sumber data

Program Spark yang ada mungkin datang dengan konfigurasi yang kompleks atau khusus untuk menarik data dari sumber data mereka. Alur autentikasi sumber data umum didukung oleh koneksi. AWS Glue Untuk informasi selengkapnya tentang koneksi AWS Glue, lihat Menghubungkan ke data.

AWS Gluekoneksi memfasilitasi menghubungkan Job Anda ke berbagai jenis penyimpanan data dengan dua cara utama: melalui panggilan metode ke pustaka kami dan mengatur koneksi jaringan Tambahan di AWS konsol. Anda juga dapat memanggil AWS SDK dari dalam pekerjaan Anda untuk mengambil informasi dari koneksi.

Panggilan metode — AWS Glue Koneksi terintegrasi erat dengan Katalog AWS Glue Data, layanan yang memungkinkan Anda mengkurasi informasi tentang kumpulan data Anda, dan metode yang tersedia untuk berinteraksi dengan AWS Glue koneksi mencerminkan hal itu. Jika Anda memiliki konfigurasi autentikasi yang ingin Anda gunakan kembali, untuk koneksi JDBC, Anda dapat mengakses konfigurasi AWS Glue koneksi Anda melalui metode padaextract_jdbc_conf. GlueContext Untuk informasi selengkapnya, lihat extract_jdbc_conf

Konfigurasi konsol — AWS Glue Pekerjaan menggunakan AWS Glue koneksi terkait untuk mengonfigurasi koneksi ke subnet Amazon VPC. Jika Anda langsung mengelola materi keamanan Anda, Anda mungkin perlu menyediakan NETWORK jenis Koneksi jaringan tambahan di AWS konsol untuk mengonfigurasi perutean. Untuk informasi selengkapnya tentang API AWS Glue koneksi, lihat API Koneksi

Jika program Spark Anda memiliki alur autentikasi khusus atau tidak biasa, Anda mungkin perlu mengelola materi keamanan Anda secara langsung. Jika AWS Glue koneksi sepertinya tidak cocok, Anda dapat meng-host materi keamanan dengan aman di Secrets Manager dan mengaksesnya melalui boto3 atau AWS SDK, yang disediakan dalam pekerjaan.

Konfigurasikan Apache Spark

Migrasi kompleks sering mengubah konfigurasi Spark menjadi beban kerja mereka. Versi modern Apache Spark memungkinkan konfigurasi runtime diatur dengan file. SparkSession AWS Glue 3.0+ Pekerjaan disediakanSparkSession, yang dapat dimodifikasi untuk mengatur konfigurasi runtime. Konfigurasi Apache Spark. Tuning Spark rumit, dan AWS Glue tidak menjamin dukungan untuk mengatur semua konfigurasi Spark. Jika migrasi Anda memerlukan konfigurasi tingkat Spark yang substansif, hubungi dukungan.

Mengatur konfigurasi kustom

Program Spark yang dimigrasi dapat dirancang untuk mengambil konfigurasi khusus. AWS Gluememungkinkan konfigurasi diatur pada tingkat pekerjaan dan pekerjaan, melalui argumen pekerjaan. Untuk informasi tentang argumen pekerjaan, lihatAWS Glueparameter pekerjaan. Anda dapat mengakses argumen pekerjaan dalam konteks pekerjaan melalui perpustakaan kami. AWS Gluemenyediakan fungsi utilitas untuk memberikan tampilan yang konsisten antara argumen yang ditetapkan pada pekerjaan dan argumen yang ditetapkan pada pekerjaan yang dijalankan. Lihat Mengakses parameter menggunakan getResolvedOptions di Python dan AWS GlueAPI Scala GlueArgParser di Scala.

Migrasikan kode Java

Seperti dijelaskan dalamSertakan pustaka pihak ketiga, dependensi Anda dapat berisi kelas yang dihasilkan oleh bahasa JVM, seperti Java atau Scala. Dependensi Anda dapat menyertakan metode. main Anda dapat menggunakan main metode dalam ketergantungan sebagai titik masuk untuk pekerjaan Scala. AWS Glue Ini memungkinkan Anda untuk menulis main metode Anda di Java, atau menggunakan kembali main metode yang dikemas dengan standar perpustakaan Anda sendiri.

Untuk menggunakan main metode dari dependensi, lakukan hal berikut: Hapus isi panel pengeditan yang menyediakan objek defaultGlueApp. Berikan nama kelas yang sepenuhnya memenuhi syarat dalam ketergantungan sebagai argumen pekerjaan dengan kunci--class. Anda kemudian harus dapat memicu Job run.

Anda tidak dapat mengonfigurasi urutan atau struktur argumen yang AWS Glue diteruskan ke main metode. Jika kode Anda yang ada perlu membaca konfigurasi yang disetelAWS Glue, ini kemungkinan akan menyebabkan ketidakcocokan dengan kode sebelumnya. Jika Anda menggunakangetResolvedOptions, Anda juga tidak akan memiliki tempat yang baik untuk memanggil metode ini. Pertimbangkan untuk menjalankan dependensi Anda langsung dari metode utama yang dihasilkan oleh. AWS Glue Skrip AWS Glue ETL berikut menunjukkan contoh ini.

import com.amazonaws.services.glue.util.GlueArgParser object GlueApp { def main(sysArgs: Array[String]) { val args = GlueArgParser.getResolvedOptions(sysArgs, Seq("JOB_NAME").toArray) // Invoke static method from JAR. Pass some sample arguments as a String[], one defined inline and one taken from the job arguments, using getResolvedOptions com.mycompany.myproject.MyClass.myStaticPublicMethod(Array("string parameter1", args("JOB_NAME"))) // Alternatively, invoke a non-static public method. (new com.mycompany.myproject.MyClass).someMethod() } }