Storm atau Spark: Pilih senjata masa nyata anda

Idea kecerdasan perniagaan masa nyata telah lama wujud (lihat halaman Wikipedia mengenai topik yang dimulakan pada tahun 2006). Tetapi walaupun orang telah membincangkan idea itu selama bertahun-tahun, saya tidak melihat banyak syarikat benar-benar menerapkan visi, apalagi menyedari faedah yang diperolehnya.

Sekurang-kurangnya sebahagian daripada alasannya adalah kurangnya alat untuk melaksanakan BI dan analisis secara real time. Persekitaran penyimpanan data tradisional sangat berorientasi pada operasi kumpulan dengan latensi yang sangat tinggi, sangat mahal, atau keduanya.

Sejumlah platform sumber terbuka yang kuat dan mudah digunakan telah muncul untuk mengubahnya. Dua yang paling terkenal ialah Apache Storm dan Apache Spark, yang menawarkan keupayaan pemprosesan masa nyata kepada pengguna berpotensi yang jauh lebih luas. Kedua-duanya adalah projek dalam Apache Software Foundation, dan sementara kedua alat tersebut memberikan kemampuan tumpang tindih, masing-masing mempunyai ciri dan peranan tersendiri untuk dimainkan.

Storm: Hadoop pemprosesan masa nyata

Storm, kerangka pengiraan yang diedarkan untuk pemprosesan aliran acara, memulakan hidup sebagai projek BackType, sebuah syarikat risikan pemasaran yang dibeli oleh Twitter pada tahun 2011. Twitter segera membuka projek itu dan meletakkannya di GitHub, tetapi Storm akhirnya berpindah ke Apache Incubator dan menjadi projek peringkat tertinggi Apache pada bulan September 2014.

Ribut kadang-kadang disebut sebagai Hadoop pemprosesan masa nyata. Dokumentasi Storm nampaknya setuju: "Storm memudahkan untuk memproses aliran data yang tidak dapat diandalkan, melakukan untuk memproses masa nyata apa yang dilakukan Hadoop untuk pemprosesan kumpulan."

Untuk mencapai tujuan ini, Storm dirancang untuk skalabilitas besar-besaran, menyokong toleransi kesalahan dengan pendekatan "fail cepat, restart automatik" untuk proses, dan menawarkan jaminan yang kuat bahawa setiap tupel akan diproses. Default default untuk jaminan "sekurang-kurangnya sekali" untuk mesej, tetapi menawarkan kemampuan untuk melaksanakan pemrosesan "sekali sekali" juga.

Storm ditulis terutamanya dalam Clojure dan dirancang untuk menyokong "cerat" pendawaian (berfikir aliran input) dan "baut" (modul pemprosesan dan output) bersama-sama sebagai graf asiklik terarah (DAG) yang disebut topologi. Topologi ribut berjalan di kluster dan penjadual Storm mengedarkan kerja ke nod di sekitar kluster, berdasarkan konfigurasi topologi.

Anda boleh menganggap topologi kira-kira serupa dengan pekerjaan MapReduce di Hadoop, kecuali yang diberi tumpuan oleh Storm pada masa nyata, pemprosesan berasaskan aliran, topologi lalai untuk berjalan selamanya atau sehingga ditamatkan secara manual. Setelah topologi dimulakan, muncung membawa data ke dalam sistem dan menyerahkan data ke baut (yang pada gilirannya dapat menyerahkan data ke baut berikutnya) di mana kerja pengiraan utama dilakukan. Ketika proses berlangsung, satu atau lebih baut dapat menuliskan data ke pangkalan data atau sistem fail, mengirim pesan ke sistem luaran yang lain, atau membuat hasil pengiraan tersedia untuk pengguna.

Salah satu kekuatan ekosistem Storm adalah pelbagai sumber yang tersedia khusus untuk menerima data dari semua jenis sumber. Walaupun anda mungkin perlu menulis cerat khusus untuk aplikasi yang sangat khusus, ada kemungkinan anda dapat mencari cerat yang ada untuk berbagai sumber - dari API streaming Twitter hingga Apache Kafka hingga broker JMS hingga semua yang ada di antara mereka.

