Dalam tutorial ini, Anda akan membuat pipeline yang menggunakan penampung kustom dengan library C++ untuk menjalankan alur kerja Dataflow HPC yang sangat paralel. Gunakan tutorial ini untuk mempelajari cara menggunakan Dataflow dan Apache Beam untuk menjalankan aplikasi komputasi grid yang memerlukan data untuk didistribusikan ke fungsi yang berjalan di banyak core.
Tutorial ini menunjukkan cara menjalankan pipeline terlebih dahulu dengan menggunakan Direct Runner, lalu menggunakan Dataflow Runner. Dengan menjalankan pipeline secara lokal, Anda dapat menguji pipeline sebelum men-deploynya.
Contoh ini menggunakan binding dan fungsi Cython dari library GMP. Terlepas dari library atau alat binding yang Anda gunakan, Anda dapat menerapkan prinsip yang sama ke pipeline.
Contoh kode ini tersedia di GitHub.
Tujuan
Membuat pipeline yang menggunakan penampung kustom dengan library C++.
Build image container Docker menggunakan Dockerfile.
Kemas kode dan dependensi ke dalam container Docker.
Jalankan pipeline secara lokal untuk mengujinya.
Jalankan pipeline di lingkungan terdistribusi.
Biaya
Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:
- Artifact Registry
- Cloud Build
- Cloud Storage
- Compute Engine
- Dataflow
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, lihat Pembersihan.
Sebelum memulai
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Buat atau pilih project Google Cloud.
-
Membuat project Google Cloud:
gcloud projects create PROJECT_ID
Ganti
PROJECT_ID
dengan nama untuk project Google Cloud yang Anda buat. -
Pilih project Google Cloud yang Anda buat:
gcloud config set project PROJECT_ID
Ganti
PROJECT_ID
dengan nama project Google Cloud Anda.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Aktifkan API Cloud Storage, Cloud Storage JSON, Compute Engine, Dataflow, Resource Manager, Artifact Registry, and Cloud Build:
gcloud services enable compute.googleapis.com
dataflow.googleapis.com storage_component storage_api cloudresourcemanager.googleapis.com artifactregistry.googleapis.com cloudbuild.googleapis.com -
Buat kredensial autentikasi lokal untuk Akun Google Anda:
gcloud auth application-default login
-
Grant roles to your user account. Run the following command once for each of the following IAM roles:
roles/iam.serviceAccountUser
gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
- Replace
PROJECT_ID
with your project ID. -
Replace
USER_IDENTIFIER
with the identifier for your user account. For example,user:myemail@example.com
. - Replace
ROLE
with each individual role.
- Replace
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Buat atau pilih project Google Cloud.
-
Membuat project Google Cloud:
gcloud projects create PROJECT_ID
Ganti
PROJECT_ID
dengan nama untuk project Google Cloud yang Anda buat. -
Pilih project Google Cloud yang Anda buat:
gcloud config set project PROJECT_ID
Ganti
PROJECT_ID
dengan nama project Google Cloud Anda.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Aktifkan API Cloud Storage, Cloud Storage JSON, Compute Engine, Dataflow, Resource Manager, Artifact Registry, and Cloud Build:
gcloud services enable compute.googleapis.com
dataflow.googleapis.com storage_component storage_api cloudresourcemanager.googleapis.com artifactregistry.googleapis.com cloudbuild.googleapis.com -
Buat kredensial autentikasi lokal untuk Akun Google Anda:
gcloud auth application-default login
-
Grant roles to your user account. Run the following command once for each of the following IAM roles:
roles/iam.serviceAccountUser
gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
- Replace
PROJECT_ID
with your project ID. -
Replace
USER_IDENTIFIER
with the identifier for your user account. For example,user:myemail@example.com
. - Replace
ROLE
with each individual role.
- Replace
Buat akun layanan pekerja yang dikelola pengguna untuk pipeline baru Anda dan berikan peran yang diperlukan ke akun layanan.
Untuk membuat akun layanan, jalankan
gcloud iam service-accounts create
perintah:gcloud iam service-accounts create parallelpipeline \ --description="Highly parallel pipeline worker service account" \ --display-name="Highly parallel data pipeline access"
Memberikan peran ke akun layanan. Jalankan perintah berikut satu kali untuk setiap peran IAM berikut:
roles/dataflow.admin
roles/dataflow.worker
roles/storage.objectAdmin
roles/artifactregistry.reader
gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:parallelpipeline@PROJECT_ID." --role=SERVICE_ACCOUNT_ROLE
Ganti
SERVICE_ACCOUNT_ROLE
dengan setiap peran individual.Memberi Akun Google Anda peran yang memungkinkan Anda membuat token akses untuk akun layanan:
gcloud iam service-accounts add-iam-policy-binding parallelpipeline@PROJECT_ID. --member="user:EMAIL_ADDRESS" --role=roles/iam.serviceAccountTokenCreator
Mendownload contoh kode dan mengubah direktori
Download contoh kode, lalu ubah direktori. Contoh kode di repositori GitHub menyediakan semua kode yang Anda perlukan untuk menjalankan pipeline ini. Jika sudah siap membuat pipeline Anda sendiri, Anda dapat menggunakan kode contoh ini sebagai template.
Clone repositori contoh beam-cpp.
Gunakan perintah
git clone
untuk meng-clone repositori GitHub:git clone https://github.com/GoogleCloudPlatform/dataflow-sample-applications.git
Beralih ke direktori aplikasi:
cd dataflow-sample-applications/beam-cpp-example
Kode pipeline
Anda dapat menyesuaikan kode pipeline dari tutorial ini. Pipeline ini menyelesaikan tugas berikut:
- Secara dinamis menghasilkan semua bilangan bulat dalam rentang input.
- Menjalankan bilangan bulat melalui fungsi C++ dan memfilter nilai yang buruk.
- Menulis nilai yang buruk ke saluran samping.
- Menghitung kemunculan setiap waktu berhenti dan menormalisasi hasilnya.
- Mencetak output, memformat, dan menulis hasilnya ke file teks.
- Membuat
PCollection
dengan satu elemen. - Memproses elemen tunggal dengan fungsi
map
dan meneruskan frekuensiPCollection
sebagai input samping. - Memproses
PCollection
dan menghasilkan satu output.
File awal terlihat seperti berikut:
Menyiapkan lingkungan pengembangan
Gunakan Apache Beam SDK untuk Python.
Instal library GMP:
apt-get install libgmp3-dev
Untuk menginstal dependensi, gunakan file
requirements.txt
.pip install -r requirements.txt
Untuk mem-build binding Python, jalankan perintah berikut.
python setup.py build_ext --inplace
Anda dapat menyesuaikan file requirements.txt
dari tutorial ini. File awal
mencakup dependensi berikut:
Menjalankan pipeline secara lokal
Menjalankan pipeline secara lokal berguna untuk pengujian. Dengan menjalankan pipeline secara lokal, Anda dapat mengonfirmasi bahwa pipeline berjalan dan berperilaku seperti yang diharapkan sebelum men-deploy pipeline ke lingkungan terdistribusi.
Anda dapat menjalankan pipeline secara lokal menggunakan perintah berikut.
Perintah ini menghasilkan gambar bernama out.png
.
python pipeline.py
Membuat resource Google Cloud
Bagian ini menjelaskan cara membuat resource berikut:
- Bucket Cloud Storage yang akan digunakan sebagai lokasi penyimpanan sementara dan lokasi output.
- Penampung Docker untuk memaketkan kode dan dependensi pipeline.
Membuat bucket Cloud Storage
Mulai dengan membuat bucket Cloud Storage menggunakan Google Cloud CLI. Bucket ini digunakan sebagai lokasi penyimpanan sementara oleh pipeline Dataflow.
Untuk membuat bucket, gunakan
perintah gcloud storage buckets create
:
gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION
Ganti kode berikut:
- BUCKET_NAME: nama untuk bucket Cloud Storage Anda yang memenuhi persyaratan penamaan bucket. Nama bucket Cloud Storage harus unik secara global.
- LOCATION: lokasi untuk bucket.
Membuat dan mem-build image container
Anda dapat menyesuaikan Dockerfile dari tutorial ini. File awal terlihat seperti berikut:
Dockerfile ini berisi perintah FROM
, COPY
, dan RUN
, yang dapat Anda baca di referensi Dockerfile.
Untuk mengupload artefak, buat repositori Artifact Registry. Setiap repositori dapat berisi artefak untuk satu format yang didukung.
Semua konten repositori dienkripsi menggunakan kunci milik dan dikelola Google atau kunci enkripsi yang dikelola pelanggan. Artifact Registry menggunakan kunci yang dimiliki dan dikelola Google secara default, dan tidak memerlukan konfigurasi untuk opsi ini.
Anda harus memiliki setidaknya akses Artifact Registry Writer ke repositori.
Jalankan perintah berikut untuk membuat repositori baru. Perintah ini menggunakan flag
--async
dan segera ditampilkan, tanpa menunggu operasi yang sedang berlangsung selesai.gcloud artifacts repositories create REPOSITORY \ --repository-format=docker \ --location=LOCATION \ --async
Ganti
REPOSITORY
dengan nama untuk repositori Anda. Untuk setiap lokasi repositori dalam project, nama repositori harus unik.Buat Dockerfile.
Agar paket menjadi bagian dari penampung Apache Beam, Anda harus menentukannya sebagai bagian dari file
requirements.txt
. Pastikan Anda tidak menentukanapache-beam
sebagai bagian dari filerequirements.txt
. Penampung Apache Beam sudah memilikiapache-beam
.Sebelum Anda dapat mengirim atau mengambil image, konfigurasikan Docker untuk mengautentikasi permintaan untuk Artifact Registry. Untuk menyiapkan autentikasi ke repositori Docker, jalankan perintah berikut:
gcloud auth configure-docker LOCATION-docker.pkg.dev
Perintah ini memperbarui konfigurasi Docker Anda. Sekarang Anda dapat terhubung dengan Artifact Registry di project Google Cloud untuk mengirim image.
Build image Docker menggunakan
Dockerfile
dengan Cloud Build.Perbarui jalur dalam perintah berikut agar cocok dengan Dockerfile yang Anda buat. Perintah ini akan mem-build file dan mengirimkannya ke repositori Artifact Registry Anda.
gcloud builds submit --tag LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/dataflow/cpp_beam_container:latest .
Mengemas kode dan dependensi dalam container Docker
Untuk menjalankan pipeline ini di lingkungan terdistribusi, paketkan kode dan dependensi ke dalam penampung docker.
docker build . -t cpp_beam_container
Setelah memaketkan kode dan dependensi, Anda dapat menjalankan pipeline secara lokal untuk mengujinya.
python pipeline.py \ --runner=PortableRunner \ --job_endpoint=embed \ --environment_type=DOCKER \ --environment_config="docker.io/library/cpp_beam_container"
Perintah ini menulis output di dalam image Docker. Untuk melihat output, jalankan pipeline dengan
--output
, dan tulis output ke bucket Cloud Storage. Misalnya, jalankan perintah berikut.python pipeline.py \ --runner=PortableRunner \ --job_endpoint=embed \ --environment_type=DOCKER \ --environment_config="docker.io/library/cpp_beam_container" \ --output=gs://BUCKET_NAME/out.png
Menjalankan pipeline
Sekarang Anda dapat menjalankan pipeline Apache Beam di Dataflow dengan merujuk ke file dengan kode pipeline dan meneruskan parameter yang diperlukan oleh pipeline.
Di shell atau terminal, jalankan pipeline dengan Dataflow Runner.
python pipeline.py \
--runner=DataflowRunner \
--project=PROJECT_ID \
--region=REGION \
--temp_location=gs://BUCKET_NAME/tmp \
--sdk_container_image="LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/dataflow/cpp_beam_container:latest" \
--experiment=use_runner_v2 \
--output=gs://BUCKET_NAME/out.png
Setelah Anda mengeksekusi perintah untuk menjalankan pipeline, Dataflow akan menampilkan ID Tugas dengan status tugas Diantrekan. Mungkin perlu waktu beberapa menit sebelum status tugas mencapai Running dan Anda dapat mengakses grafik tugas.
Melihat hasil
Melihat data yang ditulis ke bucket Cloud Storage Anda. Gunakan
perintah gcloud storage ls
untuk menampilkan daftar konten di level teratas bucket Anda:
gcloud storage ls gs://BUCKET_NAME
Jika berhasil, perintah menampilkan pesan yang mirip dengan:
gs://BUCKET_NAME/out.png
Pembersihan
Agar tidak perlu membayar biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.
Menghapus project
Cara termudah untuk menghilangkan penagihan adalah dengan menghapus project Google Cloud yang Anda buat untuk tutorial.
- Di konsol Google Cloud, buka halaman Manage resource.
- Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
- Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.
Menghapus resource satu per satu
Jika Anda ingin menggunakan kembali project, hapus resource yang Anda buat untuk tutorial.
Menghapus resource project Google Cloud
Hapus repositori Artifact Registry.
gcloud artifacts repositories delete REPOSITORY \ --location=LOCATION --async
Hapus bucket Cloud Storage. Bucket ini saja tidak dikenai biaya apa pun.
gcloud storage rm gs://BUCKET_NAME --recursive
Mencabut kredensial
Cabut peran yang Anda berikan ke akun layanan pekerja yang dikelola pengguna. Jalankan perintah berikut satu kali untuk setiap peran IAM berikut:
roles/dataflow.admin
roles/dataflow.worker
roles/storage.objectAdmin
roles/artifactregistry.reader
gcloud projects remove-iam-policy-binding PROJECT_ID \ --member=serviceAccount:parallelpipeline@PROJECT_ID. \ --role=SERVICE_ACCOUNT_ROLE
-
Opsional: Cabut kredensial autentikasi yang Anda buat, dan hapus file kredensial lokal.
gcloud auth application-default revoke
-
Opsional: Cabut kredensial dari gcloud CLI.
gcloud auth revoke
Langkah selanjutnya
- Lihat aplikasi contoh di GitHub.
- Menggunakan penampung kustom di Dataflow.
- Pelajari lebih lanjut cara menggunakan lingkungan penampung dengan Apache Beam.
- Pelajari arsitektur referensi, diagram, dan praktik terbaik tentang Google Cloud. Lihat Cloud Architecture Center kami.