簡體   English   中英

更改表以在 Hive 外部表上添加需要很長時間的分區

[英]Alter table to add partition taking long time on Hive external table

我正在嘗試通過具有 6 個節點(每個節點上有 8 個內核和 56GB 內存)的 EMR 集群執行 spark 作業。 Spark 作業對 Hive 表的分區執行增量加載,最后它執行刷新表以更新元數據。

刷新命令需要長達 3-6 小時才能完成,這太長了。

Hive 中數據的性質:

  1. 27Gb 數據位於 S3 上。
  2. 存放在鑲木地板中。
  3. 分區為 2 列。(例如: s3a//bucket-name/table/partCol1=1/partCol2=2020-10-12 )。

注意 - 它是一個按日期划分的分區,不能更改。

使用的 Spark 配置:

  • 數量執行者 = 15
  • 執行器內存 =16Gb
  • Executor-cores = 2
  • 驅動程序內存= 49Gb
  • Spark-shuffle-partitions=48
  • Hive.exec.dynamic.partition.mode=非嚴格
  • Spark.sql.sources.partitionOverwriteMode=動態。

嘗試的事情:

  • 調整火花核心/內存/執行器,但沒有運氣。
  • 刷新表命令。
  • 更改表添加分區命令。
  • Hive cli 耗時3-4小時完成MSCK repair table tablename

以上所有對減少刷新 Hive 上的分區的時間都沒有影響。

一些假設:

  1. 由於數據存儲在 Amazon-S3 中,我是否在調整中遺漏了任何參數。?
  2. 目前表上的分區數接近 10k,這是一個問題。?

任何幫助都感激不盡。

  • 如果可能,將分區設置為 1 列。 當我們有多級(多列分區)時它會被殺死

  • 使用 R 類型實例。 與相同價格的 M 類型實例相比,它提供更多的內存

  • 如果有很多小文件,使用coalesce合並源中的文件。

  • 檢查映射器任務的數量。 任務越多,性能越低

  • 使用 EMRFS 而不是 S3 來保存元數據信息

  • 下面使用

    {“分類”:“火花”,“屬性”:{“maximizeResourceAllocation”:“true”}}

  • 按照以下鏈接中的一些說明進行操作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM