Model pemrograman untuk Apache Beam

Dataflow didasarkan pada project Apache Beam open source. Dokumen ini menjelaskan model pemrograman Apache Beam.

Ringkasan

Apache Beam adalah model open source terpadu untuk menentukan pipeline batch dan streaming. Model pemrograman Apache Beam menyederhanakan mekanisme pemrosesan data berskala besar. Dengan menggunakan salah satu Apache Beam SDK, Anda membuat program yang mendefinisikan pipeline. Kemudian, jalankan pipeline di platform tertentu seperti Dataflow. Model ini memungkinkan Anda berkonsentrasi pada komposisi logis tugas pemrosesan data, bukan mengelola orkestrasi pemrosesan paralel.

Apache Beam melindungi Anda dari detail tingkat rendah pemrosesan terdistribusi, seperti mengoordinasikan pekerja individu, set data sharding, dan tugas-tugas lainnya. Dataflow mengelola sepenuhnya detail tingkat rendah ini.

Pipeline adalah grafik transformasi yang diterapkan pada koleksi data. Di Apache Beam, koleksi disebut PCollection, dan transformasi disebut PTransform. PCollection dapat dibatasi atau tidak dibatasi. PCollection terikat memiliki ukuran tetap yang diketahui, dan dapat diproses menggunakan pipeline batch. PCollections tanpa batas harus menggunakan pipeline streaming, karena data akan diproses saat data tersebut tiba.

Apache Beam menyediakan konektor untuk membaca dan menulis ke berbagai sistem, termasuk layanan Google Cloud dan teknologi pihak ketiga seperti Apache Kafka.

Diagram berikut menunjukkan pipeline Apache Beam.

Diagram pipeline Apache Beam

Anda dapat menulis PTransforms yang menjalankan logika arbitrer. Apache Beam SDK juga menyediakan library PTransforms siap pakai yang berguna, termasuk hal berikut:

  • Memfilter semua elemen yang tidak memenuhi predikat.
  • Terapkan fungsi pemetaan 1-ke-1 pada setiap elemen.
  • Kelompokkan elemen menurut kunci.
  • Menghitung elemen dalam koleksi
  • Menghitung elemen yang terkait dengan setiap kunci dalam koleksi nilai kunci.

Untuk menjalankan pipeline Apache Beam menggunakan Dataflow, lakukan langkah-langkah berikut:

  1. Gunakan Apache Beam SDK untuk menentukan dan membangun pipeline. Atau, Anda dapat men-deploy pipeline bawaan menggunakan template Dataflow.
  2. Gunakan Dataflow untuk menjalankan pipeline. Dataflow mengalokasikan kumpulan VM untuk menjalankan tugas, men-deploy kode ke VM, dan melakukan orkestrasi menjalankan tugas.
  3. Dataflow melakukan pengoptimalan pada backend untuk membuat pipeline berjalan secara efisien dan memanfaatkan paralelisasi.
  4. Saat tugas berjalan dan setelah selesai, gunakan kemampuan pengelolaan Dataflow untuk memantau progres dan memecahkan masalah.

Konsep Apache Beam

Bagian ini berisi ringkasan konsep dasar.

Konsep dasar

