Storage 移轉服務支援從雲端和地端部署的 Hadoop 分散式檔案系統 (HDFS) 來源轉移資料。
從 HDFS 轉移資料時,必須使用 Cloud Storage 做為目的地。
這項服務的用途包括:從地端部署儲存空間遷移至 Cloud Storage、封存資料以釋出地端部署儲存空間、將資料複製到 Google Cloud 以確保業務持續運作,或是將資料傳輸至 Google Cloud 以進行分析和處理。
設定權限
建立轉移作業前,您必須為下列實體設定權限:
| 用於建立轉移作業的使用者帳戶。這是登入 Google Cloud 控制台的帳戶,或是向 `gcloud` CLI 進行驗證時指定的帳戶。使用者帳戶可以是一般使用者帳戶,也可以是使用者自行管理的服務帳戶。 | |
Storage 移轉服務使用的服務代理。這個帳戶通常會以電子郵件地址識別,格式為 project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com。
|
|
![]() |
轉移代理商帳戶:為轉移代理商提供 Google Cloud 權限。移轉代理程式帳戶會使用安裝代理程式的使用者憑證,或使用者代管服務帳戶的憑證進行驗證。 |
如需操作說明,請參閱「以代理程式為準的轉移權限」。
將代理程式安裝到代理程式集區
代理式移轉作業會使用軟體代理程式來自動調度管理移轉作業。這些代理程式必須安裝在一或多部可存取檔案系統的機器上。代理程式必須有權存取 namenode、所有 datanode、Hadoop 金鑰管理伺服器 (KMS) 和 Kerberos 金鑰發布中心 (KDC)。
轉移代理程式會在代理程式集區中協同運作。增加代理程式數量可以提升整體工作效能,但這取決於多項因素。
新增更多代理程式有助於解決問題,最多可新增至 HDFS 叢集中節點數的一半。舉例來說,如果叢集有 30 個節點,將代理程式從 5 個增加到 15 個應可提升效能,但超過 15 個可能就沒有太大差異。
如果是小型 HDFS 叢集,一個代理程式就已足夠。
如果轉移作業包含大量小型檔案,額外代理程式對效能的影響通常會更大。Storage 移轉服務會在多個代理程式之間平行處理移轉作業,以達到高輸送量。工作負載中的檔案越多,新增更多代理程式的好處就越多。
建立代理程式集區
建立代理程式集區。請使用使用者帳戶執行這項操作。
安裝代理程式
將代理程式安裝到代理程式集區。請使用轉移代理商帳戶執行這項操作。
Google Cloud 控制台
gcloud CLI
如要使用 gcloud CLI 安裝一或多個代理程式,請執行 gcloud transfer agents install:
gcloud transfer agents install --pool=POOL_NAME \
--count=NUM_AGENTS \
--mount-directories=MOUNT_DIRECTORIES \
--hdfs-namenode-uri=HDFS_NAMENODE_URI \
--hdfs-username=HDFS_USERNAME \
--hdfs-data-transfer-protection=HDFS_DATA_TRANSFER_PROTECTION \
--kerberos-config-file=KERBEROS_CONFIG_FILE \
--kerberos-keytab-file=KERBEROS_KEYTAB_FILE \
--kerberos-user-principal=KERBEROS_USER_PRINCIPAL \
--kerberos-service-principal=KERBEROS_SERVICE_PRINCIPAL \
更改下列內容:
--hdfs-namenode-uri指定 HDFS 叢集,包括 URI 格式的結構定義、namenode 和通訊埠。例如:rpc://my-namenode:8020http://my-namenode:9870
WebHDFS 使用 HTTP 或 HTTPS。如未提供結構定義,我們會假設為 RPC。如未提供通訊埠,系統會預設 RPC 為
8020、HTTP 為9870,HTTPS 為9871。舉例來說,輸入my-namenode會變成rpc://my-namenode:8020。如果叢集設定了多個 namenode,請指定目前的主要節點。詳情請參閱具有多個 NameNode 的叢集。
--hdfs-username是用來透過簡單驗證連線至 HDFS 叢集的使用者名稱。如果使用 Kerberos 驗證,或連線時不進行任何驗證,請省略這個標記。--hdfs-data-transfer-protection(選用) 是 Kerberos 叢集的用戶端保護品質 (QOP) 設定。這個值不得比伺服器端 QOP 值更嚴格。有效值為:authentication、integrity和privacy。
如果使用 Kerberos 驗證,請一併加入下列旗標:
--kerberos-config-file是 Kerberos 設定檔的路徑。例如:--kerberos-config-file=/etc/krb5.conf。--kerberos-user-principal是要使用的 Kerberos 使用者主體。例如:--kerberos-user-principal=user1。--kerberos-keytab-file是 Keytab 檔案的路徑,內含以--kerberos-user-principal標記指定的使用者主體。例如:--kerberos-keytab-file=/home/me/kerberos/user1.keytab。--kerberos-service-principal是要使用的 Kerberos 服務主體, 格式為<primary>/<instance>。領域是從 Kerberos 設定檔對應而來,系統會忽略任何提供的領域。如未指定此旗標,預設值為hdfs/<namenode_fqdn>,其中<namenode_fqdn>是設定檔中指定的完整網域名稱。例如:
--kerberos-service-principal=hdfs/my-namenode.a.example.com。
這項工具會逐步引導您完成安裝代理程式的必要步驟。這項指令會在電腦上安裝 NUM_AGENTS 代理程式,對應至指定為 POOL_NAME 的集區名稱,並使用 gcloud 憑證驗證代理程式。集區名稱必須存在,否則系統會傳回錯誤。
--mount-directories 標記為選用項目,但強烈建議使用。這個屬性的值是檔案系統上要授予代理存取權的目錄清單,並以半形逗號分隔。
如果省略這個標記,系統會將整個檔案系統掛接至代理程式容器。詳情請參閱 gcloud 參考資料。
docker run
使用 docker run 安裝代理程式之前,請先按照操作說明安裝 Docker。
docker run 指令會安裝一個代理程式。如要增加集區中的代理程式數量,請視需要多次重新執行這項指令。
必要指令旗標取決於您使用的驗證類型。
Kerberos
如要使用 Kerberos 驗證檔案系統,請使用下列指令:
sudo docker run -d --ulimit memlock=64000000 --rm \
--network=host \
-v /:/transfer_root \
gcr.io/cloud-ingest/tsop-agent:latest \
--enable-mount-directory \
--project-id=${PROJECT_ID} \
--hostname=$(hostname) \
--creds-file="service_account.json" \
--agent-pool=${AGENT_POOL_NAME} \
--hdfs-namenode-uri=cluster-namenode \
--kerberos-config-file=/etc/krb5.conf \
--kerberos-user-principal=user \
--kerberos-keytab-file=/path/to/folder.keytab
更改下列內容:
- 如果要在這部電腦上執行多個代理程式,請省略
--network=host。 --hdfs-namenode-uri:以 URI 格式表示的結構定義、namenode 和通訊埠,代表 HDFS 叢集。例如:rpc://my-namenode:8020http://my-namenode:9870
WebHDFS 使用 HTTP 或 HTTPS。如未提供結構定義,我們會假設為 RPC。如未提供通訊埠,系統會預設 RPC 為 8020、HTTP 為 9870,HTTPS 為 9871。舉例來說,輸入 my-namenode 會變成 rpc://my-namenode:8020。
如果叢集設定了多個 namenode,請指定目前的主要節點。詳情請參閱具有多個 NameNode 的叢集。
--kerberos-config-file:Kerberos 設定檔的路徑。預設值為/etc/krb5.conf。--kerberos-user-principal:Kerberos 使用者主體。--kerberos-keytab-file:Keytab 檔案的路徑,內含以--kerberos-user-principal指定的使用者主體。--kerberos-service-principal:要使用的 Kerberos 服務主體,格式為「service/instance」。領域會從 Kerberos 設定檔對應,系統會忽略任何提供的領域。如未指定此標記,預設值為hdfs/<namenode_fqdn>,其中fqdn是完整網域名稱。
簡易驗證
如要使用簡單驗證機制向檔案系統進行驗證,請按照下列步驟操作:
sudo docker run -d --ulimit memlock=64000000 --rm \
--network=host \
-v /:/transfer_root \
gcr.io/cloud-ingest/tsop-agent:latest \
--enable-mount-directory \
--project-id=${PROJECT_ID} \
--hostname=$(hostname) \
--creds-file="${CREDS_FILE}" \
--agent-pool="${AGENT_POOL_NAME}" \
--hdfs-namenode-uri=cluster-namenode \
--hdfs-username="${USERNAME}"
更改下列內容:
--hdfs-username:使用簡易驗證連線至 HDFS 叢集時要使用的使用者名稱。--hdfs-namenode-uri:以 URI 格式表示的結構定義、namenode 和通訊埠,代表 HDFS 叢集。例如:rpc://my-namenode:8020http://my-namenode:9870
WebHDFS 使用 HTTP 或 HTTPS。如未提供結構定義,我們會假設為 RPC。
如未提供通訊埠,RPC 預設為 8020,HTTP 預設為 9870,HTTPS 預設為 9871。舉例來說,輸入 my-namenode 會變成 rpc://my-namenode:8020。
如果叢集設定了多個 namenode,請指定目前的主要節點。詳情請參閱具有多個 NameNode 的叢集。
不驗證
如要在不進行任何驗證的情況下連線至檔案系統,請按照下列步驟操作:
sudo docker run -d --ulimit memlock=64000000 --rm \
--network=host \
-v /:/transfer_root \
gcr.io/cloud-ingest/tsop-agent:latest \
--enable-mount-directory \
--project-id=${PROJECT_ID} \
--hostname=$(hostname) \
--creds-file="${CREDS_FILE}" \
--agent-pool="${AGENT_POOL_NAME}" \
--hdfs-namenode-uri=cluster-namenode \
更改下列內容:
--hdfs-namenode-uri:以 URI 格式表示的結構定義、namenode 和通訊埠,代表 HDFS 叢集。例如:rpc://my-namenode:8020http://my-namenode:9870
WebHDFS 使用 HTTP 或 HTTPS。如未提供結構定義,我們會假設為 RPC。
如未提供通訊埠,RPC 預設為 8020,HTTP 預設為 9870,HTTPS 預設為 9871。舉例來說,輸入 my-namenode 會變成 rpc://my-namenode:8020。
如果叢集設定了多個 namenode,請指定目前的主要節點。詳情請參閱具有多個 NameNode 的叢集。
轉移作業選項
從 HDFS 移轉至 Cloud Storage 時,可以使用下列 Storage 移轉服務功能。
從 HDFS 移轉的檔案不會保留中繼資料。
建立移轉作業
請勿在傳輸作業名稱中加入機密資訊,例如個人識別資訊 (PII) 或安全性資料。資源名稱可能會傳播至其他 Google Cloud 資源的名稱,並向專案外部的 Google 內部系統公開。
Storage 移轉服務提供多種介面,可供您建立移轉作業。
Google Cloud 控制台
前往 Google Cloud 控制台的「Storage 移轉服務」頁面。
按一下「建立移轉工作」。系統隨即會顯示「建立移轉工作」頁面。
選取「Hadoop 分散式檔案系統」做為「來源類型」。目的地必須是 Google Cloud Storage。
點選「下一步」。
設定來源
指定這項轉移作業的必要資訊:
輸入要轉移的路徑 (相對於根目錄)。
視需要指定要套用至來源資料的篩選器。
點選「下一步」。
設定接收器
在「Bucket or folder」(值區或資料夾) 欄位中,輸入目的地值區和 (選用) 資料夾名稱,或按一下「Browse」(瀏覽),從目前專案的現有值區清單中選取值區。如要建立新的 bucket,請按一下「建立新的 bucket」
。點選「下一步」。
排定轉移時間
您可以安排轉移作業只執行一次,也可以設定週期性轉移作業。
點選「下一步」。
選擇轉移設定
在「Description」(說明) 欄位中,輸入轉移作業的說明。最佳做法是輸入有意義且獨特的說明,方便您區分工作。
在「中繼資料選項」下方,選取 Cloud Storage 儲存空間級別,以及是否要儲存每個物件的建立時間。詳情請參閱「保留中繼資料」。
在「覆寫時機」下方,選取下列其中一個選項:
永不:不要覆寫目的地檔案。如果已有同名檔案,系統就不會轉移。
如果不同:如果來源檔案與目的地檔案名稱相同,但 ETag 或總和檢查碼值不同,則覆寫目的地檔案。
一律覆寫:來源檔案與目的地檔案的名稱相同時,一律覆寫目的地檔案 (即便檔案內容完全相同)。
在「何時刪除」下方,選取下列其中一個選項:
永不:永不刪除來源或目的地的檔案。
如果檔案未同時存在於來源,則將檔案從目的地中刪除:如果目的地 Cloud Storage bucket 中的檔案未同時存在於來源,則將檔案從 Cloud Storage bucket 中刪除。
這個選項可確保目的地 Cloud Storage bucket 與來源完全相符。
選取是否啟用移轉記錄和/或 Pub/Sub 通知。
按一下「建立」,即可建立轉移工作。
gcloud CLI
如要建立新的移轉工作,請使用 gcloud transfer jobs create 指令。建立新工作會啟動指定的轉移作業,除非指定排程或 --do-not-run。
gcloud transfer jobs create \
hdfs:///PATH/ gs://BUCKET_NAME/PATH/
--source-agent-pool=AGENT_POOL_NAME
更改下列內容:
PATH是 HDFS 叢集根目錄的絕對路徑。叢集節點名稱和連接埠是在代理程式層級設定,因此工作建立指令只需要指定 (選用) 路徑和代理程式集區。--source-agent-pool會指定要用於這項轉移作業的來源代理集區。
其他選項包括:
--do-not-run可防止 Storage 移轉服務在提交指令後執行工作。如要執行工作,請更新工作來新增排程,或使用jobs run手動啟動工作。--manifest-file指定 Cloud Storage 中 CSV 檔案的路徑,其中包含要從來源轉移的檔案清單。如需資訊清單檔案格式,請參閱「使用資訊清單轉移特定檔案或物件」。工作資訊:您可以指定
--name和--description。時間表:指定
--schedule-starts、--schedule-repeats-every和--schedule-repeats-until,或--do-not-run。物件條件:使用條件判斷要轉移哪些物件。包括
--include-prefixes和--exclude-prefixes,以及--include-modified-[before | after]-[absolute | relative]中的時間條件。如果您指定來源資料夾,前置字串篩選器會與該資料夾相關。詳情請參閱「依前置字串篩選來源物件」一文。轉移選項:指定是否要覆寫目的地檔案 (
--overwrite-when=different或always),以及是否要在轉移期間或之後刪除特定檔案 (--delete-from=destination-if-unique或source-after-transfer);並視需要為轉移的物件設定儲存空間級別 (--custom-storage-class)。通知:使用
--notification-pubsub-topic、--notification-event-types和--notification-payload-format設定轉移作業的 Pub/Sub 通知。
如要查看所有選項,請執行 gcloud transfer jobs create --help 或參閱gcloud參考文件。
REST API
如要使用 REST API 從 HDFS 來源建立轉移作業,請建立類似下列範例的 JSON 物件。
POST https://storagetransfer.googleapis.com/v1/transferJobs
{
...
"transferSpec": {
"source_agent_pool_name":"POOL_NAME",
"hdfsDataSource": {
"path": "/mount"
},
"gcsDataSink": {
"bucketName": "SINK_NAME"
},
"transferOptions": {
"deleteObjectsFromSourceAfterTransfer": false
}
}
}
如要進一步瞭解其他支援的欄位,請參閱 transferJobs.create 參考資料。
具有多個 namenode 的叢集
Storage 移轉服務代理程式只能設定單一名稱節點。如果 HDFS 叢集設定了多個 namenode (「高可用性」),且發生容錯移轉事件導致新的主要 namenode,您必須使用正確的 namenode 重新安裝代理程式。
如要刪除舊代理程式,請參閱「刪除代理程式」。
執行下列指令,即可擷取叢集的有效名稱節點:
hdfs haadmin -getAllServiceState