f 用 go 來跑GCP Dataflow ~ 迪貝之家

用 go 來跑GCP Dataflow

 

Apache beam org網站上的案例參考
wordcount-example
go sdk 畢竟是後來才加入的
所以unbounded data的sample還沒出來
不過好像有程式碼了
只是還在修正中吧!!
而且go sdk目前好像也只支援GCP dataflow

依照beam model的設計理念
應該還會再繼續擴充吧~~
其實這也是我想學beam的原因啦!!

底下跑的環境是在我筆電上的virtualbox
GCP 的CE當然可以跑
因為它已經幫你裝好Cloud SDK
可以bypass

1.安裝Google Cloud SDK
參考文件:How to Install Google Cloud SDK on Ubuntu
步驟如下: 安裝當然是用root權限
a.apt-get update
b.apt-get install curl apt-transport-https ca-certificates gnupg
c.echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list
d.curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key --keyring /usr/share/keyrings/cloud.google.gpg add -
e.apt-get update
f.apt-get install google-cloud-sdk
我覺得應該不用做Initialize的動作
因為作業系統環境變數會去參照service account的token file
export GOOGLE_CLOUD_PROJECT=mytest691129
export GOOGLE_APPLICATION_CREDENTIALS=~/bqaccess.json
export GOPATH=~/go
export PATH=/usr/local/go/bin:$GOPATH/bin:$PATH

2.安裝Golang,就我的認知
跑go 的程式應該是不用安裝go tool啦!!
文章結束前,我講我的猜測

a.curl -O https://dl.google.com/go/go1.17.6.linux-amd64.tar.gz
b.tar xvf go1.17.6.linux-amd64.tar.gz -C /usr/local
c.我不會用root來編譯及執行我的go程式
chown -R steven:steven /usr/local/go

3.切換身分為steven
建置我的working directory
a.mkdir -p ~/go/{bin,src,pkg}
b.cd go/src
c.mkdir wordcount
d.cd wordcount
e.把wordcount 的程式碼,存成main.go
e.go mod init wordcount
f.go mod tidy
g.go install
h.來執行吧~~
wordcount --input gs://dataflow-samples/shakespeare/kinglear.txt \
--output gs://mydf1129/steven2/counts \
--runner dataflow \
--project mytest691129 \
--region asia-east1 \
--temp_location gs://mydf1129/steven2/tmp/ \
--staging_location gs://mydf1129/steven2/binaries/ \
--worker_harness_container_image=apache/beam_go_sdk:latest

wordcount本身就是binary了,
為什麼還要安裝golang??
因為一跑wordcount程式
就會跟你要go
所以我也只能嘗試安裝看看


從執行命令的最後一個開關看起來
應該是以beam sdk為container base
所以應該是要go 編譯wordcount程式碼後
疊加在base上,產出新的image
然後送上cloud storage

在我看了
--staging_location gs://mydf1129/steven2/binaries/
裏頭的東西之後,我覺得它就是container image


然後GCP就跑起了container來執行wordcount的邏輯

而且還得在我的source 目錄下執行
才能跑得起來

最後我還是提醒一下
token file要保存好
因為我發覺sevice account的權限得給到project owner
參照Quickstart using Python得來的權限結論
這樣dataflow 跑起來才不會發生各種服務的權限問題
我記得在上老外的Partner Datawarhouse的GCP給的課程時
好像也有提到權限問題