部落格
2022/10/15
使用 Cloud Dataflow 的 Apache Hop 網頁版
Hop 是一個 Apache Beam 管線的無程式碼視覺化開發環境,可以在任何 Beam 執行器(例如 Dataflow、Flink 或 Spark)中執行作業。 在之前的文章中,我們介紹了 Apache Hop 的桌面版。 Hop 還有一個網頁環境,稱為 Hop Web,您可以從容器中執行,因此您無需在電腦上安裝任何東西即可使用它。
在這個詳細的教學中,您可以使用網頁瀏覽器透過網際網路存取 Hop,並指向 Google Cloud 上虛擬機器中執行的容器。該容器將在 Dataflow 中啟動作業並回報這些作業的結果。因為我們不希望任何人都能存取您的 Hop 實例,我們將會保護它,以便只有您可以存取該虛擬機器。下圖說明了設定
我們將展示如何完成先前描述的部署,建立一個僅使用網頁瀏覽器即可建置 Beam 管線的網頁和視覺化開發環境。完成後,您將擁有一個安全的網頁環境,您可以使用網頁瀏覽器建立管線,並使用 Google Cloud Dataflow 啟動它們。
執行此範例需要什麼?
我們使用的是 Google Cloud,所以您首先需要一個 Google Cloud 專案。如果需要,您可以在 https://cloud.google.com/free 註冊 Google Cloud 的免費試用版。
當您擁有專案後,您可以使用網頁瀏覽器中的 Cloud Shell,無需其他設定。在 Cloud Shell 中,Google Cloud SDK 會自動為您的專案和憑證設定。這是我們在這裡使用的選項。或者,您可以在本機電腦中設定 Google Cloud SDK。如需說明,請參閱 https://cloud.google.com/sdk/docs/install。
若要開啟 Cloud Shell,請前往 [Google Cloud 主控台] (http://console.cloud.google.com),請確保已選取您的專案,然後按一下 Cloud Shell 按鈕 。 Cloud Shell 會開啟,您可以使用它來執行這篇文章中顯示的命令。
我們將在接下來的步驟中使用的命令可在 Github 的 Gist 中取得,以防您偏好執行該腳本,而不是從本教學複製命令。
權限和帳戶
當我們執行 Dataflow 管線時,可以使用您的個人 Google Cloud 憑證來執行作業。但是,Hop 網頁將在虛擬機器中執行,而在 Google Cloud 中,虛擬機器使用服務帳戶作為憑證來執行。因此,我們需要確保我們有一個有權執行 Dataflow 作業的服務帳戶。
預設情況下,虛擬機器使用名為 *Compute Engine 預設服務帳戶* 的服務帳戶。為了簡單起見,我們將使用此帳戶。儘管如此,我們仍然需要新增一些權限,才能使用該服務帳戶執行 Dataflow 作業。
首先,請確保您已啟用所有必要的 Google Cloud API。 按一下此連結以啟用 Dataflow、BigQuery 和 Pub/Sub,我們將在本次工作流程中使用它們。該連結會將您帶到 Google Cloud 主控台中的專案,您可以在其中啟用 API。
現在讓我們將權限授予虛擬機器帳戶。首先,找到服務帳戶的 ID。開啟 Cloud Shell,並執行下列命令。
gcloud iam service-accounts list | grep compute
輸出類似如下,其中 <PROJECT_NUMBER>
會替換為您的專案編號
EMAIL: <PROJECT_NUMBER>-compute@developer.gserviceaccount.com
複製該服務帳戶 ID,因為我們會在下一步中使用它。執行下列命令,將 Dataflow 管理員角色授予服務帳戶。執行作業需要此角色
gcloud projects add-iam-policy-binding $GOOGLE_CLOUD_PROJECT --member="serviceAccount:<SERVICE_ACCOUNT_ID>" --role="roles/dataflow.admin"
其中 <SERVICE_ACCOUNT_ID>
是您先前擷取的 ID。如果您在 Cloud Shell 中執行這些命令,則環境變數 GOOGLE_CLOUD_PROJECT
已設定為您的專案 ID。如果您從其他任何地方執行此操作,請使用專案的 ID 設定 $GOOGLE_CLOUD_PROJECT
變數。
現在,您用於 Dataflow 的「使用者」是該服務帳戶。如果您的作業正在存取 BigQuery、Cloud Storage、Pub/Sub 等服務中的資料,您也需要將這些服務的角色授予服務帳戶。
磁碟和虛擬機器
讓我們在 Compute Engine 中建立虛擬機器 (VM),以執行 Apache Hop 的 Docker 容器。
在 Compute Engine 中,可以直接在虛擬機器中執行容器。還有其他在 Google Cloud 中執行容器的選項,但虛擬機器可能是最簡單和最直接的。完整詳細資訊請見 Google Cloud 文件中的 在虛擬機器和 MIG 上部署容器頁面。
在本教學中,我們將始終在 europe-west1-b
區域中工作,因此您會在許多命令中看到該區域。不過,您可以選擇任何 Google Cloud 區域;請記住使用您區域的值,而不是 europe-west1-b
。務必對所有資源(例如磁碟和虛擬機器)使用相同的區域。為了在使用 Hop 網頁時盡量減少延遲,請選擇地理位置接近您所在位置的區域。讓我們現在定義區域,並在剩下的命令中使用此變數
ZONE=europe-west1-b
容器具有臨時儲存:當您重新啟動容器時,容器的磁碟會還原為原始狀態。因此,如果我們重新啟動 Hop 網頁容器,我們將會遺失所有珍貴的管線。為了避免這種情況,我們將建立一個永久性磁碟,我們將在此處儲存所有使用 Hop 網頁的工作。執行下列命令以建立磁碟
gcloud compute disks create my-hop-disk \
--type=pd-balanced \
--size=10GB \
--zone=$ZONE
感謝這個磁碟,我們可以停止虛擬機器,並仍然保持所有個人檔案在 Hop 網頁中完好無損。
現在讓我們建立虛擬機器。對於虛擬機器,我們需要選取網路 (default
,在預設情況下),因此虛擬機器將不會有公用 IP 位址。這對於安全性原因非常重要,但是這不會阻止我們透過 Identity Aware Proxy 從我們的網頁瀏覽器使用虛擬機器。稍後將詳細說明;現在讓我們建立虛擬機器
gcloud compute instances create-with-container my-hop-vm \
--zone=$ZONE \
--network-interface=subnet=default,no-address \
--scopes=https://www.googleapis.com/auth/cloud-platform \
--tags=http-server,https-server,ssh \
--container-image=apache/hop-web:2.0.1 \
--container-restart-policy=on-failure \
--container-mount-disk=mode=rw,mount-path=/root,name=my-hop-disk,partition=0 \
--disk=boot=no,device-name=my-hop-disk,mode=rw,name=my-hop-disk
您可能想知道那些額外的選項是什麼。它們是虛擬機器要與 Hop 網頁正常運作所必需的。例如,scopes
選項允許虛擬機器使用 Dataflow,而 tags
選項讓您的瀏覽器可以透過網路防火牆連線到 Hop 網頁位址。
Apache Hop 會接聽連接埠 8080 的 HTTP 連線,因此如果您的專案中有其他自訂防火牆規則,請確保您沒有停止連接埠 8080 上的 TCP 流量。
但是等一下;我們建立了一台只有私人 IP 的機器。我們如何從電腦上的網頁瀏覽器連線到 Hop 網頁?我們不是需要公用 IP 位址嗎?
Google Cloud 有一個稱為 Identity Aware Proxy (IAP) 的功能,可以用來以授權層包裝服務,允許連線到只有內部 IP 的資源。
我們可以使用 IAP 來包裝我們的 Apache Hop 網頁伺服器。透過下列命令,我們建立一個接聽本機連接埠 8080 的通道,該通道會連線到虛擬機器上的連接埠 8080
gcloud compute start-iap-tunnel my-hop-vm 8080 --local-host-port=localhost:8080 --zone=$ZONE
為了保持通道開啟,請讓該命令保持執行狀態。如果該命令在建立虛擬機器後立即失敗,請稍候幾秒鐘然後重試;容器可能仍在開機中。
我們現在有一個可以使用網頁瀏覽器連線的通道。如果您是在本機電腦上而不是在 Cloud Shell 中執行這些命令,請將您的瀏覽器指向 localhost:8080
。 Hop UI 應該會載入。
如果您是在 Cloud Shell 中執行這些命令,我們該將瀏覽器指向哪裡? Cloud Shell 提供了一個適用於這種情況的工具。在 Cloud Shell 中,找到 Web 預覽按鈕
如果預覽未使用連接埠 8080,請按一下 變更連接埠,並切換到連接埠 8080。當您按一下 在連接埠上預覽 時,Cloud Shell 會在您的瀏覽器中開啟一個新索引標籤,該索引標籤會指向通道位址。
Identity Aware Proxy 將會要求您使用您的 Google 帳戶驗證您的身分。
之後,Apache Hop 網頁介面會載入
該 URL 會使用您的 Google 帳戶進行驗證,也就是您用於 Google Cloud 的同一個帳戶(您在 Google Cloud SDK 中驗證身分的帳戶)。因此,即使其他人取得該 URL 位址,他們也將無法存取您的 Apache Hop 實例。
您現在可以在網頁瀏覽器中使用 Apache Hop 了!
您可以嘗試複製 之前文章中使用 Hop 網頁提供的範例,或者只是嘗試從 Hop 隨附的範例中啟動任何其他專案
我應該將我的東西儲存在哪裡?
容器檔案系統中的目錄是臨時性的。您如何確保將您的管線和 JAR 儲存在永久位置?
容器的主目錄是 /root
,它是容器中唯一持久的目錄(這要歸功於我們之前建立的磁碟)。當您因任何原因重新啟動虛擬機時,該目錄中包含的任何檔案都會被保留。但其餘目錄會重置為原始狀態。因此,請確保將您的內容(例如您的管道、為 Dataflow 生成的 fat JAR 等)儲存在 /root
目錄或其子目錄中。
在 Hop 檔案對話框中,當您點擊主目錄圖示時,您會被導向 /root
目錄,因此使用它來儲存所有內容非常簡單。在圖片的範例中,我們點擊了主目錄按鈕,並將 JAR 儲存在該持久目錄中。
關閉虛擬機
如果您在不使用虛擬機時想節省一些費用,請停止虛擬機,並在需要時再次啟動它。當您停止虛擬機時,/root 目錄的內容會被儲存。
若要停止虛擬機,請執行以下命令(或在 Compute Engine VM 頁面的控制台中,點擊停止)
gcloud compute instances stop my-hop-vm --zone=$ZONE
若要再次啟動它,請執行以下命令
gcloud compute instances start my-hop-vm --zone=$ZONE
請記住,您需要執行 Identity Aware Proxy 才能存取 Hop Web,因此在啟動虛擬機後,別忘了執行命令來啟動 Identity Aware Proxy(如果啟動後立即失敗,請稍等幾秒鐘再執行一次)
gcloud compute start-iap-tunnel my-hop-vm 8080 --local-host-port=localhost:8080 --zone=$ZONE
摘要
這篇文章說明了您執行 Hop 所需的一切只是一個網頁瀏覽器。當然,還需要一個 Google Cloud 專案。
我們將容器部署到 Google Cloud 中的虛擬機,因此您可以從任何地方存取 Hop,並且我們建立了一個持久磁碟,因此您可以為您的管道提供永久儲存空間。現在,您可以使用網頁瀏覽器來建立您的管道並執行 Dataflow 作業,而無需在本機電腦上安裝任何東西:不需要 Java、Docker 或 Google Cloud SDK;什麼都不需要,只需要您最愛的網頁瀏覽器即可。
如果您按照這篇文章中的說明操作,請前往文章使用 Google Cloud Dataflow 執行 Apache Hop 可視化管道,直接從您的網頁瀏覽器執行 Dataflow 管道!