Baru-baru ini, Jupyter Notebook telah menjadi sangat populer di kalangan para ahli Ilmu Data, menjadi standar de facto untuk prototipe cepat dan analisis data. Di Netflix, kami mencoba untuk mendorong batas-batas kemampuannya lebih jauh dengan memikirkan kembali apa yang akan menjadi Notebook, siapa yang dapat digunakan, dan apa yang dapat mereka lakukan dengannya. Kami berupaya keras menerjemahkan visi kami menjadi kenyataan.
Dalam artikel ini kami ingin memberi tahu Anda mengapa menurut kami Notebook Jupyter sangat menarik dan menginspirasi kami sepanjang jalan. Selain itu, kami menjelaskan komponen infrastruktur kami dan meninjau cara-cara baru untuk menggunakan Notebook Jupyter di Netflix.

Catatan dari penerjemah: hati-hati, banyak teks dan beberapa gambar
Jika Anda tidak punya banyak waktu, sebaiknya segera buka bagian Use Cases .
Kenapa semua ini?
Data adalah kekuatan Netflix. Mereka menembus pikiran kita, memengaruhi keputusan kita, dan menantang hipotesis kita. Mereka membebankan biaya eksperimen dan munculnya yang baru pada skala yang belum pernah terjadi sebelumnya . Data ini memungkinkan kami untuk menemukan makna yang tak terduga dan mengalami pengalaman pribadi yang luar biasa bagi 130 juta pengguna kami di seluruh dunia .
Membuat semua ini menjadi kenyataan adalah pencapaian yang patut dipertimbangkan, membutuhkan dukungan teknik dan infrastruktur yang mengesankan. Setiap hari, lebih dari 1 triliun acara diterima dalam aliran (streaming ingestion pipeline) yang diproses dan dicatat dalam penyimpanan cloud 100PB. Dan setiap hari, pengguna kami melakukan lebih dari 150.000 tugas pada data ini, mencakup segalanya mulai dari laporan hingga pembelajaran mesin dan algoritme rekomendasi.
Untuk mendukung skenario penggunaan seperti itu pada skala seperti itu, kami telah membangun salah satu yang terbaik di industri ini, platform data yang fleksibel, kuat dan, jika perlu, canggih (Platform Data Netflix). Kami juga mengembangkan alat dan layanan tambahan, seperti Genie (layanan eksekusi tugas) dan Metacat (penyimpanan meta). Alat-alat ini mengurangi kompleksitas, sehingga memungkinkan untuk mendukung jangkauan pengguna yang lebih luas di seluruh perusahaan.

Variasi pengguna sangat mengesankan, tetapi Anda harus membayar untuk itu: Platform Data Netflix dan ekosistem alat dan layanannya harus berskala untuk mendukung skenario penggunaan tambahan, bahasa, skema akses, dan banyak lagi. Untuk pemahaman yang lebih baik tentang masalah ini, kami mempertimbangkan tiga posisi umum: seorang insinyur analis, seorang insinyur data, dan seorang ilmuwan data.
Perbedaan dalam preferensi bahasa dan alat untuk posisi yang berbedaSebagai aturan, setiap posisi lebih suka menggunakan set alat dan bahasa mereka sendiri. Sebagai contoh, seorang insinyur data dapat membuat ansambel data baru yang berisi triliunan aliran acara menggunakan Scala di IntelliJ. Analis dapat menggunakannya dalam laporan kualitas streaming global baru menggunakan SQL dan Tableau. Laporan ini dapat ditujukan kepada ilmuwan Data yang akan membangun model kompresi streaming baru menggunakan R dan RStudio. Sekilas, proses-proses ini tampak terfragmentasi, meskipun saling melengkapi, tetapi jika Anda melihat lebih dalam, masing-masing proses ini memiliki beberapa tugas yang tumpang tindih:
eksplorasi data - terjadi pada tahap awal proyek; dapat mencakup tinjauan umum data sampel, pertanyaan untuk analisis statistik dan visualisasi data
persiapan data - tugas yang berulang, dapat mencakup pembersihan, standarisasi, transformasi, denormalisasi, dan agregasi data; biasanya bagian paling memakan waktu dari proyek
validasi data - tugas yang terjadi secara teratur; dapat mencakup survei data sampel, analisis statistik, analisis agregat, dan visualisasi data; biasanya terjadi sebagai bagian dari eksplorasi data, persiapan data, pengembangan, pra-penempatan, dan pasca-penempatan
produksi - terjadi pada tahap akhir proyek; dapat mencakup penyebaran kode, penambahan sampel, pelatihan model, validasi data, dan alur kerja penjadwalan
Untuk memperluas kemampuan pengguna kami, kami ingin membuat tugas ini semudah mungkin.
Untuk memperluas kemampuan platform kami, kami ingin meminimalkan jumlah alat yang perlu didukung. Tapi bagaimana caranya? Tidak ada alat tunggal yang dapat mencakup semua tugas ini. Selain itu, seringkali satu tugas membutuhkan penggunaan beberapa alat. Namun, jika kita melepaskan, pola umum muncul untuk semua alat dan bahasa: mengeksekusi kode, memeriksa data, menyajikan hasilnya.
Kebetulan proyek sumber terbuka dikembangkan khusus untuk ini: Proyek Jupyter .
Notebook Jupyter

Notebook Jupyter di nteract menampilkan Vega dan Altair
Proyek Jupyter diluncurkan pada 2014 dengan tujuan menciptakan seperangkat alat sumber terbuka yang konsisten untuk penelitian, alur kerja yang dapat direproduksi, dan analisis data. Alat-alat ini telah sangat dipuji oleh industri dan hari ini Jupyter telah menjadi bagian integral dari toolkit ilmuwan Data. Untuk memahami sejauh mana pengaruhnya, kami mencatat bahwa Jupyter dianugerahi Penghargaan Sistem Perangkat Lunak ACM 2017 - penghargaan prestisius yang ia bagikan dengan Java, Unix, dan the_Web.
Untuk memahami mengapa Notebook Jupyter begitu menarik bagi kami, pertimbangkan fitur utamanya:
- protokol pengiriman pesan untuk menganalisis dan mengeksekusi kode terlepas dari bahasa
- format file dengan kemampuan untuk mengedit, untuk deskripsi, tampilan dan pelaksanaan kode, output dan catatan penurunan harga
- antarmuka web untuk penulisan interaktif, eksekusi kode, dan visualisasi hasil
Protokol Jupyter menyediakan API perpesanan standar dengan kernel yang bertindak sebagai modul penghitungan dan menyediakan arsitektur yang dapat dikomposit, sehingga berbagi di mana kode (UI) disimpan dan di mana dieksekusi (kernel). Dengan demikian, memisahkan antarmuka dan inti, Notebook dapat bekerja dalam beberapa bahasa sambil mempertahankan fleksibilitas untuk mengkonfigurasi runtime. Jika ada bahasa untuk bahasa yang dapat bertukar pesan menggunakan protokol Jupyter, Notebook dapat mengeksekusi kode dengan mengirim dan menerima pesan ke kernel tersebut.
Selain semuanya, semua ini didukung oleh format file yang memungkinkan Anda untuk menyimpan kode itu sendiri dan hasil pelaksanaannya di satu tempat. Ini berarti bahwa Anda dapat melihat hasil eksekusi nanti tanpa harus me-restart kode itu sendiri. Notebook juga dapat menyimpan deskripsi terperinci tentang konteksnya, dan apa yang sebenarnya terjadi di dalamnya. Ini membuatnya menjadi format yang ideal untuk menyampaikan konteks bisnis, memperbaiki asumsi, mengomentari kode, menggambarkan kesimpulan, dan banyak lagi.
Gunakan kasing
Di antara banyak skenario, kasus penggunaan yang paling populer adalah: akses data, template notebook, dan penjadwalan notebook.
Akses data
Notebook Jupyter awalnya muncul di Netflix untuk mendukung alur kerja sains data. Ketika penggunaannya di antara para pakar ilmu Data tumbuh, kami melihat potensi untuk memperluas kemampuan alat kami. Kami menyadari bahwa kami dapat menggunakan fleksibilitas dan arsitektur Notebook Jupyter dan memperluas kemampuannya untuk berbagi data. Pada kuartal ketiga 2017, kami dengan serius mulai membuat Notebook sebagai alat untuk lingkaran sempit spesialis menjadi perwakilan kelas satu dari Platform Data Netflix.
Dari sudut pandang pengguna kami, Notebook menawarkan antarmuka yang nyaman untuk eksekusi perintah interaktif, riset keluaran, dan visualisasi data - semuanya dalam satu lingkungan pengembangan cloud. Kami juga mendukung pustaka Python, yang menggabungkan akses ke platform API. Ini berarti bahwa pengguna memiliki akses terprogram ke hampir seluruh platform Netflix melalui Notebook. Berkat kombinasi fleksibilitas, kekuatan, dan kemudahan penggunaan ini, perusahaan mengalami peningkatan tajam dalam penggunaannya oleh semua jenis pengguna platform.
Saat ini, notebook adalah alat data paling populer di Netflix.
Template Notebook
Ketika dukungan untuk Jupyter Notebooks diperluas dalam platform, kami mulai memperkenalkan fitur-fitur baru untuk menggunakannya untuk memenuhi skenario penggunaan baru. Dari sinilah laptop berparameter. Laptop berparameter menghadirkan apa yang namanya tertulis: notebook yang memungkinkan Anda mengatur parameter dalam kode dan menerima input pada saat dijalankan. Ini memberikan mekanisme yang baik bagi pengguna untuk mendefinisikan notebook sebagai templat yang dapat digunakan kembali.
Pengguna kami telah menemukan banyak cara untuk menggunakan pola seperti itu. Kami daftar beberapa yang paling sering digunakan:
- Data Scientist : bereksperimen dengan berbagai koefisien dan merangkum hasilnya
- Insinyur Data : Melakukan pengumpulan audit kualitas data sebagai bagian dari proses penyebaran.
- Analis Data : bagikan pertanyaan dan visualisasi yang telah disiapkan sehingga para pemangku kepentingan dapat menjelajahi data lebih dalam dari yang diperbolehkan Tableau
- Insinyur Perangkat Lunak : Kirim hasil skrip untuk memecahkan masalah kerusakan
Penjadwalan Notebook (Penjadwal)
Salah satu cara awal untuk menggunakan Notebook adalah dengan membuat lapisan gabungan untuk menjadwalkan alur kerja.
Karena setiap laptop dapat berjalan pada kernel yang arbitrer, kami dapat mendukung lingkungan runtime yang ditentukan pengguna. Dan karena notebook menggambarkan aliran eksekusi linier yang dibagi menjadi sel, kita dapat menghubungkan kegagalan ke sel tertentu. Ini memungkinkan pengguna untuk mendeskripsikan eksekusi dan visualisasi dalam bentuk narasi yang lebih banyak, yang dapat ditangkap secara akurat pada saat startup di kemudian hari.
Paradigma semacam itu memungkinkan Anda menggunakan laptop untuk pekerjaan interaktif dan dengan lancar beralih ke beberapa eksekusi dan penggunaan penjadwal. Yang ternyata sangat nyaman bagi pengguna. Banyak pengguna membuat seluruh alur kerja di buku catatan hanya untuk kemudian menggandakannya ke file yang terpisah dan menjalankannya pada waktu yang tepat. Dengan memperlakukan notebook sebagai deskripsi proses berurutan, kita dapat dengan mudah menjadwalkannya untuk berjalan seperti alur kerja lainnya.
Kami dapat merencanakan eksekusi jenis pekerjaan lain melalui notebook. Ketika pekerjaan Spark atau Presto dijalankan dari penjadwal, kode sumber dimasukkan ke notebook yang baru dibuat dan dieksekusi. Notebook ini menjadi repositori riwayat yang berisi kode sumber, parameter, konfigurasi, log eksekusi, pesan kesalahan, dll. Saat pemecahan masalah, ini memberikan titik awal yang cepat untuk penyelidikan, karena semua informasi yang relevan ada di dalam dan notebook dapat dijalankan untuk debugging interaktif.
Infrastruktur Notebook
Mendukung skenario yang dijelaskan di atas pada skala Netflix membutuhkan infrastruktur pendukung yang luas. Perlihatkan secara singkat beberapa proyek yang akan dibahas pada bagian berikut:
nteract adalah generasi baru UI berbasis React untuk notebook Jupyter. Ini menyediakan antarmuka yang sederhana, intuitif dan menawarkan beberapa peningkatan untuk Jupyter UI klasik, seperti bilah alat sel inline, sel seret & lepas dan penjelajah internal.
Pustaka Papermill untuk parameterisasi, pelaksanaan, dan analisis notebook Jupyter. Dengan bantuan itu Anda dapat menyebarkan beberapa notebook dengan berbagai parameter dan menjalankannya secara bersamaan. Papermill juga memungkinkan Anda untuk mengumpulkan dan meringkas metrik untuk seluruh koleksi notebook.
Commuter adalah layanan ringan, skalabel vertikal untuk melihat dan berbagi buku catatan. Ini menyediakan versi API yang kompatibel dengan Jupyter untuk konten dan membuatnya mudah dibaca notebook yang disimpan secara lokal di Amazon S3. Juga menawarkan penjelajah untuk mencari dan berbagi file.
Titus adalah platform manajemen kontainer yang menyediakan peluncuran kontainer yang dapat diskalakan dan andal serta integrasi asli cloud dengan Amazon AWS. Titus dikembangkan di Netflix dan digunakan dalam pertempuran untuk mendukung streaming Netflix, rekomendasi, dan sistem konten.
Penjelasan lebih rinci tentang arsitektur dapat ditemukan di artikel Penjadwalan Notebook di Netflix . Untuk tujuan posting ini, kami membatasi diri pada tiga komponen dasar sistem: penyimpanan, eksekusi, dan antarmuka.
Infrastruktur Notebook di NetflixPenyimpanan
Platform Data Netflix menggunakan penyimpanan cloud Amazon S3 dan EFS, yang diperlakukan notebook sebagai sistem file virtual. Ini berarti bahwa setiap pengguna memiliki direktori home EFS yang berisi ruang kerja pribadi untuk notebook. Di ruang ini, kami menyimpan buku catatan apa pun yang dibuat atau dimuat oleh pengguna. Ini juga merupakan tempat di mana membaca dan menulis terjadi ketika pengguna secara interaktif memulai laptop. Kami menggunakan kombinasi [workspace + nama file] untuk namespace, mis. /efs/users/kylek/notebooks/MySparkJob.ipynb untuk dilihat, dibagikan, dan dalam penjadwal eksekusi. Perjanjian semacam itu mencegah tabrakan dan memfasilitasi identifikasi pengguna dan lokasi notebook di EFS.
Path to workspace memungkinkan Anda untuk mengabaikan kompleksitas penyimpanan cloud untuk pengguna. Misalnya, hanya nama-nama file buku catatan yang ditampilkan di direktori, mis. MySparkJob.ipynb. File yang sama tersedia melalui terminal: ~ / notebooks / MySparkJob.ipynb.

