我正在运行一个spark作业,其中一些数据是从cassandra表加载的。从该数据,我做了一些插入和删除语句。 并执行它们。 (使用forEach)
boolean deleteStatus= connector.openSession().execute(delete).wasApplied();
boolean insertStatus = connector.openSession().execute(insert).wasApplied();
System.out.println(delete+":"+deleteStatus);
System.out.println(insert+":"+insertStatus);
当我在本地运行时,我会在表格中看到相应的结果。
但是,当我在群集上运行它时,有时会显示结果,有时不会发生更改。
我看到了来自web-ui of spark的stdout,并且为两个查询打印了查询以及true。(数据已正确加载。但有时,只反映插入,有时只删除,有时两者都是,大多数没有时间。)
规格:
答案 0 :(得分:0)
boolean deleteStatus = connector.openSession()。execute(delete).wasApplied();
boolean insertStatus = connector.openSession()。execute(insert).wasApplied();
这是一个已知的反模式,您为每个查询创建一个新的Session对象,这是非常昂贵的。
只需创建一次会话,然后将其重新用于所有查询。
要查看正在执行哪些查询并将其发送到Cassandra,请使用慢速查询记录器功能作为黑客攻击:http://datastax.github.io/java-driver/manual/logging/#logging-query-latencies
我们的想法是将阈值设置为一个非常低的值,这样每个查询都会被视为慢速并显示在日志中。
您应该仅将此hack用于测试