Я использую 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. Разархивировать. 2. Разделить как-нибудь на 64 куска (имея в виду, что внутренняя структура должна сохраняться) 3. Скопируйте все в HDFS. Я сомневаюсь, что какая-либо база данных «COPY» или импорт будет медленнее. – user677571
Это не волшебное приложение, искра. Если вы действительно хотите использовать полную емкость кластера, вам определенно нужно позаботиться о разделении файлов на вход. Или вы перестанете перегружать одного исполнителя без использования остальных. – Nakul