2016-06-23 2 views
0

Я использую Spark 1.6.1, и я все еще довольно новичок в мире Spark. Я играю с сохранением файла в формате ORC.Усовершенствования, улучшающие производительность Spark ORC

Я пытаюсь проанализировать относительно большой текстовый файл (8 ГБ) в ORC. Файл обычно довольно широкий, то есть 200+ столбцов.

Типы столбцов являются основными: Int, String, Date. Я разбираю все строки, а затем сохраняю() и сохраняю файл.

Вот основной код:

val schema = StructType(
    myTableColumns.map(
    c => StructField(
//Field descriptions ~200 fields 
))) 

val rowRDD = rddProcessedLines.map(line => { 
    Row.fromSeq(line) 
}) 

val fileSchemaRDD = hiveContext.createDataFrame(rowRDD, schema) 

fileSchemaRDD.registerTempTable("output_table_name") 
fileSchemaRDD.write.orc("output_folder") 

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

Я попытался переключиться между компрессорами Snappy и LZF, но здесь не так много. Я также играл с объемом памяти для узлов и количества ядер, а не лучше. Затем я начал изменять размер буфера и т. Д. Для сжатия. Я вижу, что производительность резко падает для большего количества столбцов. Может ли кто-нибудь сказать, где искать? Может ли кто-нибудь указать на полезные темы об оптимизации сохранения файлов ORC?

ответ

1

Эта медленная производительность связана с размером файла, который вы пытаетесь загрузить. Чтобы использовать распределенные вычисления искры, убедитесь, что у вас есть несколько небольших файлов, чтобы сделать преобразования более параллельными. Попробуйте сделать свой 8-гигабайтный файл в несколько файлов размером по 64 МБ каждый. Кроме того, из вашего кода вам не нужно регистрировать фрейм данных во временную таблицу перед сохранением, так как позже вы не используете какие-либо другие преобразования.

+0

Где производительность с искрами? Мне нужно выполнить 1. Разархивировать. 2. Разделить как-нибудь на 64 куска (имея в виду, что внутренняя структура должна сохраняться) 3. Скопируйте все в HDFS. Я сомневаюсь, что какая-либо база данных «COPY» или импорт будет медленнее. – user677571

+0

Это не волшебное приложение, искра. Если вы действительно хотите использовать полную емкость кластера, вам определенно нужно позаботиться о разделении файлов на вход. Или вы перестанете перегружать одного исполнителя без использования остальных. – Nakul