我在VM上设置了单个Cassandra节点。我必须创建一个表与70000列。为此,我编写了Java代码,读取json文件并创建表。下面是我的Java代码片段。当我运行我的java代码时,它在创建一些列后抛出异常。异常堆栈
public void createTable(String keyspaceName, String tableName) throws FileNotFoundException{
JSONParser jsonParser = new JSONParser();
FileReader fileReader;
String filePath = "";
String columnHeader = "";
//String completeColumnHeader = "";
try{
System.out.println("Inside Create Table");
session.executeAsync("DROP TABLE IF EXISTS "+keyspaceName+"."+tableName+";");
String createQuery = "CREATE TABLE "+keyspaceName+"."+tableName +"("P:LanguageID" text, "
+ ""P:PdmarticleID" text, PRIMARY KEY("P:PdmarticleID","P:LanguageID"));";
session.execute(createQuery);
System.out.println("Table created");
filePath = "CassandraTableColumnHeader/FixColumnHeader.json";
fileReader = new FileReader(filePath);
JSONObject jsonObject = (JSONObject) jsonParser.parse(fileReader);
JSONArray jsonArray = (JSONArray) jsonObject.get("columnHeaderName");
int columnHeaderSize = jsonArray.size();
int columnHeaderBatchSize = 1000;
int fromIndex = 0;
int toIndex = columnHeaderBatchSize;
while(columnHeaderSize > 0){
columnHeaderSize -=columnHeaderBatchSize;
for(int i = fromIndex; i < toIndex; i++) {
columnHeader = (String) jsonArray.get(i);
if(columnHeader.equals("P:PdmarticleID")||columnHeader.equals("P:LanguageID")){
continue;
}
session.execute("ALTER TABLE "+keyspaceName+"."+tableName +" ADD "+"""+columnHeader+"""+" text;");
}
fromIndex = toIndex;
if(columnHeaderSize < columnHeaderBatchSize){
toIndex += columnHeaderSize;
}else{
toIndex = toIndex + columnHeaderBatchSize;
}
}
}catch(FileNotFoundException fnfe){
throw fnfe;
}catch (ParseException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
线程"main"中的异常com.datastax.driver.core.exceptions. nohostavailableexception:所有主机(s)尝试查询失败(try:/127.0.0.1:9042 (com.datastax.driver.core.exceptions)。驱动异常:主机回复服务器错误:java.lang.RuntimeException: java.util.concurrent.ExecutionException: java.lang.RuntimeException: java.io.FileNotFoundException: C:apache- cassandla -newdatadatasystemschema_columnfamilies-45f5b36024bc3f83a3631034ea4fa697system-schema_columnfamilies- tmpllink -ka-4839- data .db(进程无法访问该文件,因为它正在被另一个进程使用))com.datastax.driver.core.exceptions.NoHostAvailableException.copy (NoHostAvailableException.java: 84)com.datastax.driver.core.DefaultResultSetFuture.extractCauseFromExecutionException (DefaultResultSetFuture.java: 265)com.datastax.driver.core.DefaultResultSetFuture.getUninterruptibly (DefaultResultSetFuture.java: 179)com.datastax.driver.core.AbstractSession.execute (AbstractSession.java: 52)在com.datastax.driver.core.AbstractSession.execute (AbstractSession.java: 36)com.exportstagging.SparkTest.DataLoaderInCassandra.createTable (DataLoaderInCassandra.java: 89)com.exportstagging.SparkTest.DataLoaderInCassandra.main (DataLoaderInCassandra.java: 216)com.datastax.driver.core.exceptions. nohostavailableexception: All host(s) trying for query failed (tried:/127.0.0.1:9042 (com.datastax.driver.core.exceptions)。驱动异常:主机回复服务器错误:java.lang.RuntimeException: java.util.concurrent.ExecutionException: java.lang.RuntimeException: java.io.FileNotFoundException: C:apache- cassandla -newdatadatasystemschema_columnfamilies-45f5b36024bc3f83a3631034ea4fa697system-schema_columnfamilies- tmpllink -ka-4839- data .db(进程无法访问该文件,因为它正在被另一个进程使用))com.datastax.driver.core.RequestHandler.reportNoMoreHosts (RequestHandler.java: 216)com.datastax.driver.core.RequestHandler.access 900美元(RequestHandler.java: 45)com.datastax.driver.core.RequestHandler SpeculativeExecution.sendRequest美元(RequestHandler.java: 276)在com.datastax.driver.core.RequestHandler SpeculativeExecution 1.美元运行(RequestHandler.java: 374)在java.util.concurrent.ThreadPoolExecutor.runWorker(来源未知)在java.util.concurrent.ThreadPoolExecutor$Worker.run(来源未知)在java.lang.Thread.run(未知来源)
我被困在这里了。请帮帮我。
如果我是你,我可能会重新评估创建一个有70k列标题的表。无论如何,分区键P:PdmarticleID和完整主键(P:PdmarticleID、P:LanguageID)是您能够用来获得结果的仅有的两条信息。因此,将这些其他信息显式地存储在列中并不能为您带来任何东西。
集合(如:map)可以保存64k个项目,还有一些其他限制(参见http://wiki.apache.org/cassandra/CassandraLimitations)。是否有一种方法可以拆分列,以便创建多个表,其中一些信息存储在一个表中,另一些存储在另一个表中?