Adaptor ada untuk menjadikannya mudah untuk disepadukan dengan sistem fail HDFS, yang bermaksud Storm dapat dengan mudah beroperasi dengan Hadoop jika diperlukan. Kekuatan lain Storm adalah sokongannya untuk pengaturcaraan berbilang bahasa. Walaupun Storm sendiri berdasarkan Clojure dan berjalan di JVM, spouts dan baut boleh ditulis dalam hampir semua bahasa, termasuk bahasa bukan JVM yang memanfaatkan protokol untuk berkomunikasi antara komponen menggunakan JSON melalui stdin / stdout.

Ringkasnya, Storm adalah sistem sumber terbuka yang sangat berskala, cepat, toleransi kesalahan untuk pengiraan yang diedarkan, dengan fokus khusus pada pemprosesan aliran. Storm unggul dalam pemprosesan acara dan pengiraan tambahan, mengira metrik bergulir dalam masa nyata melalui aliran data. Walaupun Storm juga menyediakan primitif untuk memungkinkan RPC diedarkan generik dan secara teoritis dapat digunakan untuk mengumpulkan hampir semua pekerjaan pengiraan yang diedarkan, kekuatannya jelas adalah pemrosesan arus peristiwa.

Spark: Pemprosesan yang diedarkan untuk semua

Spark, projek lain yang sesuai dengan pengiraan diedarkan masa nyata, bermula sebagai projek AMPLab di University of California di Berkeley sebelum bergabung dengan Apache Incubator dan akhirnya lulus sebagai projek peringkat teratas pada Februari 2014. Seperti Storm, Spark menyokong aliran -pemrosesan berorientasikan, tetapi ia lebih merupakan platform pengkomputeran diedarkan untuk tujuan umum.

Dengan demikian, Spark dapat dilihat sebagai pengganti yang berpotensi untuk fungsi MapReduce Hadoop, sementara Spark memiliki kemampuan untuk berjalan di atas cluster Hadoop yang ada, bergantung pada YARN untuk penjadualan sumber. Selain Hadoop YARN, Spark dapat melapis di atas Mesos untuk penjadualan atau berjalan sebagai kluster yang berdiri sendiri menggunakan penjadual terbina dalam. Perhatikan bahawa jika Spark tidak digunakan dengan Hadoop, beberapa jenis sistem fail jaringan / diedarkan (NFS, AFS, dan lain-lain) masih diperlukan jika berjalan di kluster, sehingga setiap node akan memiliki akses ke data yang mendasari.

Spark ditulis dalam Scala dan, seperti Storm, menyokong pengaturcaraan berbilang bahasa, walaupun Spark hanya menyediakan sokongan API khusus untuk Scala, Java, dan Python. Spark tidak mempunyai abstraksi khusus dari "spout," tetapi termasuk adaptor untuk bekerja dengan data yang disimpan dalam banyak sumber yang berbeza, termasuk file HDFS, Cassandra, HBase, dan S3.

Di mana Spark bersinar menyokong pelbagai paradigma pemprosesan dan perpustakaan sokongan. Ya, Spark menyokong model penstriman, tetapi sokongan ini disediakan oleh hanya satu dari beberapa modul Spark, termasuk modul khusus untuk akses SQL, operasi grafik, dan pembelajaran mesin, bersama dengan pemprosesan aliran.

Spark juga menyediakan shell interaktif yang sangat berguna yang membolehkan analisis data cepat dan kotor prototaip dan penerokaan secara real time menggunakan API Scala atau Python. Bekerja di shell interaktif, anda dengan cepat melihat perbezaan besar lain antara Spark dan Storm: Spark mempunyai lebih banyak rasa "fungsional", di mana bekerja dengan API didorong lebih banyak dengan meraih panggilan kaedah berturut-turut untuk memanggil operasi primitif - berbanding dengan Model ribut, yang cenderung didorong dengan membuat kelas dan melaksanakan antara muka. Tidak ada pendekatan yang lebih baik atau lebih buruk, tetapi gaya yang anda sukai boleh mempengaruhi keputusan anda mengenai sistem mana yang lebih sesuai dengan keperluan anda.

