Наиболее эффективный способ поэтапного хранения искрового окна в таблице с помощью Spark

Я хотел бы использовать spark-streaming для вставки окон событий в ежедневную таблицу, при этом делая эту таблицу всегда актуальной до последней секунды.

По сути у меня это с искрой 1.4.1:

val lines = KafkaUtils.createStream(ssc, zkQuorum, group, topicMap).map(_._2)
lines.window(Seconds(1), Seconds(1))
.foreachRDD { (rdd, time) =>
  if (rdd.count > 0) {
    hiveContext.read.json(rdd).toDF().write.mode(SaveMode.Append).save(s"tachyon://192.168.1.12:19998/persistedI")
    hiveContext.sql(s"CREATE TABLE IF NOT EXISTS persistedI USING org.apache.spark.sql.parquet OPTIONS ( path 'tachyon://192.168.1.12:19998/persistedI')")
    hiveContext.sql(s"REFRESH TABLE persistedI")
  }
}

Однако со временем это становится медленнее, как я вижу в журналах, что при каждой вставке открываются все предыдущие части (чтобы прочитать нижние колонтитулы паркета, которые я предполагаю)

Я попробовал следующее, но это замедляет обновление.

parquet.enable.summary-metadata false spark.sql.hive.convertMetastoreParquet.mergeSchema false

Какова была бы лучшая установка для такого случая?

(Я достаточно гибок с тем, что используется, пока я могу соответствовать требованиям)

0 ответов

Другие вопросы по тегам