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??
|
||||||||
從執行命令的最後一個開關看起來 |
||||||||
應該是以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給的課程時 好像也有提到權限問題 |