session.execute() 在 Spark 集群上完成时不会反映在 Cassandra 上



>我正在运行一个火花作业,其中一些数据是从 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 一起。(数据已正确加载。但有时,只反映插入,有时只删除,有时两者兼而有之,大多数时候不反映。

规格:

  1. 在与Cassandra节点相同的机器上激发从属。(每个节点有两个从属实例。
  2. 火花主控在单独的计算机上。
  3. 在所有节点上完成修复。
  4. 卡桑德拉重新启动

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

这个想法是将阈值设置为一个低得离谱的值,以便每个查询都将被视为缓慢并显示在日志中。

当然,您应该仅将此技巧用于测试

最新更新