Penyimpanan notebook vs. akses
Saat pengguna menetapkan tugas memulai notebook, scheduler menyalin buku catatan pengguna dari EFS ke direktori bersama di S3. Notebook dalam S3 menjadi sumber kebenaran untuk penjadwal, atau sumber notebook. Setiap kali scheduler (dispatcher) memulai notebook, ia membuat notebook baru dari sumbernya. Notebook baru ini adalah apa yang sebenarnya dimulai dan menjadi catatan yang tidak berubah dari eksekusi tertentu, yang berisi kode yang dapat dieksekusi, output, dan log dari setiap sel. Kami menyebutnya notebook keluaran (keluaran).
Co-creation adalah fitur dasar Netflix. Oleh karena itu, tidak mengherankan ketika pengguna mulai bertukar tautan URL ke notebook. Dengan tumbuhnya praktik ini, kita dihadapkan dengan masalah penulisan ulang yang tidak disengaja yang disebabkan oleh akses simultan dari beberapa pengguna ke notebook yang sama. Pengguna kami ingin cara untuk membagikan buku catatan aktif mereka dalam mode hanya baca. Ini mengarah pada penciptaan Komuter . Di bawah tenda, Commuter menampilkan Jupyter API ke daftar / file dan / api / konten dalam daftar direktori, untuk melihat isi file, dan mengakses metadata file. Ini berarti bahwa pengguna dapat melihat notebook tanpa konsekuensi untuk tugas pertempuran atau notebook yang berjalan langsung.
Hitung
Mengelola sumber daya komputasi adalah salah satu bagian tersulit dalam bekerja dengan data. Ini terutama berlaku di Netflix, di mana kami menggunakan arsitektur kontainer yang sangat skalabel di AWS. Semua pekerjaan di Platform Data dieksekusi dalam wadah, termasuk kueri, saluran pipa, dan notebook. Secara alami, kami ingin mengabstraksi sebanyak mungkin dari kompleksitas ini.
Wadah disediakan saat pengguna memulai server notebook. Kami menyediakan standar rasional untuk sumber daya kontainer yang berfungsi ~ 87,3% dari pola eksekusi. Ketika ini tidak cukup, pengguna dapat meminta lebih banyak sumber daya menggunakan antarmuka yang sederhana.

