2016-08-29 2 views
1

Как и код ниже, вставьте файл данных в таблицу улей. Выходные файлы hdfs улья имеют слишком много маленьких файлов. Как объединить их, когда они сохраняются на улье? myDf.write.format("orc").partitionBy("datestr").insertInto("myHiveTable")Как слить небольшие файлы, сохраненные на улье sparksql?

При наличии 100 задач он будет производить 100 небольших файлов.

Использует coalesce на dataframe - хорошая идея? myDf.coalesce(3).write.format("orc").partitionBy("datestr").insertInto("myHiveTable")

Почему улей конфигурируется, как показано ниже, не работает? sqlContext.sql("set hive.merge.mapfiles=true") sqlContext.sql("set hive.merge.sparkfiles=false") sqlContext.sql("set hive.merge.smallfiles.avgsize=16000000") sqlContext.sql("set hive.merge.size.per.task=256000000")

Большое спасибо за любую помощь.

+0

Насколько велики в среднем 100 небольших файлов, которые создаются? – Jared

ответ

-1

Это потому, что SparkSQL возвращает количество файлов, которое соответствует числу искровых разделов. Даже если включена динамическая конфигурация разбиения.

У меня была та же проблема. На мой взгляд, упомянутые выше конфигурации применимы только к движку Hive on MapReduce: в моем случае команды HiveQL работают хорошо (небольшие файлы объединяются).

См. Hive architecture для получения более подробной информации.

Смежные вопросы