spark工作者同时更新同一行的Mysql表

时间:2016-12-24 04:04:09

标签: mysql apache-spark pyspark

我必须在独立群集(M + 3工作人员)上运行spark作业。

我的工作由"按交易明细更新客户计数" I:E。我将获得一个批处理/流媒体文件/记录(说100交易)来处理和我的火花作业'如果发现交易的客户ID - 转到mysql-Table并将该客户的Transaction_count增加1'。

目前正在工作 - 很好,但我担心的是::假设我的每个工作人员都获得了同一客户的记录(当然是在他们的共享RDD部分),并试图在同一个客户更新Trx_count Mysql-table SIMULTANEOUSLY。

我会在那张桌子上面对锁吗?

或Spark以其他方式处理它(没有明确的想法),所以它永远不会发生到日期,并且可能永远不会发生在未来?

需要了解一下火花正在做什么更新工作(计划)?

1 个答案:

答案 0 :(得分:0)

  1. 使用client-id作为键执行reduceByKey,并将sum作为reduce函数执行here,它将返回一对(client-id,事务计数)。

  2. 现在触发单个SQL查询以直接更新该客户端的聚合计数。

  3. 这将避免任何竞争条件,并且还会触发更少的SQL查询。