本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
S3 DistCp (S3-潛入高分析度)
Apache DistCp 是一種開放原始碼工具,可用來複製大量資料。S3 類似DistCp於 DistCp,但優化了使用 AWS,特別是 Amazon S3。Amazon 4.0 及更高EMR版本DistCp 中 S3 的命令是s3-dist-cp
,您可以在叢集或命令列中新增為步驟。使用 S3DistCp,您可以有效地將大量資料從 Amazon S3 複製HDFS到 Amazon EMR 叢集中的後續步驟可處理資料的位置。您也可以使用 S3 DistCp 在 Amazon S3 儲存貯體之間複製資料,或從 HDFS Amazon S3 複製資料。S3 DistCp 在儲存貯體和各個 AWS 帳戶之間 parallel 複製大量物件時,具有更高的可擴展性和效率。
如需展示 S3DISCp 在真實世界案例中彈性的特定命令,請參閱 AWS 大數據部落格DistCp上的七個使用 S3 秘訣
就像 DistCp,S3 DistCp 使用 MapReduce 以分佈式方式進行複製。它會跨多個伺服器分享複本、處理錯誤、進行復原,以及回報任務。如需有關 Apache DistCp 開放原始碼專案的詳細資訊,請參閱 Apache Hadoop 文件中的DistCp指南
如果 S3 DistCp 無法複製部分或全部指定的檔案,叢集步驟會失敗,並傳回非零錯誤碼。如果發生這種情況,S3 DistCp 不會清除部分複製的檔案。
重要
S3 DistCp 不支援包含底線字元的 Amazon S3 儲存貯體名稱。
S3 DistCp 不支持拼接文件的串聯。請改為 PySpark 使用。有關更多信息,請參閱在 Amazon EMR 中連接實木複合地板文件
若要避免在使用 S3DISCp 將單一檔案 (而非目錄) 從 S3 複製到時發生錯誤HDFS,請使用 Amazon 5.33.0 或更新EMR版本或 Amazon EMR 6.3.0 或更新版本。
S3 DistCp 選項
雖然與 S3 類似 DistCp,但DistCp 支援一組不同的選項來變更複製和壓縮資料的方式。
當您呼叫 S3 時DistCp,您可以指定下表所述的選項。這些選項會透過引數清單加入步驟中。S3 DistCp 引數的範例如下表所示。
選項 | 描述 | 必要 |
---|---|---|
‑‑src=LOCATION
|
複製資料的位置。這可以是一個HDFS或 Amazon S3 位置。 範例: 重要S3 DistCp 不支援包含底線字元的 Amazon S3 儲存貯體名稱。 |
是 |
‑‑dest=LOCATION
|
資料的目的地。這可以是一個HDFS或 Amazon S3 位置。 範例: 重要S3 DistCp 不支援包含底線字元的 Amazon S3 儲存貯體名稱。 |
是 |
‑‑srcPattern=PATTERN
|
規則運算式 若規則表達式引數含有星號 (*) 等特殊字元,則需將規則表達式或整個 範例: |
否 |
‑‑groupBy=PATTERN
|
DistCp 使 S3 連接符合運算式的檔案的規 括號代表檔案的分組方式,所有與括號中的陳述相符的項目均會結合成同一個輸出檔案。如果規則運算式不包含括號陳述式,叢集會在 S3 DistCp 步驟失敗並傳回錯誤。 若規則表達式引數含有星號 (*) 等特殊字元,則需將規則表達式或整個 指定 範例: |
否 |
‑‑targetSize=SIZE
|
根據 若由 範例: |
否 |
‑‑appendToLastFile |
指定 S3 從 Amazon S3 複製DistCp 到已存在的檔案時HDFS的行為。會將新的檔案資料附加到既有檔案中。如果使用 |
否 |
‑‑outputCodec=CODEC
|
指定要用複製檔案的壓縮代碼。可能會使用到這些值: 範例: |
否 |
‑‑s3ServerSideEncryption
|
確保使用 Amazon S3 中的目標資料傳輸,SSL並使用 AWS 服務端金鑰自動加密。使用 S3 擷取資料時DistCp,物件會自動取消加密。如果嘗試將未加密的物件複製到需要加密的 Amazon S3 儲存貯體,複製操作會失敗。如需詳細資訊,請參閱使用資料加密。 範例: |
否 |
‑‑deleteOnSuccess
|
如果複製作業成功,此選項會導致 S3 DistCp 從來源位置刪除複製的檔案。若是要將記錄檔這類輸出檔案當做排程任務處理,從一個位置複製到另個位置,且您不想重複複製相同的檔案,此功能便相當實用。 範例: |
否 |
‑‑disableMultipartUpload
|
停用分段上傳。 範例: |
否 |
‑‑multipartUploadChunkSize=SIZE
|
Amazon S3 分段上傳中每個部分的大小 (MiB)。S3 DistCp 會在 範例: |
否 |
‑‑numberFiles
|
會在輸出檔案的開頭加上順序編號。數字會從 0 開始,除非由 範例: |
否 |
‑‑startingIndex=INDEX
|
搭配 範例: |
否 |
‑‑outputManifest=FILENAME
|
創建一個文本文件,用 Gzip 壓縮,其中包含 S3 DistCp 複製的所有文件的列表。 範例: |
否 |
‑‑previousManifest=PATH
|
讀取上次DistCp 使用 範例: |
否 |
‑‑requirePreviousManifest |
需要先前呼叫 S3 期間建立的資訊清單DistCp。若設定為 false,未指定先前的資訊清單,也不會產生任何錯誤。預設值為 true。 |
否 |
‑‑copyFromManifest
|
反轉的行為,使 S3 範例: |
否 |
‑‑s3Endpoint=ENDPOINT |
指定上傳檔案時要使用的 Amazon S3 端點。此選項會設定來源和目的地兩邊的端點。若未設定,預設端點則為 範例: |
否 |
‑‑storageClass=CLASS |
目的地是 Amazon S3 時所用的儲存類別。有效值為STANDARD和 REDUCED _ REDUNDANCY。如果未指定此選項,S3 DistCp 會嘗試保留儲存類別。 範例: |
否 |
‑‑srcPrefixesFile=PATH |
Amazon S3 (s3://)、(hdfs:///) 或本機檔案系統 HDFS (file:/) 中的文字檔案,其中包含前置詞清單,每行 如果 範例: |
否 |
除了上述選項之外,S3 還DistCp 實現了 Tool 接口
將 S3 新增DistCp 為叢集中的步驟
您可以將 S3 新DistCp 增為叢集中的步驟來呼叫 S3。您可以在啟動時將步驟新增至叢集,或使用主控台、CLI或新增至執行中的叢集API。下列範例示範將 S3 DistCp 步驟新增至執行中的叢集。如需新增步驟至叢集的詳細資訊,請參閱 Amazon EMR 管理指南中的將工作提交至叢集。
若要使用將 S3 DistCp 步驟新增至執行中的叢集 AWS CLI
如需有關使用中 Amazon 命EMR令的詳細資訊 AWS CLI,請參閱《命AWS CLI 令參考》。
-
若要將步驟新增至呼叫 S3 的叢集DistCp,請傳遞指定 S3 DistCp 應如何以引數形式執行複製操作的參數。
下列範例會將常駐程式日誌從 Amazon S3 複製到
hdfs:///output
。在下列命令中:-
‑‑cluster-id
指定了叢集 -
Jar
是 S3 DistCp JAR 檔案的位置。如需如何使用 command-runner.jar 在叢集上執行命令的範例,請參閱提交自訂JAR步驟以執行指令碼或命令。 -
Args
是要傳入 S3 的選項名稱-值對的逗號分隔清單。DistCp如需可用選項的完整清單,請參閱 S3 DistCp 選項。
若要將 S3 DistCp 複製步驟新增至執行中的叢集,請將以下內容放入JSON儲存在 Amazon S3 或本機檔案系統中的檔案中,如本範例所示。
Replace (取代)myStep.json
j-3GYXXXXXX9IOK
使用您的群集 ID 並替換mybucket
使用您的 Amazon S3 存儲桶名稱。[ { "Name":"S3DistCp step", "Args":["s3-dist-cp","‑‑s3Endpoint=s3.amazonaws.com","‑‑src=s3://mybucket/logs/j-3GYXXXXXX9IOJ/node/","‑‑dest=hdfs:///output","‑‑srcPattern=.*[a-zA-Z,]+"], "ActionOnFailure":"CONTINUE", "Type":"CUSTOM_JAR", "Jar":"command-runner.jar" } ]
aws emr add-steps ‑‑cluster-id
j-3GYXXXXXX9IOK
‑‑steps file://./myStep.json -
範例 將日誌檔從 Amazon S3 複製到 HDFS
此範例也說明如何將存放在 Amazon S3 儲存貯體的日誌檔案複製到HDFS執行中的叢集中。在此範例中,‑‑srcPattern
選項適用於限制複製到精靈記錄檔的資料。
若要將日誌檔從 Amazon S3 複製到HDFS使用‑‑srcPattern
選項,請將以下內容放入儲存在 Amazon S3 或本機JSON檔案系統中的檔案中,如本範例所示。
Replace (取代) myStep.json
j-3GYXXXXXX9IOK
使用您的群集 ID 並替換 mybucket
使用您的 Amazon S3 存儲桶名稱。
[ { "Name":"S3DistCp step", "Args":["s3-dist-cp","‑‑s3Endpoint=s3.amazonaws.com","‑‑src=s3://mybucket/logs/j-3GYXXXXXX9IOJ/node/","‑‑dest=hdfs:///output","‑‑srcPattern=.*daemons.*-hadoop-.*"], "ActionOnFailure":"CONTINUE", "Type":"CUSTOM_JAR", "Jar":"command-runner.jar" } ]