經 EMRFS S3 優化的提交程式的要求

2022-06-25 21:54:13 字數 2609 閱讀 3066

滿足以下條件時,將使用經 emrfs s3 優化的提交程式:

寫入預設分割槽位置的 spark 作業操作(例如,$/k1=v1/k2=v2/)使用提交程式。如果作業操作寫入自定義分割槽位置,則不使用提交程式。例如,如果自定義分割槽位置是使用alter table sql命令設定的。

必須使用 spark 的以下值:

在以下情況下不使用提交程式:

以下示例演示了使用 scala 編寫的實現,這些實現不整個使用經 emrfs s3 優化的提交程式(第乙個示例),也不部分使用經 emrfs s3 優化的提交程式(第二個示例)。

例 –動態分割槽覆蓋模式

在以下 scala **中,未使用提交程式,因為partitionoverwritemode設定為dynamic,動態分割槽列由partitionby指定,並且寫入模式設定為overwrite

val dataset = spark.range(0, 10)

.withcolumn("dt", expr("date_sub(current_date(), id)"))

dataset.write.mode("overwrite")

.option("partitionoverwritemode", "dynamic")

.partitionby("dt")

.parquet("s3://bucket/output")

在此示例中,spark 不執行使用經 emrfs s3 優化的提交程式或任何已配置的輸出提交程式,而是執行使用 spark 的暫存目錄的不同的提交演算法,該目錄是在以.spark-staging開頭的輸出位置下建立的臨時目錄。該演算法導致分割槽目錄的順序重新命名,這可能會對效能產生負面影響。

spark 2.4.0 中的演算法遵循以下步驟:

任務嘗試將其輸出寫入 spark 的暫存目錄下的分割槽目錄(例如,$/spark-staging-$/k1=v1/k2=v2/)。

對於寫入的每個分割槽,任務嘗試都會跟蹤相對分割槽路徑(例如,k1=v1/k2=v2)。

任務成功完成後,它會為驅動程式提供它跟蹤的所有相對分割槽路徑。

完成所有任務後,作業提交階段將收集成功任務嘗試在 spark 的暫存目錄下寫入的所有分割槽目錄。spark 使用目錄樹重新命名操作按順序將這些目錄的每乙個都重新命名為其最終輸出位置。

暫存目錄會在作業提交階段完成之前刪除。

例 –自定義分割槽位置

在此示例中,scala **插入到兩個分割槽中。乙個分割槽具有自定義分割槽位置。另乙個分割槽使用預設分割槽位置。經 emrfs s3 優化的提交程式僅用於將任務輸出寫入到使用預設分割槽位置的分割槽。

val table = "dataset"

val location = "s3://bucket/table"

spark.sql(s"""

create table $table (id bigint, dt date)

using parquet partitioned by (dt)

location '$location'

""")

// add a partition using a custom location

val custompartitionlocation = "s3://bucket/custom"

spark.sql(s"""

alter table $table add partition (dt='2019-01-28')

location '$custompartitionlocation'

""")

// add another partition using default location

spark.sql(s"alter table $table add partition (dt='2019-01-29')")

def asdate(text: string) = lit(text).cast("date")

spark.range(0, 10)

.withcolumn("dt",

when($"id" > 4, asdate("2019-01-28")).otherwise(asdate("2019-01-29")))

.write.insertinto(table)

scala **建立以下 amazon s3 物件:

custom_$folder$

table/_success

table/dt=2019-01-29_$folder$

table_$folder$

在將輸出寫入自定義位置的分割槽時,任務會寫入到 spark 的暫存目錄下的檔案中,該目錄是在最終輸出位置下建立的。該檔案的名稱包含乙個隨機 uuid,以防止檔案衝突。任務嘗試跟蹤每個檔案以及最終所需的輸出路徑。

在任務成功完成後,它會為驅動程式提供這些檔案及其最終所需的輸出路徑。

所有任務都完成後,作業提交階段會按順序將為自定義位置的分割槽寫入的所有檔案重新命名為其最終輸出路徑。

暫存目錄會在作業提交階段完成之前刪除。

表單提交的簡單優化

今天,分配的任務做完,問我們組長有沒有工作需要幫助,她來了句把自己 優化下,影響效能的地方,以及 不規範的地方 自己優化下,然後給她看.等著被吊 優化前 好吧確實臃腫 handlesubmit contactstore this.props 上傳 first,second,data if this....

MYSQL 迴圈提交的優化測試

今天看了別人的一篇檔案,說的是迴圈提交,效能提高很多,我就用文章的儲存過程測試了一下,果然用時很少 create table t1 a int b char 100 建立load1 delimiter create procedure load1 count int unsigned begin d...

3天內構建Facebook Web應用的經驗之談

近期在微博上有朋友推薦了乙個facebook創意應用crush notifier 愛情通知 其基本規則是 1 提交你喜歡的異性 對方不會收到 2 如果對方也將你列為喜歡的物件,你們倆就會同時收到通知。3 每人僅能免費2次。這個應用像該應用作者之前的一款產品breakup notifier 分手通知,...