Dokumen ini menjelaskan cara menjalankan pipeline Dataflow menggunakan penampung kustom.
Untuk informasi tentang cara membuat image container, lihat Mem-build image container kustom untuk Dataflow.
Saat Anda menjalankan pipeline, luncurkan pipeline menggunakan Apache Beam SDK dengan versi dan versi bahasa yang sama dengan SDK pada image penampung kustom Anda. Langkah ini menghindari error yang tidak terduga dari dependensi atau SDK yang tidak kompatibel.
Menguji secara lokal
Sebelum menjalankan pipeline di Dataflow, sebaiknya uji image container secara lokal, yang memungkinkan pengujian dan proses debug yang lebih cepat.
Untuk mempelajari lebih lanjut penggunaan khusus Apache Beam, lihat panduan Apache Beam untuk Menjalankan pipeline dengan image container kustom.
Pengujian dasar dengan PortableRunner
Untuk memverifikasi bahwa image container jarak jauh dapat diambil dan dapat menjalankan pipeline sederhana, gunakan PortableRunner
Apache Beam. Saat Anda menggunakan
PortableRunner
, pengiriman tugas terjadi di lingkungan lokal, dan
eksekusi DoFn
terjadi di lingkungan Docker.
Saat Anda menggunakan GPU, penampung Docker mungkin tidak memiliki akses ke GPU. Untuk menguji penampung dengan GPU, gunakan runner langsung dan ikuti langkah-langkah untuk menguji image penampung di VM mandiri dengan GPU di bagian Debug dengan VM mandiri di halaman "Gunakan GPU".
Berikut adalah contoh pipeline yang dijalankan:
Java
mvn compile exec:java -Dexec.mainClass=com.example.package.MyClassWithMain \
-Dexec.args="--runner=PortableRunner \
--jobEndpoint=REGION \
--defaultEnvironmentType=DOCKER \
--defaultEnvironmentConfig=IMAGE_URI \
--inputFile=INPUT_FILE \
--output=OUTPUT_FILE"
Python
python path/to/my/pipeline.py \
--runner=PortableRunner \
--job_endpoint=REGION \
--environment_type=DOCKER \
--environment_config=IMAGE_URI \
--input=INPUT_FILE \
--output=OUTPUT_FILE
Go
go path/to/my/pipeline.go \
--runner=PortableRunner \
--job_endpoint=REGION \
--environment_type=DOCKER \
--environment_config=IMAGE_URI \
--input=INPUT_FILE \
--output=OUTPUT_FILE
Ganti kode berikut:
REGION
: region layanan tugas yang akan digunakan, dalam bentuk alamat dan port. Contoh:localhost:3000
. Gunakanembed
untuk menjalankan layanan tugas dalam proses.IMAGE_URI
: URI image container kustom.INPUT_FILE
: file input yang dapat dibaca sebagai file teks. File ini harus dapat diakses oleh image penampung
harness SDK, baik yang dimuat sebelumnya di image penampung maupun file jarak jauh.OUTPUT_FILE
: jalur untuk menulis output. Jalur ini adalah jalur jarak jauh atau jalur lokal di penampung.
Setelah pipeline berhasil selesai, tinjau log konsol untuk memverifikasi bahwa
pipeline berhasil selesai dan image jarak jauh, yang ditentukan oleh
IMAGE_URI
, digunakan.
Setelah menjalankan pipeline, file yang disimpan ke penampung tidak ada di sistem file lokal Anda, dan penampung dihentikan. Anda dapat menyalin file dari
sistem file penampung yang dihentikan menggunakan
docker cp
.
Sebagai alternatif:
- Memberikan output ke sistem file jarak jauh seperti Cloud Storage. Anda mungkin perlu mengonfigurasi akses secara manual untuk tujuan pengujian, termasuk untuk file kredensial atau Kredensial Default Aplikasi.
- Untuk proses debug cepat, tambahkan logging sementara.
Menggunakan Direct Runner
Untuk pengujian lokal yang lebih mendalam terhadap image container dan pipeline Anda, gunakan Direct Runner Apache Beam.
Anda dapat memverifikasi pipeline secara terpisah dari penampung dengan menguji di lingkungan lokal yang cocok dengan image penampung, atau dengan meluncurkan pipeline di penampung yang sedang berjalan.
Java
docker run -it --entrypoint "/bin/bash" IMAGE_URI
...
# On docker container:
root@4f041a451ef3:/# mvn compile exec:java -Dexec.mainClass=com.example.package.MyClassWithMain ...
Python
docker run -it --entrypoint "/bin/bash" IMAGE_URI
...
# On docker container:
root@4f041a451ef3:/# python path/to/my/pipeline.py ...
Go
docker run -it --entrypoint "/bin/bash" IMAGE_URI
...
# On docker container:
root@4f041a451ef3:/# go path/to/my/pipeline.go ...
Ganti IMAGE_URI
dengan URI image container kustom.
Contoh ini mengasumsikan bahwa file pipeline apa pun, termasuk pipeline itu sendiri, berada di penampung kustom, telah dipasang dari sistem file lokal, atau bersifat jarak jauh dan dapat diakses oleh Apache Beam dan penampung. Misalnya, untuk menggunakan
Maven (mvn
) guna menjalankan contoh Java sebelumnya, Maven dan dependensinya
harus di-staging di penampung. Untuk informasi selengkapnya, lihat
Penyimpanan dan
docker run
dalam dokumentasi Docker.
Tujuan pengujian di Direct Runner adalah untuk menguji pipeline Anda
di lingkungan penampung kustom, bukan untuk menguji menjalankan penampung Anda
dengan ENTRYPOINT
default-nya. Ubah ENTRYPOINT
(misalnya,
docker run --entrypoint ...
) untuk langsung menjalankan pipeline atau mengizinkan
perintah dijalankan secara manual di penampung.
Jika Anda mengandalkan konfigurasi tertentu yang didasarkan pada menjalankan penampung di Compute Engine, Anda dapat menjalankan penampung langsung di VM Compute Engine. Untuk informasi selengkapnya, lihat Penampung di Compute Engine.
Meluncurkan tugas Dataflow
Saat meluncurkan pipeline Apache Beam di Dataflow, tentukan
jalur ke image container. Jangan gunakan tag :latest
dengan gambar
kustom Anda. Beri tag pada build Anda dengan tanggal atau ID unik. Jika terjadi masalah, penggunaan jenis tag ini mungkin memungkinkan untuk mengembalikan eksekusi pipeline ke konfigurasi kerja yang diketahui sebelumnya dan memungkinkan pemeriksaan perubahan.
Java
Gunakan --sdkContainerImage
untuk menentukan image penampung SDK untuk runtime Java Anda.
Gunakan --experiments=use_runner_v2
untuk mengaktifkan Runner v2.
Python
Jika menggunakan SDK versi 2.30.0 atau yang lebih baru, gunakan opsi pipeline --sdk_container_image
untuk menentukan image penampung SDK.
Untuk SDK versi sebelumnya, gunakan opsi pipeline --worker_harness_container_image
untuk menentukan lokasi image container yang akan digunakan untuk harness pekerja.
Penampung kustom hanya didukung untuk Dataflow Runner v2. Jika
Anda meluncurkan pipeline Python batch, tetapkan flag --experiments=use_runner_v2
.
Jika Anda meluncurkan pipeline Python streaming, menentukan eksperimen tidak
diperlukan, karena pipeline Python streaming menggunakan Runner v2 secara default.
Go
Jika menggunakan SDK versi 2.40.0 atau yang lebih baru, gunakan opsi pipeline --sdk_container_image
untuk menentukan image penampung SDK.
Untuk SDK versi sebelumnya, gunakan opsi pipeline --worker_harness_container_image
untuk menentukan lokasi image container yang akan digunakan untuk harness pekerja.
Penampung kustom didukung di semua versi Go SDK karena menggunakan Dataflow Runner v2 secara default.
Contoh berikut menunjukkan cara meluncurkan batch
contoh WordCount
dengan penampung kustom.
Java
mvn compile exec:java -Dexec.mainClass=org.apache.beam.examples.WordCount \
-Dexec.args="--runner=DataflowRunner \
--inputFile=INPUT_FILE \
--output=OUTPUT_FILE \
--project=PROJECT_ID \
--region=REGION \
--gcpTempLocation=TEMP_LOCATION \
--diskSizeGb=DISK_SIZE_GB \
--experiments=use_runner_v2 \
--sdkContainerImage=IMAGE_URI"
Python
Menggunakan Apache Beam SDK untuk Python versi 2.30.0 atau yang lebih baru:
python -m apache_beam.examples.wordcount \
--input=INPUT_FILE \
--output=OUTPUT_FILE \
--project=PROJECT_ID \
--region=REGION \
--temp_location=TEMP_LOCATION \
--runner=DataflowRunner \
--disk_size_gb=DISK_SIZE_GB \
--experiments=use_runner_v2 \
--sdk_container_image=IMAGE_URI
Go
wordcount --input gs://dataflow-samples/shakespeare/kinglear.txt \
--output gs://<your-gcs-bucket>/counts \
--runner dataflow \
--project your-gcp-project \
--region your-gcp-region \
--temp_location gs://<your-gcs-bucket>/tmp/ \
--staging_location gs://<your-gcs-bucket>/binaries/ \
--sdk_container_image=IMAGE_URI
Ganti kode berikut:
INPUT_FILE
: jalur input Cloud Storage yang dibaca oleh Dataflow saat menjalankan contoh.OUTPUT_FILE
: jalur output Cloud Storage yang ditulis oleh contoh pipeline. File ini berisi jumlah kata.PROJECT_ID
: ID project Google Cloud Anda.REGION
: region tempat men-deploy tugas Dataflow Anda.TEMP_LOCATION
: jalur Cloud Storage untuk Dataflow guna membuat file tugas sementara yang dibuat selama eksekusi pipeline.DISK_SIZE_GB
: Opsional. Jika penampung Anda besar, pertimbangkan untuk meningkatkan ukuran disk booting default agar tidak kehabisan ruang disk.IMAGE_URI
: URI image container kustom SDK. Selalu gunakan tag atau SHA penampung yang diberi versi. Jangan gunakan tag:latest
atau tag yang dapat diubah.