Pengantar Netflix Genie

1. Ikhtisar

Dalam tutorial ini, kita akan menjelajahi mesin Genie, yang dikembangkan Netflix untuk mengirimkan pekerjaan ke cluster secara abstrak .

Pengetahuan dasar tentang pemrosesan big data, misalnya dengan Hadoop dan Spark, direkomendasikan untuk tutorial ini.

2. Mengapa Jin?

Bayangkan kita memiliki banyak pengguna yang perlu mengirimkan berbagai tugas ke cloud yang berisi banyak cluster Hadoop dengan ukuran berbeda . Sementara beberapa cluster dibuat untuk memproses data pada waktu tertentu, cluster lainnya berpusat pada penutupan layanan untuk membebaskan sumber daya. Pengguna, dengan demikian, akan mengalami masalah dalam menemukan cluster yang tepat untuk pekerjaan mereka.

Dengan asumsi banyak pengguna bahkan tidak ingin membuat cluster atau tahu tentang konfigurasinya, ini bisa menjadi masalah nyata. Bagaimana dengan menyediakan cara bagi pengguna untuk mengirimkan pekerjaan mereka dan mendapatkan hasilnya kembali tanpa harus berurusan dengan penyiapan infrastruktur?

3. Apakah Jin itu?

Netflix membangun Genie sebagai mesin terdistribusi untuk menyelesaikan masalah yang disebutkan di atas. Mesin yang menyediakan RESTful API terpadu untuk mengirimkan pekerjaan secara mandiri . Genie memisahkan tugas peluncuran dari konfigurasi yang memungkinkan penskalaan cluster secara fleksibel.

Namun, Genie tidak menskalakan cluster itu sendiri - Genie hanya memenuhi tugas pengguna dengan memulai pekerjaan mereka di cluster yang sesuai dengan kebutuhan pekerjaan mereka.

Penjadwalan juga bukan sesuatu yang dibuat oleh Jin. Tujuan utamanya adalah manajemen pekerjaan pada satu level pekerjaan.

Untuk penjadwalan alur kerja, alat lain seperti Apache Oozie harus digunakan. Faktanya, Netflix menyatakan dengan jelas bahwa:

Genie bukanlah penjadwal alur kerja, seperti Oozie. Unit eksekusi Jin adalah pekerjaan Hadoop, Sarang, atau Babi tunggal. Genie tidak menjadwalkan atau menjalankan alur kerja - pada kenyataannya, kami menggunakan penjadwal perusahaan (UC4) di Netflix untuk menjalankan ETL kami.

Namun demikian, Genie menawarkan API untuk mengelola sumber daya seperti cluster, aplikasi, dan perintah. Setelah mendaftarkan sumber daya, pengguna dapat menemukannya dan mulai mengirimkan pekerjaan mereka.

Terakhir, perlu dicatat bahwa Genie adalah proyek sumber terbuka yang kurang lebih disesuaikan dengan kebutuhan khusus Netflix. Ini memainkan peran penting dalam lingkungan cloud Netflix yang berubah dengan cepat dan terintegrasi dengan tumpukan teknologi Netflix.

4. Jin Beraksi

Sekarang, mari kita lihat Genie beraksi untuk mendapatkan pemahaman yang lebih baik tentang bagaimana kita bisa menggunakannya untuk mengirimkan pekerjaan. Sebagai pengantar, kami akan mengerjakan demo Genie yang tersedia di GitHub.

4.1. Prasyarat

Contoh ini membutuhkan:

  • versi terbaru Docker dan Docker Compose (atau Docker Desktop, yang menyertakan keduanya)
  • porta gratis berikut: 8080, 8088, 19888, 19070, 19075, 8089, 19889, 19071 dan 19076
  • mesin yang relatif kuat dengan setidaknya 8GB RAM di mana 4GB harus ditetapkan untuk buruh pelabuhan
  • setidaknya 4GB ruang disk

4.2. Pengaturan Cluster

Pertama-tama, kita harus berhati-hati dalam mengatur cluster kita menggunakan Docker Compose dengan mengunduh docker-compose.yml ke folder pilihan kita. Untuk ini, mari buat direktori baru bernama demoDir . File compose mendefinisikan lima layanan yang akan kita jelajahi satu per satu.

Pertama, mari kita lihat server Genie yang akan berjalan dalam wadah bernama genie_demo_app_3.3.9 yang memetakan port 8080 ke Genie UI:

genie: image: netflixoss/genie-app:3.3.9 ports: - "8080:8080" depends_on: - genie-hadoop-prod - genie-hadoop-test - genie-apache tty: true container_name: genie_demo_app_3.3.9

Layanan kedua adalah genie_demo_apache_3.3.9 yang digunakan untuk mengunduh file yang dibutuhkan oleh demo:

genie-apache: image: netflixoss/genie-demo-apache:3.3.9 tty: true container_name: genie_demo_apache_3.3.9

Klien Genie datang berikutnya, yang berisi contoh skrip untuk mengirimkan pekerjaan menggunakan Genie. Nama wadahnya adalah genie_demo_client_3.3.9 :

genie-client: image: netflixoss/genie-demo-client:3.3.9 depends_on: - genie tty: true container_name: genie_demo_client_3.3.9

Cluster Hadoop produksi (SLA) kami adalah yang berikutnya. Layanan ini akan menerima pekerjaan yang kami kirimkan. Manajer sumber daya cluster memetakan ke port 8088 sedangkan server riwayat mendapatkan 19888.

Kami akan membuat sedikit penyesuaian di sini dan memetakan node bernama dan data ke port 19070 dan 19075 masing-masing:

genie-hadoop-prod: image: sequenceiq/hadoop-docker:2.7.1 command: /bin/bash -c "/usr/local/hadoop/sbin/mr-jobhistory-daemon.sh start historyserver && /etc/bootstrap.sh -bash" ports: - "19888:19888" - "19070:50070" - "19075:50075" - "8088:8088" tty: true container_name: genie_demo_hadoop_prod_3.3.9

Terakhir, mari kita jelajahi penampung pengujian Hadoop yang mewakili cluster pengujian. Demikian pula dengan cluster produksi, itu ditetapkan port 8089 (manajer sumber daya), 19889 (server riwayat), 19071 (node ​​bernama) dan 19076 (node ​​data):

genie-hadoop-test: image: sequenceiq/hadoop-docker:2.7.1 command: /bin/bash -c "/usr/local/hadoop/sbin/mr-jobhistory-daemon.sh start historyserver && /etc/bootstrap.sh -bash" ports: - "19889:19888" - "19071:50070" - "19076:50075" - "8089:8088" tty: true container_name: genie_demo_hadoop_test_3.3.9

Mari kita mulai container yang disebutkan di atas dengan menjalankan docker-compose dari demoDir. Ini akan memakan waktu lebih lama untuk dieksekusi saat dijalankan untuk pertama kalinya karena harus mengunduh gambar demo:

cd demoDir docker-compose up -d

Kami dapat memverifikasi cluster sudah siap dan siap dengan memeriksa:

  • Genie UI: // localhost: 8080
  • UI pengelola sumber daya cluster SLA: // localhost: 8088
  • UI pengelola sumber daya cluster UJI: // localhost: 8089

4.3. Demo Init

Sekarang, setelah wadah demo berjalan, kita dapat masuk ke wadah klien menggunakan perintah exec buruh pelabuhan :

docker exec -it genie_demo_client_3.3.9 /bin/bash

Sekarang di dalam wadah klien, kami menjalankan skrip init untuk mempersiapkan cluster untuk menerima pekerjaan kami :

./init_demo.py

Jika demo berhasil berjalan, Genie UI akan menampilkan data di cluster, perintah, dan tab aplikasi.

4.4. Pengiriman Pekerjaan

Sebagai contoh lain, mari kirimkan pekerjaan Spark untuk menghitung 10 digit desimal pertama dari π. Kita bisa mengirimkan pekerjaan ke tes atau SLA dengan meneruskan literal yang sesuai sebagai argumen ke skrip:

./run_spark_submit_job.py sla 2.0.1 ./run_spark_submit_job.py test 2.0.1

Dari tab Pekerjaan di Genie UI, kita dapat mengklik ikon folder di setiap deskripsi pekerjaan untuk menavigasi ke folder keluarannya . Dari sana, pada penyelesaian yang berhasil, kita dapat menemukan nilai yang dihitung di bawah stdout.

UI pengelola sumber daya Hadoop juga menampilkan tugas kluster.

Terakhir, kami keluar dari penampung klien, menghentikan dan menghapus semua penampung demo dengan menjalankan:

docker-compose down

Gambar akan tetap tersedia di disk, dan kami dapat memulai wadah demo lagi kapan saja.

5. Kesimpulan

Dalam tutorial ini, kami telah memperkenalkan Genie, alat manajemen pekerjaan yang dikembangkan oleh Netflix.

Kami kemudian menjalankan demo, yang memberi kami contoh praktis tentang bagaimana kami dapat menggunakan Genie dalam skenario kehidupan nyata.

Seperti biasa, contoh kode ada di GitHub.