我有一个微妙的Spark问题,我无法绕过头.
我们有两个RDD(来自Cassandra).RDD1包含Actions和RDD2包含Historic数据.两者都有一个id可以匹配/加入.但问题是这两个表有一个N:N关系.Actions包含多个具有相同ID的行,因此也是如此Historic.以下是两个表的一些示例日期.
Actions 时间实际上是一个时间戳
id | time | valueX
1 | 12:05 | 500
1 | 12:30 | 500
2 | 12:30 | 125
Run Code Online (Sandbox Code Playgroud)
Historic set_at实际上是一个时间戳
id | set_at| valueY
1 | 11:00 | 400
1 | 12:15 | 450
2 | 12:20 | 50
2 | 12:25 | 75
Run Code Online (Sandbox Code Playgroud)
我们如何以某种方式加入这两个表,我们得到这样的结果
1 | 100 # 500 - 400 for Actions#1 with time 12:05 because Historic was in that time at 400
1 …Run Code Online (Sandbox Code Playgroud) 我在handels的系统上工作了很多更新,插入和删除请求.这就是为什么我选择INNODB作为我的存储引擎行锁的原因.我们每10分钟更新60,000条记录.我们正在使用Gearman来平衡我们在不同服务器上的工作.代码是PHP,我们使用的是Zend Framework.
所以让我们从我们问题的描述开始.我们正在记录错误,几乎每隔5-20分钟就会发生一次错误.
SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded; try restarting transaction
Run Code Online (Sandbox Code Playgroud)
简单扩展"锁定等待超时"对我们没有帮助,因为我们尝试尽快更新.
为了获得更多信息,我做了SHOW INNODB STATUS\G.有一件事让我问 - 黑客是什么?
---TRANSACTION 0 18126657, ACTIVE 54 sec, process no 16154,
OS thread id 47956454176512 fetching rows, thread declared inside InnoDB 68 mysql tables in use 1,
locked 1 1204 lock struct(s), heap size 112624, 65338 row lock(s), undo log entries 44
MySQL thread id 3331522, query id 103362521 [ServerIP] [USER] Updating
UPDATE userproducts SET lowest_price=16.96, last_lowest_price_update='2012-09-09 20:07:30' WHERE product_id …Run Code Online (Sandbox Code Playgroud) 我想我有一些应用程序问题会减慢我们的整个应用程序,并可能导致损坏和其他问题.
许多正在睡眠的mysql连接都会出现应用程序问题.
的SHOW PROCESSLIST;输出:
| 356058234 | Y | X:39119 | D | Sleep | 1442 | | NULL |
| 356058441 | Y | X:39126 | D | Sleep | 1442 | | NULL |
| 356059383 | Y | X:46615 | D | Sleep | 2049 | | NULL |
| 356059389 | Y | X:46617 | D | Sleep | 2052 | | NULL |
| 356065991 | Y | X:39267 | D | Sleep …Run Code Online (Sandbox Code Playgroud) 我有以下代码,它从数据库(非常多)接收数据并将它们传递给处理这些数据的函数.这是代码的样子.
for($o=0; $o<$times; $o++)
{
echo "Before Data: ".memory_get_peak_usage().PHP_EOL;
$data = $u->getDataLimit($id, $market, ($o*5000));
echo "After Data: ".memory_get_peak_usage().PHP_EOL;
echo "Before Process: ".memory_get_peak_usage().PHP_EOL;
$feed.= $p->process($data, ($o*5000) , 0, 0);
echo "After Process: ".memory_get_peak_usage().PHP_EOL;
$data = null; // or unset($data) doesnt matter.
echo "After All: ".memory_get_peak_usage().PHP_EOL.PHP_EOL;
}
Run Code Online (Sandbox Code Playgroud)
这就是输出.
Before Data: 9587976
After Data: 37969952
Before Process: 37969952
After Process: 70166880
After All: 70166928
Before Data: 70166928
After Data: 83876232
Before Process: 83876232
After Process: 118233752
After All: 118233752
Before Data: 118233752
After …Run Code Online (Sandbox Code Playgroud) php ×3
mysql ×2
performance ×2
apache-spark ×1
cassandra ×1
gearman ×1
innodb ×1
linux ×1
memory-leaks ×1
rdd ×1