Вы не можете перезапустить экземпляр Cassandra в пределах одной виртуальной машины - у Cassandra есть «политика отключения при уничтожении» из-за используемых им отдельных кнопок.
Вам также не нужно перезапускать Casandra, просто удалите все семейства столбцов (КФ).Чтобы удалить CF, вам нужно сначала сбросить данные, сжать их, а затем, наконец, вы можете их отбросить.
Этот код подключится к встроенной Cassandra и выполнит требуемую очистку:
private void cleanAndCompact() throws Exception {
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
ObjectName ssn = new ObjectName("org.apache.cassandra.db:type=StorageService");
StorageServiceMBean ssmb = JMX.newMBeanProxy(mbs, ssn, StorageServiceMBean.class);
List<String> keyspaces = ssmb.getKeyspaces();
if (keyspaces == null) {
LOG.info("No keysaces to cleanup");
return;
}
for (String keyspace : keyspaces) {
if (keyspace.equalsIgnoreCase("system")) {
continue;
}
execCleanup(ssmb, keyspace);
}
}
private void execCleanup(StorageServiceMBean ssmb, String keyspace) throws Exception {
LOG.info("Cleaning up keyspace: " + keyspace);
ssmb.invalidateKeyCaches(keyspace, new String[0]);
ssmb.invalidateRowCaches(keyspace, new String[0]);
ssmb.forceTableFlush(keyspace, new String[0]);
ssmb.forceTableCompaction(keyspace, new String[0]);
ssmb.forceTableCleanup(keyspace, new String[0]);
}
Теперь выполните CLI-скрипт отбрасывания CF:
CliMain.main(new String[] { "-host", host, "-port", Integer.toString(rpcPort), "-f", "/my/script/path/script.txt","-username", "myUser", "-password", "123456" });
, и script.txt может иметь:
use ExampleTestSpace;
drop column family ExampleCF;