スパークストリーミングを使用して、イベントのウィンドウを毎日のテーブルに挿入し、そのテーブルを常に最新の状態に保ちたいと考えています。
基本的に、私はこれをspark 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
そのような場合、どのような設定が最適でしょうか?
(要件を満たすことができる限り、使用されるものにはかなり柔軟です)