Seperti Storm, Spark dirancang untuk skalabilitas besar-besaran, dan pasukan Spark telah mendokumentasikan pengguna sistem yang menjalankan kluster pengeluaran dengan ribuan nod. Di samping itu, Spark memenangi peraduan Daytona GraySort 2014 baru-baru ini, menjadikan masa terbaik untuk beban kerja yang memikul yang terdiri daripada menyusun data 100 TB. Pasukan Spark juga mendokumentasikan operasi Spark ETL dengan beban kerja pengeluaran dalam pelbagai Petabyte.

Spark adalah platform pengkomputeran diedarkan sumber terbuka yang pantas, berskala, dan fleksibel, serasi dengan Hadoop dan Mesos, yang menyokong beberapa model komputasi, termasuk streaming, operasi berpusatkan grafik, akses SQL, dan pembelajaran mesin yang diedarkan. Spark telah didokumentasikan untuk skala yang sangat baik dan, seperti Storm, adalah platform yang sangat baik untuk membangun analitik masa nyata dan sistem kecerdasan perniagaan.

Membuat keputusan anda

Bagaimana anda memilih antara Storm dan Spark?

Sekiranya keperluan anda terutama tertumpu pada pemprosesan aliran dan pemprosesan gaya CEP dan anda memulakan projek greenfield dengan kluster yang dibina khas untuk projek ini, saya mungkin akan menyukai Storm - terutamanya apabila Storm spout yang ada yang sesuai dengan keperluan integrasi anda tersedia . Ini bukan peraturan yang sukar dan cepat, tetapi faktor-faktor seperti itu sekurang-kurangnya akan menunjukkan permulaan dengan Badai.

Sebaliknya, jika anda memanfaatkan kluster Hadoop atau Mesos yang ada dan / atau jika keperluan pemprosesan anda memerlukan keperluan besar untuk pemprosesan grafik, akses SQL, atau pemrosesan kumpulan, anda mungkin ingin melihat Spark terlebih dahulu.

Faktor lain yang perlu dipertimbangkan adalah sokongan berbilang bahasa dari dua sistem. Sebagai contoh, jika anda perlu memanfaatkan kod yang ditulis dalam bahasa R atau bahasa lain yang tidak disokong oleh Spark, maka Storm mempunyai kelebihan sokongan bahasa yang lebih luas. Dengan cara yang sama, jika anda mesti mempunyai shell interaktif untuk penerokaan data menggunakan panggilan API, maka Spark menawarkan anda ciri yang tidak dimiliki oleh Storm.

Pada akhirnya, anda mungkin ingin melakukan analisis terperinci mengenai kedua-dua platform sebelum membuat keputusan akhir. Saya cadangkan menggunakan kedua-dua platform untuk membina bukti konsep kecil - kemudian jalankan penanda aras anda sendiri dengan beban kerja yang mencerminkan beban kerja yang anda jangkakan sedekat mungkin sebelum melakukan sepenuhnya.

Sudah tentu, anda tidak perlu membuat keputusan sama ada / atau. Bergantung pada beban kerja, infrastruktur, dan keperluan anda, anda mungkin dapati bahawa penyelesaian yang ideal adalah campuran Storm dan Spark - bersama dengan alat lain seperti Kafka, Hadoop, Flume, dan sebagainya. Di sinilah terletaknya keindahan sumber terbuka.

Apa sahaja laluan yang anda pilih, alat ini menunjukkan bahawa permainan BI masa nyata telah berubah. Pilihan hebat yang hanya tersedia untuk segelintir golongan elit kini dapat dijangkau oleh kebanyakan, jika tidak semua, organisasi menengah ke besar. Manfaatkan mereka.