我想使用 Netflix 的 outputCommitter(將 Spark 與 Amazon EMR 一起使用)。在 README 中有 2 個選項:
- S3DirectoryOutputCommitter - 用于將未磁區的資料寫入 S3 并解決沖突。
- S3PartitionedOutputCommitter - 用于將磁區資料寫入 S3 并解決沖突。
我試圖理解這些差異,但沒有成功。有人可以解釋什么是 s3 中的“磁區資料”嗎?
uj5u.com熱心網友回復:
根據 hadoop 檔案,“此提交者是“目錄”提交者的擴展,它具有特殊的沖突解決策略,旨在支持將新資料插入使用 Hive 磁區策略構建的目錄樹的操作:樹的不同級別代表不同的列。”
在 hadoop 檔案中搜索完整的詳細資訊。
請注意,EMR 提交者不是 ASF S3A 提交者,因此請采用不同的配置選項并擁有自己的檔案。但由于他們的作業是對 netflix 作業的重新實作,他們應該在這里做同樣的事情
uj5u.com熱心網友回復:
我不熟悉outputCommitter,Amazon S3 中的磁區資料通常是指在目錄之間拆分檔案以減少需要從磁盤讀取的資料量。
例如:
/data/month=1/
/data/month=2/
/data/month=3/
...
如果使用類似 的子句對資料運行 Hive 型別的查詢WHERE month=1,則只需要查看month=1/子目錄,從而節省 2/3 的磁盤訪問。
uj5u.com熱心網友回復:
它指的是分段上傳到 s3。
這是一種將大塊資料拆分成小塊的技術,分別上傳所有小塊,完成后,向 s3 發送 api 呼叫以告知全部完成,然后 s3 會將所有小塊合并為單個物件。
有關多部分的更多背景關系:
對于大于 100Mb 的資料,通常建議使用 Multipart。S3 multipart 最多可以上傳 5Tb 的檔案。零件大小可以從 5MiB 到 5GiB。您可以在上傳程序中將每個部分作為單獨的檔案處理,您可以取消和重新上傳部分,這是“暫停”/“恢復”上傳或處理失敗部分所必需的。你可以在這里閱讀更多:
https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html
ps 確保設定 s3 存盤桶的生命周期規則,以在一段時間后洗掉任何未完成的分段上傳。否則,您最終可能會收到未完成的分段上傳,其中一些部分已上傳但從未合并到單個物件。例如,如果開始上傳 5Gb 檔案,則上傳了一些部分,比如說總共 5gb 中的 3gb,然后無論出于何種原因,所有行程都被終止。這些 3gigs 將位于 s3 中,直到您對 s3 進行 api 呼叫以洗掉這些部分或合并為最終物件。我總是向 s3 存盤桶添加生命周期規則,以在 7 或 14 天后洗掉任何未完成的分段上傳。但是它會引入一個限制,您必須在該時間段內完成上傳,否則它將失敗。所以取決于你上傳的內容,設定“足夠”的時間來完成。根據網路速度和檔案大小,即使 14 天也可能太少了。或者,也許您的上傳程序允許暫停一個月,然后您需要允許部分保留在存盤桶中,同時還要考慮暫停時間。默認情況下,W/o 生命周期規則部分將永久保留在存盤桶中,您將為該空間付費,這允許有無限的時間進行上傳。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/439836.html
標籤:亚马逊网络服务 阿帕奇火花 亚马逊-s3 亚马逊-emr