Pengguna dapat memilih sebanyak atau sesedikit + memori yang diperlukan
Kami juga menyediakan runtime terpadu dengan gambar wadah jadi. Gambar tersebut memiliki pustaka bersama dan satu set kernel default yang telah ditentukan. Tidak semua yang ada di gambar itu statis - kernel kami menggunakan versi Spark terbaru dan konfigurasi cluster terbaru untuk platform kami. Ini mengurangi kekacauan dan waktu penyetelan untuk laptop baru dan umumnya membuat kita berada dalam lingkungan runtime tunggal.
Di bawah tenda, kami mengelola orkestrasi dan lingkungan dengan Titus , layanan manajemen wadah Docker kami. Kami juga membuat pembungkus atas layanan ini, mengelola konfigurasi dan gambar server pengguna tertentu. Gambar juga termasuk grup dan peran keamanan pengguna, serta variabel lingkungan umum untuk identifikasi di perpustakaan yang disertakan. Ini berarti bahwa pengguna kami dapat menghabiskan lebih sedikit waktu untuk infrastruktur dan lebih banyak waktu untuk data.
Antarmuka
Sebelumnya, kami menggambarkan visi kami bahwa notebook harus menjadi alat paling efektif dan optimal untuk bekerja dengan data. Tetapi ini menghadirkan tantangan yang menarik: bagaimana satu antarmuka dapat mendukung semua pengguna? Kami tidak tahu jawaban pastinya, tetapi kami punya beberapa ide.
Kita tahu bahwa kesederhanaan dibutuhkan. Ini berarti UI intuitif dengan gaya minimalis, dan itu juga membutuhkan UX yang bijaksana yang membuat hal-hal rumit menjadi mudah dilakukan. Filosofi ini sangat sesuai dengan tujuan nteract , yang ditulis pada halaman depan React untuk notebook Jupyter. Ini menekankan kompabilitas sebagai prinsip dasar desain, menjadikannya bagian yang ideal dari visi kami.
Keluhan yang paling umum dari pengguna kami adalah kurangnya visualisasi asli untuk semua bahasa, terutama untuk bahasa non-Python. Nteract's Data Explorer adalah contoh yang baik tentang bagaimana membuat hal-hal rumit menjadi mudah dengan menyediakan cara yang tidak bergantung pada bahasa untuk mengeksplorasi data dengan cepat.
Anda dapat melihat Explorer Data yang sedang beraksi pada contoh ini di MyBinder. (memuat mungkin memakan waktu beberapa menit)