Pipelines
Pipeline mengenkapsulasi seluruh rangkaian komputasi yang terlibat dalam membaca data input, mengubah data tersebut, dan menulis data output. Sumber input dan sink output dapat berupa jenis yang sama atau berbeda, sehingga Anda dapat mengonversi data dari satu format ke format lainnya. Program Apache Beam dimulai dengan membuat objek Pipeline, lalu menggunakan objek tersebut sebagai dasar untuk membuat set data pipeline. Setiap pipeline mewakili satu tugas yang dapat diulang.
PCollection
PCollection mewakili set data multi-elemen yang berpotensi terdistribusi dan bertindak sebagai data pipeline. Transformasi Apache Beam menggunakan objek PCollection sebagai input dan output untuk setiap langkah di pipeline Anda. PCollection dapat menyimpan set data berukuran tetap atau set data tidak terbatas dari sumber data yang terus-menerus diperbarui.
Transformasi
Transformasi mewakili operasi pemrosesan yang mengubah data. Sebuah transformasi menggunakan satu atau beberapa PCollection sebagai input, menjalankan operasi yang Anda tentukan pada setiap elemen dalam koleksi tersebut, dan menghasilkan satu atau beberapa PCollection sebagai output. Transformasi dapat melakukan hampir semua jenis operasi pemrosesan, termasuk melakukan komputasi matematis pada data, mengonversi data dari satu format ke format lainnya, mengelompokkan data, membaca dan menulis data, memfilter data agar hanya menghasilkan elemen yang Anda inginkan, atau menggabungkan elemen data menjadi nilai tunggal.
ParDo
ParDo adalah operasi pemrosesan paralel inti di Apache Beam SDK, yang memanggil fungsi yang ditentukan pengguna pada setiap elemen input PCollection. ParDo mengumpulkan nol atau beberapa elemen output ke dalam PCollection output. Transformasi ParDo memproses elemen secara independen dan mungkin secara paralel.
I/O pipeline
Konektor I/O Apache Beam memungkinkan Anda membaca data ke dalam pipeline dan menulis data output dari pipeline. Konektor I/O terdiri dari sumber dan sink. Semua sumber dan sink Apache Beam adalah transformasi yang memungkinkan pipeline Anda bekerja dengan data dari berbagai format penyimpanan data. Anda juga dapat menulis konektor I/O kustom.
Agregasi
Agregasi adalah proses menghitung beberapa nilai dari beberapa elemen input. Pola komputasi utama untuk agregasi di Apache Beam adalah mengelompokkan semua elemen dengan kunci dan jendela yang sama. Kemudian, kode ini menggabungkan setiap kelompok elemen menggunakan operasi asosiatif dan komutatif.
Fungsi yang ditentukan pengguna (UDF)
Beberapa operasi dalam Apache Beam memungkinkan eksekusi kode yang ditentukan pengguna sebagai cara mengonfigurasi transformasi. Untuk ParDo, kode yang ditetapkan pengguna menentukan operasi yang akan diterapkan ke setiap elemen, dan untuk Combine, kode menentukan bagaimana nilai harus digabungkan. Pipeline mungkin berisi UDF yang ditulis dalam bahasa yang berbeda dengan bahasa runner Anda. Pipeline juga dapat berisi UDF yang ditulis dalam berbagai bahasa.
Berlari
Runner adalah software yang menerima pipeline dan menjalankannya. Sebagian besar runner adalah penerjemah atau adaptor ke sistem pemrosesan big data paralel yang masif. Runner lainnya tersedia untuk pengujian dan proses debug lokal.
Asal
Transformasi yang membaca dari sistem penyimpanan eksternal. Pipeline biasanya membaca data input dari sumber. Sumber memiliki jenis, yang mungkin berbeda dari jenis sink, sehingga Anda dapat mengubah format data saat bergerak dalam pipeline.
Sink
Transformasi yang menulis ke sistem penyimpanan data eksternal, seperti file atau database.
TextIO
PTransform untuk membaca dan menulis file teks. Sumber dan sink TextIO mendukung file yang dikompresi dengan gzip dan bzip2. Sumber input TextIO mendukung JSON. Namun, agar layanan Dataflow dapat memparalelkan input dan output, data sumber harus dipisahkan dengan line feed. Anda dapat menggunakan ekspresi reguler untuk menargetkan file tertentu dengan sumber TextIO. Dataflow mendukung pola karakter pengganti umum. Ekspresi glob Anda dapat muncul di mana saja pada jalur. Namun, Dataflow tidak mendukung karakter pengganti berulang (**).

Konsep lanjutan

Waktu peristiwa
Waktu terjadinya peristiwa data, ditentukan oleh stempel waktu di elemen data itu sendiri. Hal ini berbeda dengan waktu saat elemen data aktual diproses pada setiap tahap dalam pipeline.
Jendela
Window memungkinkan operasi pengelompokan pada koleksi tak terbatas dengan membagi koleksi menjadi jendela koleksi terbatas sesuai dengan stempel waktu setiap elemen. Fungsi windowing memberi tahu runner cara menetapkan elemen ke jendela awal, dan cara menggabungkan jendela dari elemen yang dikelompokkan. Apache Beam memungkinkan Anda menentukan berbagai jenis jendela atau menggunakan fungsi windowing yang telah ditetapkan sebelumnya.
Watermark
Apache Beam melacak watermark, yang merupakan gagasan sistem kapan semua data di jendela tertentu dapat diharapkan telah tiba di pipeline. Apache Beam melacak watermark karena data tidak dijamin akan masuk di pipeline dalam urutan waktu atau pada interval yang dapat diprediksi. Selain itu, tidak ada jaminan bahwa peristiwa data akan muncul di pipeline dalam urutan yang sama seperti saat peristiwa tersebut dibuat.
Pemicu
Pemicu menentukan kapan harus memunculkan hasil gabungan saat data tiba. Untuk data terikat, hasil akan dimunculkan setelah semua input diproses. Untuk data tidak terbatas, hasil akan ditampilkan saat watermark melewati akhir jendela, yang menunjukkan bahwa sistem yakin bahwa semua data input untuk jendela tersebut telah diproses. Apache Beam menyediakan beberapa pemicu yang telah ditetapkan sebelumnya dan memungkinkan Anda menggabungkannya.

Langkah selanjutnya

Apache Beam® adalah merek dagang terdaftar dari Apache Software Foundation atau afiliasinya di Amerika Serikat dan/atau negara lainnya.