当前位置: 首页 > 知识库问答 >
问题:

Cassandra Java Exception - NoHostAvailableException

伊俊能
2023-03-14

我已经在VM上设置了单个卡桑德拉节点。我必须创建一个包含70000列的表。为此,我编写了读取json文件并创建表的Java代码。这是我的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();
    }
} 

线程“主”中的异常 com.datastax.driver.core.exceptions.NoHost可用异常:所有尝试查询的主机都失败(尝试:/127.0.0.1:9042 (com.datastax.driver.core.exceptions.驱动程序例外: 主机回复了服务器错误: java.lang.运行时异常: java.util.concurrent.执行异常: java.lang.运行时异常: java.io.File不发现异常: C:\apache-cassandra-new\data\data\system\schema_columnfamilies-45f5b36024bc3f83a3631034ea4fa697\system-schema_columnfamilies-tmplink-ka-4839-Data.db (进程无法访问该文件,因为它正被另一个进程使用)))在 com.datastax.driver.core.exceptions.noHostavalyExcept.copy(无主机可用异常.java:84) 在 com.datastax.driver.core.默认结果存储.extractCauseFromExceptionException(默认ResultSetFuture.java:265)com.datastax.driver.core.DefaultResultSetFuture.getUnintertiblly(DefaultResultSetFuture.java:179) at com.datastax.driver.core.abstractSession.execute(AbstractSession..java:52) at com.datasax.driver.core.abstractSesion.execute(AbstractSession.java:36) at com.exporttagging.SparkTest.DataLoader.java InCassandra.main(DataLoaderInCassandra.java:216)com.datastax.driver.core.exceptions.NoHost 可用异常: 所有尝试查询的主机都失败 (已尝试: /127.0.0.1:9042 (com.datastax.driver.core.exceptions.驱动程序异常: 主机回复了服务器错误: java.lang.运行时异常: java.util.concurrent.Executexception: java.lang.运行时异常: java.io.FileNotfoundException: C:\apache-cassandra-new\data\data\system\schema_columnfamilies-45f5b36024bc3f3f83a3631034ea4fa697\system-schema_列家庭-tmplink-ka-4839-数据.db (进程无法访问该文件,因为它正被另一个进程使用))) 在 com.datastax.driver.core.RequestHandler.reportNoMoreHosts(请求处理程序.java.java:216) 在 com.datastax.driver.core.RequestHandler.access$900(请求处理程序.java:45) 在 com.datastax.driver.core.请求手 $1.run(RequestHandler.java:374) at java.util.concurrent.ThreadPoolExecutor.runWorker(未知来源) at java.util.concurrent.ThreadPoolExecutor$Worker.run(未知来源) at java.lang.Thread.run(未知来源)

我被困在这里了。请帮助我。提前感谢。

共有1个答案

海新霁
2023-03-14

如果我是你,我可能会重新评估创建一个列标题70k的表。您的分区键P: PdmarticleID和完整主键(P: PdmarticleID,P: Language ageID)是您能够用来获取结果的仅有的两条信息。因此,将这些其他信息显式存储在列中并不能为您带来任何好处。

一个集合(例如地图)可以容纳64k个项目,但有一些其他限制(参见 http://wiki.apache.org/cassandra/CassandraLimitations)。有没有办法拆分列,以便可以创建多个表,其中一些信息存储在一个表中,一些信息存储在另一个表中?

 类似资料:
  • 我在让Spark Cassandra连接器在Scala中工作时遇到问题。 我正在使用这些版本: 斯卡拉 2.10.4 火花芯 1.0.2 卡桑德拉-节俭 2.1.0 (我安装的卡桑德拉是 v2.1.0) cassandra-clientutil 2.1.0 卡桑德拉驱动器核心 2.0.4 (推荐用于连接器? 火花-卡桑德拉-连接器 1.0.0 我可以连接并与卡桑德拉(没有火花)交谈,我可以与火花(

  • 当我尝试从Scala应用程序通过幻影插入卡桑德拉时,我收到以下错误代码。 Cassandra版本捆绑了:dsc-cassandra-3.0.1 [错误](run-main-0)com . datas tax . driver . core . exceptions . nohostavailableexception:尝试查询的所有主机都失败(尝试:localhost/127 . 0 . 0 .

  • 我有一个Cassandra的单节点实例。我一直在使用Java中的datastax驱动程序使用批处理语句向其中插入大量数据。 在插入过程中的某个点之后,我会看到一个NoHost可用异常,但是我仍然可以通过cql连接到节点并执行语句。Cassandra 日志警告我,批处理太大,当我将大小降低到建议的水平时,我仍然收到相同的错误,并且 Cassandra 日志文件中似乎没有其他错误。 以前有人遇到过这个

  • 我们有一个有7个节点的集群,我们使用datastax java驱动程序连接到集群。问题是我得到的是常量NoHostAvailableException,如下所示: 原因:com.datastax.driver.core.exceptions.noHostAvailableException:所有尝试查询的主机都失败了(尝试:/172.31.7.243:9042(com.datastax.drive

相关问答

相关文章

相关阅读