Spark вставляет данные во внешнюю таблицу улья, создавая очень маленькие файлы деталей - PullRequest
2 голосов
/ 27 июня 2019

Есть ли способ, кроме перераспределения (который замедляет обработку), объединить все файлы размером 1 МБ в несколько больших файлов?

запускает искровой код на 500 ГБ данных, на 100 исполнителей по 24 ядра каждое, но сохраняет их в большие файлы по 128 МБ каждый. теперь он сохраняет 1 МБ каждого файла.

spark.sql("set pyspark.hadoop.hive.exec.dynamic.partition=true")

spark.sql("set pyspark.hadoop.hive.exec.dynamic.partition.mode=nonstrict")

spark.sql("set hive.exec.dynamic.partition=true")

spark.sql("set hive.exec.dynamic.partition.mode=nonstrict")

spark.sql("set hive.merge.tezfiles=true")

spark.sql("SET hive.merge.sparkfiles = true")

spark.sql("set hive.merge.smallfiles.avgsize=128000000")

spark.sql("set hive.merge.size.per.task=128000000")

1 Ответ

1 голос
/ 28 июня 2019

Опция-1:

Вы можете сделать .coalesce(n) (случайное перемешивание не произойдет) на вашем фрейме данных и затем использовать .option("maxRecordsPerFile",n) для контроля количества записей, записанных в каждом файле.

Опция-2:

Использование spark.sql.shuffle.partitions=n эта опция используется для контроля количества случайных перемещений.

Затем использование df.sort("<col_name>").write.etc создаст именно то количество файлов, которое мы упомянули для shuffle.partitions.

Опция-3:

Hive:

Как только задание зажигания выполнено, trigger hive job вставьте перезапись, выбрав ту же таблицу ииспользуйте sortby, распределенный, кластеризованный и задайте все конфигурации улья, которые вы упомянули в вопросе.

Insert overwrite table select * from table sort by <col1> distributed by <col2>

Option-4:

Hive:

Если у вас есть таблица ORC, то запланируйте сцепление задания для периодического запуска

alter table <table_name> concatenate;

Если ни один из методов не представляется возможным решением, тогда .repartition(n)Это будет путь, так как это потребует дополнительных затрат, но мы собираемся получить файлы ~ одинакового размера в HDFS и повысить производительность при чтении этих файлов из hive / spark .

...