Memvisualisasikan dataset World Happiness Report dengan Explorer Data nteract
Kami juga memperkenalkan dukungan bawaan untuk parameterisasi, yang menyederhanakan perencanaan peluncuran notebook, dan membuat templat yang dapat digunakan kembali.

Dukungan asli untuk notebook yang diparameterisasi di nteract
Jupyter notebook , . , notebook. 12 , . , , , . , , Spark DataFrames, Scala. .
Open Source Projects
Netflix . , , . Netflix Data Platform Netflix OSS . βNot Invented Hereβ. Spark , Jupyter pandas .
, , Jupyter Project, . , nteract notebook UI Netflix. , . , Jupyter Notebook, , , . nteract.
, Netflix, . , , , , . , Papermill, .
What's Next ( )
, β (Netflixers) . Notebook Netflix. , . , .
Fuh! Terima kasih sudah bisa menguasai pos besar ini. Kami hanya menyentuh bagian atas apa yang kami lakukan dengan notebook. Posting ini adalah yang pertama dari serangkaian artikel tentang menggunakan notebook di Netflix yang akan kami publikasikan selama beberapa minggu ke depan. Saat ini, dua artikel telah diterbitkan:
Bagian I: Inovasi Notebook (posting ini)
Bagian II: Penjadwalan Notebook
Dari penerjemah:Kata-kata Penjadwalan dan alur kerja sulit untuk diterjemahkan ke dalam bahasa Rusia, jika Anda tahu versi terjemahan yang ringkas, beri tahu saya di komentar.