Cassandra Java Exception - NoHostAvailableException



我在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)。是否有一种方法可以拆分列,以便创建多个表,其中一些信息存储在一个表中,另一些存储在另一个表中?

相关内容

最新更新