Cloud Storage 是在Trusted Cloud by S3NS上儲存和使用大數據的重要部分。舉例來說,您可以使用 Cloud Storage 將資料載入至 BigQuery。
本頁說明如何使用 gcloud 指令列工具執行大數據工作,例如複製大型檔案或平行複製多個檔案。如要瞭解 gcloud,請參閱 gcloud 快速入門導覽課程。
事前準備
如要充分利用本頁所顯示的範例,您需要完成下列步驟 (如果尚未完成):
將許多檔案複製到值區
cp
指令會視需要自動執行平行 (多執行緒/多重處理) 複製,有效率地上傳大量檔案。如要以遞迴方式複製子目錄,請在指令中使用 --recursive
旗標。舉例來說,如要將包含子目錄的檔案從本機目錄 top-level-dir
複製到值區,您可以使用:
gcloud storage cp top-level-dir gs://example-bucket --recursive
您可以使用萬用字元來比對作業的一組特定名稱。例如,若只要複製開頭為 image
的檔案:
gcloud storage cp top-level-dir/subdir/image* gs://example-bucket --recursive
您可以使用相同的萬用字元移除檔案:
gcloud storage rm gs://example-bucket/top-level-dir/subdir/image*
除了將本機檔案複製到雲端,或將雲端檔案複製到本機,您也可以在雲端中複製檔案,例如:
gcloud storage cp gs://example-bucket/top-level-dir/subdir/** gs://example-bucket/top-level-dir/subdir/subdir2
gcloud storage
會自動偵測您正在移動多個檔案,並在新目錄 subdir2
中建立這些檔案。
同步處理本機目錄
如果您要將本機目錄同步到值區,或將值區同步到本機目錄,可以使用 gcloud storage rsync
指令。例如,若要讓 gs://example-bucket
符合 local-dir
本機目錄的內容,您可以使用:
gcloud storage rsync local-dir gs://example-bucket --recursive
如果您使用 --delete-unmatched-destination-objects
旗標,則會通知指令在目的地 (上述指令中的 gs://example-bucket
) 刪除來源 (local-dir
) 中不存在的檔案。您也可以在兩個值區之間進行同步。
將大型檔案複製到值區
一般來說,處理大數據時,只要資料在雲端中,就應該留在雲端。資料存放在 Trusted Cloud by S3NS後,就能快速移轉至相同位置的其他服務,例如 Compute Engine。
若要將大型本機檔案複製到值區,請使用:
gcloud storage cp local-file gs://example-bucket
如要從現有 bucket 複製大型檔案,請使用:
gcloud storage cp gs://example-source-bucket/file gs://example-destination-bucket
gcloud storage
可充分利用 Cloud Storage 的可續傳上傳和下載功能。對大型檔案而言,此功能格外重要,因為 ISP 網路故障的可能性會隨著移轉資料的大小而增加。依據伺服器實際接收的位元組續傳上傳資料,gcloud storage
就不需要重新傳送位元組,並可確保上傳作業最終一定能完成。同樣的邏輯也適用於以本機檔案大小為基礎的下載作業。
設定值區
設定值區常見的大數據工作包括將資料移動到不同的儲存空間級別、設定物件版本管理或設定生命週期規則。
您可以使用 buckets describe
列出值區的設定詳細資料:
gcloud storage buckets describe gs://example-bucket
請在輸出中注意值區設定資訊,其中大部分資訊也可以透過 gcloud storage
設定:
- CORS:控制值區的跨源資源共享設定。
- 網站:允許值區中的物件做為網頁使用,或用做網站中的靜態資產。
- 版本管理:刪除值區中的物件以建立非現行版本。
- 儲存空間級別:可讓您在建立值區期間設定儲存空間級別。
- 生命週期:允許在值區中執行定期作業 - 最常見的作業是刪除過時物件。
例如,假設您只想將檔案保存在特定值區中一天,則可以使用下列指令設定值區的生命週期規則:
echo '{ "rule": [{ "action": {"type": "Delete"}, "condition": {"age": 1}}]}' > lifecycle_config.json
gcloud storage buckets update gs://example-bucket --lifecycle-file=lifecycle_config.json
現在,系統會自動刪除在這個值區中存在時間超過一天的物件。您可以使用 buckets describe
指令驗證剛剛設定的配置 (其他設定指令也是以類似的方式運作):
gcloud storage buckets describe gs://example-bucket
共享值區中的資料
使用大數據時,您可能需要合作處理檔案,因此您要能將存取權授予特定使用者或群組。
身分與存取權管理政策會定義哪些使用者可以存取檔案,以及允許他們執行的動作。您可以使用 buckets get-iam-policy
指令查看值區的 IAM 政策:
gcloud storage buckets get-iam-policy gs://example-bucket
指令的回應會顯示主體 (獲准存取儲存空間的帳戶) 和角色 (授予主體的權限群組)。
清理值區
您可以使用下列指令快速清理值區:
gcloud storage rm gs://example-bucket/ --recursive
使用總和檢查碼
執行複製作業時,gcloud storage cp
和 gcloud storage rsync
指令會驗證來源檔案的總和檢查碼是否與目的地檔案的總和檢查碼相符。在總和檢查碼不相符的極少數情況下,gcloud storage
會刪除無效複本並輸出警告訊息。詳情請參閱總和檢查碼驗證。
您也可以使用 gcloud storage
計算本機檔案的總和檢查碼。舉例來說,假設您的資料位於本機資料中心的檔案中,且您將該資料複製到 Cloud Storage。您可以使用 gcloud storage hash
獲取本機檔案的總和檢查碼,然後將其與複製到值區中的檔案的總和檢查碼進行比較。若要取得本機檔案的總和檢查碼,請使用下列指令:
gcloud storage hash local-file
MD5 值
針對非複合物件,對值區中的物件執行 gcloud storage objects describe
會傳回類似下方的輸出:
bucket: example-bucket contentType: text/plain crc32c: FTiauw== customTime: '1970-01-01T00:00:00+00:00' etag: CPjo7ILqxsQCEAE= generation: '1629833823159214' id: example-bucket/100MBfile.txt/1629833823159214 kind: storage#object md5Hash: daHmCObxxQdY9P7lp9jj0A== ...
在本機檔案上執行 gcloud storage hash
會傳回如下輸出:
--- crc32c_hash: IJfuvg== digest_format: base64 md5_hash: +bqpwgYMTRn0kWmp5HXRMw== url: file.txt
這兩個輸出都有 CRC32c 和 MD5 值。複合物件沒有 MD5 值,例如從平行複合式上傳建立的物件。