我必须在独立群集(M + 3工作人员)上运行spark作业。
我的工作由"按交易明细更新客户计数" I:E。我将获得一个批处理/流媒体文件/记录(说100交易)来处理和我的火花作业'如果发现交易的客户ID - 转到mysql-Table并将该客户的Transaction_count增加1'。
目前正在工作 - 很好,但我担心的是::假设我的每个工作人员都获得了同一客户的记录(当然是在他们的共享RDD部分),并试图在同一个客户更新Trx_count Mysql-table SIMULTANEOUSLY。
我会在那张桌子上面对锁吗?
或Spark以其他方式处理它(没有明确的想法),所以它永远不会发生到日期,并且可能永远不会发生在未来?
需要了解一下火花正在做什么更新工作(计划)?
答案 0 :(得分:0)
使用client-id作为键执行reduceByKey,并将sum作为reduce函数执行here,它将返回一对(client-id,事务计数)。
现在触发单个SQL查询以直接更新该客户端的聚合计数。
这将避免任何竞争条件,并且还会触发更少的SQL查询。