问题
spark 的容错机制会使得spark application失败时尝试重启,从web ui中我们就可以看到其Attempt ID
大于1。这是个好的机制,但是对于通过jdbc将数据导入clichouse的过程来说却是个不好的体验。因为如果重启的application的话会导致导入的数据重复,使得总的数据量增多,然后zookeeper有数据块的校验机制。
可通过--conf spark.yarn.maxAppAttempts=1
使得application的重启次数为1,但是又带来可能出现的数据导入不全的情况出现。
看来得寻找一种好的数据导入工具,希望是操作友好,可视化,有监控,易管理,数据不会重复导入的工具。网上看了一下好像NIFI还不错,先调研调研。
解决方法
加快导数clickhouse的速度,缩短导入时间,这样就能够大概率上避免spark attempt的出现。具体方法是:
在spark的jdbc properties中
- 设置合适的batchsize。
- 设置合适的并发度。
- 设置合适的内存使用量。