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 membangun program yang menentukan pipeline. Kemudian, Anda menjalankan pipeline di platform tertentu seperti Dataflow. Model ini memungkinkan Anda berkonsentrasi pada komposisi logis tugas pemrosesan data, bukan mengelola orkestrasi pemrosesan paralel.
Apache Beam mengisolasi Anda dari detail tingkat rendah pemrosesan terdistribusi, seperti mengoordinasikan setiap pekerja, membagi-bagi set data, dan tugas-tugas lainnya. Dataflow mengelola sepenuhnya detail tingkat rendah ini.
Pipeline adalah grafik transformasi yang diterapkan pada kumpulan
data. Di Apache Beam, kumpulan disebut PCollection
, dan
transformasi disebut PTransform
. PCollection
dapat dibatasi atau tidak dibatasi.
PCollection
terbatas memiliki ukuran tetap yang diketahui, dan dapat diproses menggunakan
pipeline batch. PCollections
tidak terbatas harus menggunakan pipeline streaming, karena
data diproses saat tiba.
Apache Beam menyediakan konektor untuk membaca dari dan menulis ke sistem yang berbeda, termasuk layanan Google Cloud dan teknologi pihak ketiga seperti Apache Kafka.
Diagram berikut menunjukkan pipeline Apache Beam.
Anda dapat menulis PTransforms
yang melakukan logika arbitrer. SDK Apache Beam juga menyediakan library PTransforms
yang berguna secara langsung, termasuk:
- 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 key-value.
Untuk menjalankan pipeline Apache Beam menggunakan Dataflow, lakukan langkah-langkah berikut:
- Gunakan Apache Beam SDK untuk menentukan dan membangun pipeline. Atau, Anda dapat men-deploy pipeline bawaan dengan menggunakan template Dataflow.
- Gunakan Dataflow untuk menjalankan pipeline. Dataflow mengalokasikan kumpulan VM untuk menjalankan tugas, men-deploy kode ke VM, dan mengatur jalannya tugas.
- Dataflow melakukan pengoptimalan di backend untuk membuat pipeline Anda berjalan secara efisien dan memanfaatkan paralelisme.
- Saat tugas sedang 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
- Pipeline
- Pipeline merangkum seluruh rangkaian komputasi yang terlibat dalam
membaca data input, mentransformasi data tersebut, dan menulis data output. Sumber
input dan tujuan output dapat berupa jenis yang sama atau jenis yang berbeda, sehingga Anda dapat
mengonversi data dari satu format ke format lainnya. Program Apache Beam dimulai dengan
membangun 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 didistribusikan dan bertindak sebagai data pipeline. Transformasi Apache Beam menggunakan objekPCollection
sebagai input dan output untuk setiap langkah dalam pipeline Anda.PCollection
dapat menyimpan set data berukuran tetap atau set data tanpa batas dari sumber data yang terus diperbarui.- Transformasi
- Transformasi mewakili operasi pemrosesan yang mentransformasi data. Transformasi mengambil satu atau beberapa
PCollection
sebagai input, melakukan operasi yang Anda tentukan pada setiap elemen dalam koleksi tersebut, dan menghasilkan satu atau beberapaPCollection
sebagai output. Transformasi dapat melakukan hampir semua jenis operasi pemrosesan, termasuk melakukan penghitungan matematika pada data, mengonversi data dari satu format ke format lain, mengelompokkan data, membaca dan menulis data, memfilter data untuk menghasilkan hanya elemen yang Anda inginkan, atau menggabungkan elemen data menjadi satu nilai. - ParDo
ParDo
adalah operasi pemrosesan paralel inti di SDK Apache Beam, yang memanggil fungsi yang ditentukan pengguna pada setiap elemenPCollection
input.ParDo
mengumpulkan nol atau lebih elemen output ke dalam outputPCollection
. TransformasiParDo
memproses elemen secara independen dan mungkin secara paralel. Fungsi yang ditentukan pengguna untukParDo
disebutDoFn
.- 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 beberapa format penyimpanan data yang berbeda. Anda juga dapat menulis konektor I/O kustom.
- Agregasi
- Agregasi adalah proses penghitungan beberapa nilai dari beberapa elemen input. Pola komputasi utama untuk agregasi di Apache Beam adalah mengelompokkan semua elemen dengan kunci dan jendela umum. Kemudian, metode 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 ditentukan pengguna menentukan operasi yang akan diterapkan ke setiap elemen, dan untukCombine
, kode tersebut menentukan cara 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 beberapa bahasa. - Runner
- Runner adalah software yang menerima pipeline dan mengeksekusinya. Sebagian besar runner adalah translator atau adapter untuk sistem pemrosesan big data paralel masif. Runner lain ada untuk pengujian dan proses debug lokal.
- Sumber
- Transformasi yang membaca dari sistem penyimpanan eksternal. Pipeline biasanya membaca data input dari sumber. Sumber memiliki jenis, yang mungkin berbeda dengan jenis tujuan, sehingga Anda dapat mengubah format data saat data bergerak melalui pipeline.
- Sink
- Transformasi yang menulis ke sistem penyimpanan data eksternal, seperti file atau database.
- TextIO
- PTransform untuk membaca dan menulis file teks. Sumber dan tujuan TextIO
mendukung file yang dikompresi dengan
gzip
danbzip2
. Sumber input TextIO mendukung JSON. Namun, agar layanan Dataflow dapat memparalelkan input dan output, data sumber Anda harus dibatasi dengan feed baris. 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 dalam jalur. Namun, Dataflow tidak mendukung karakter pengganti rekursif (**
).
Konsep lanjutan
- Waktu peristiwa
- Waktu terjadinya peristiwa data, ditentukan oleh stempel waktu pada elemen data itu sendiri. Hal ini berbeda dengan waktu saat elemen data sebenarnya diproses di tahap mana pun dalam pipeline.
- Windowing
- Windowing memungkinkan pengelompokan operasi pada koleksi tanpa batas dengan membagi koleksi menjadi jendela koleksi terbatas berdasarkan stempel waktu setiap elemen. Fungsi windowing memberi tahu runner cara menetapkan elemen ke jendela awal, dan cara menggabungkan jendela elemen yang dikelompokkan. Apache Beam memungkinkan Anda menentukan berbagai jenis jendela atau menggunakan fungsi windowing yang telah ditentukan sebelumnya.
- Watermark
- Apache Beam melacak tanda air, yang merupakan gagasan sistem tentang kapan semua data dalam jendela tertentu dapat diharapkan telah tiba di pipeline. Apache Beam melacak tanda air karena data tidak dijamin akan tiba dalam pipeline sesuai urutan waktu atau pada interval yang dapat diprediksi. Selain itu, tidak ada jaminan bahwa peristiwa data akan muncul di pipeline dalam urutan yang sama dengan urutan saat peristiwa tersebut dibuat.
- Pemicu
- Pemicu menentukan kapan hasil gabungan akan dikeluarkan saat data tiba. Untuk data yang dibatasi, hasil akan dikeluarkan setelah semua input diproses. Untuk data yang tidak memiliki batas, hasil akan dikeluarkan saat tanda air melewati akhir jendela, yang menunjukkan bahwa sistem yakin semua data input untuk jendela tersebut telah diproses. Apache Beam menyediakan beberapa pemicu yang telah ditentukan sebelumnya dan memungkinkan Anda menggabungkannya.
Langkah berikutnya
- Untuk mempelajari lebih lanjut konsep dasar membangun pipeline menggunakan Apache Beam SDK, lihat Panduan Pemrograman Apache Beam dalam dokumentasi Apache Beam.
- Untuk mengetahui detail selengkapnya tentang kemampuan Apache Beam yang didukung oleh Dataflow, lihat matriks kemampuan Apache Beam.