【问题标题】:spark workers simultaneously Updating same row of Mysql Table火花工人同时更新同一行的Mysql表
【发布时间】:2016-12-24 04:04:09
【问题描述】:

我必须在独立集群 (M+3Workers) 上运行 spark Job。

我的工作由“按交易详细信息更新客户数量”定义我:e。我将获得一个批处理/流文件/记录(比如 100 笔交易)来处理,我的 spark 作业“如果找到交易,则为客户 id-转到 mysql-Table 并将该客户的 Transaction_count 增加 1”。

目前它工作正常,但我担心的是:: 假设我的每个 Worker 都有同一客户的记录(当然在他们的共享 RDD 部分中)并尝试更新该客户的 Trx_count mysql 表同时进行。

我会在那个表中遇到锁吗??

或者 Spark 以其他方式处理它(没有明确的想法),所以它直到日期都不会发生,将来也可能永远不会发生??

需要了解 spark 是如何完成更新工作(计划)的?

【问题讨论】:

  • 当我们获取交易详情时,很有可能多个工作人员尝试更新同一客户行(可能/可能-不同时间)。因此,最好在 MySQL 中为更新添加行级锁定。

标签: mysql apache-spark pyspark


【解决方案1】:
  1. here 所述,以client-id 为key 和sum 作为reduce 函数执行reduceByKey,它将返回一对(client-id,事务计数)。

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

这将避免任何竞争条件,也将触发更少的 SQL 查询。

【讨论】:

  • @Tushar-让我试试这个。
猜你喜欢
  • 2017-11-23
  • 2019-08-17
  • 2021-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多