>我正在运行一个火花作业,其中一些数据是从 cassandra 表中加载的。根据这些数据,我做了一些插入和删除语句。并执行它们。(用于每个)
boolean deleteStatus= connector.openSession().execute(delete).wasApplied();
boolean insertStatus = connector.openSession().execute(insert).wasApplied();
System.out.println(delete+":"+deleteStatus);
System.out.println(insert+":"+insertStatus);
当我在本地运行它时,我在表中看到了相应的结果。
但是,当我在集群上运行它时,有时会显示结果,有时不会发生更改。我看到了来自 spark 的 web-ui 的 stdout,并且为这两个查询打印了查询和 true 一起。(数据已正确加载。但有时,只反映插入,有时只删除,有时两者兼而有之,大多数时候不反映。
规格:
- 在与Cassandra节点相同的机器上激发从属。(每个节点有两个从属实例。
- 火花主控在单独的计算机上。
- 在所有节点上完成修复。
- 卡桑德拉重新启动
boolean deleteStatus= connector.openSession().execute(delete).wasApply();
boolean insertStatus = connector.openSession().execute(insert).wasApplied();
这是一个已知的反模式,您可以为每个查询创建一个新的会话对象,这非常昂贵。
只需创建一次会话,然后将其重新用于所有查询。
要查看哪些查询正在执行并发送到 Cassandra,请使用慢速查询记录器功能作为黑客:http://datastax.github.io/java-driver/manual/logging/#logging-query-latencies
这个想法是将阈值设置为一个低得离谱的值,以便每个查询都将被视为缓慢并显示在日志中。
当然,您应该仅将此技巧用于测试