Cassandra CQLSH OperationTimedOut错误=客户端请求超时。请参见Session.execute [_async](超时)

时间:2016-10-10 10:11:50

标签: cassandra timeout cqlsh operation

我想将数据从一个Cassandra集群(通过192.168.0.200到达)传输到另一个Cassandra集群(通过127.0.0.1到达)。数据为523行,但每行约为1 MB。我正在使用COPY FROM和COPY TO命令。发出COPY TO命令时出现以下错误:

Error for (8948428671687021382, 9075041744804640605):
OperationTimedOut - errors={
'192.168.0.200': 'Client request timeout. See Session.execute[_async](timeout)'},
last_host=192.168.0.200 (will try again later attempt 1 of 5).

我尝试将~/.cassandra/cqlshrc文件更改为:

[connection]
client_timeout = 5000

但这没有帮助。

4 个答案:

答案 0 :(得分:14)

您可能希望增加请求超时(默认值:10秒),而不是连接超时。

尝试:

var Row1 = [0, 0, 0, 0, 0];
var Row2 = [0, 0, 0, 0, 0];
var Row3 = [0, 0, 0, 0, 0];
var Row4 = [0, 0, 0, 0, 0];
var Row5 = [0, 0, 0, 0, 0];
var AllRows = [];

//Add Rows
AllRows.push(Row1, Row2, Row3, Row4, Row5);
console.log(AllRows);

//First Value
var SV1 = [0, (AllRows.length - 1)];
var SV2 = [0, (AllRows.length - 1)];

var GetSV1 = Math.floor(Math.random()*(SV1.length - 1));
var GetSV2 = Math.floor(Math.random()*(SV2.length - 1));
AllRows[GetSV1][GetSV2] = 1;

var Steps = 1;
var PD = "false";
var RV1 = null;
var RV2 = null;
while(PD == "false"){
    RV1 = Math.floor(Math.random()*(AllRows.length - 1));
    RV2 = Math.floor(Math.random()*(AllRows.length - 1));
    if(AllRows[RV1][RV2] == AllRows[GetSV1][GetSV2] || AllRows[RV1][RV2] == "X"){
        continue;
    } else {
        AllRows[RV1][RV2] = 1;
    }

    if(AllRows[0][0] == 1){
        if(Steps >= 1 && AllRows[0][1] == 1){
            AllRows[1][0] = "X";
            Steps++;
            continue;
        } else if(Steps >= 1 && AllRows[1][0] == 1){
            AllRows[0][1] = "X";
            Steps++;
            continue;
        } else{
            AllRows[0][1] = 0;
            AllRows[1][0] = 0;
            AllRows[GetSV1][GetSV2] = 0;
        } 
        if(Steps >= 2 && AllRows[0][2] == 1){
            AllRows[1][1] = "X";
            Steps++;
            continue;
        } else if(Steps >= 2 && AllRows[1][1] == 1){
            AllRows[0][2] = "X";
            AllRows[2][0] = "X";
            Steps++;
            continue;
        } else if(Steps >= 2 && AllRows[2][0] == 1){
            AllRows[1][1] = "X";
            Steps++;
            continue;
        } else{
            AllRows[0][2] = 0;
            AllRows[1][1] = 0;
            AllRows[2][0] = 0;
            AllRows[GetSV1][GetSV2] = 0;
        }
        if(Steps >= 3 && AllRows[0][3] == 1){
            AllRows[1][2] = "X";
            Steps++;
            continue;
        } else if(Steps >= 3 && AllRows[1][2] == 1){
            AllRows[0][3] = "X";
            AllRows[2][1] = "X";
            Steps++;
            continue;
        } else if(Steps >= 3 && AllRows[2][1] == 1){
            AllRows[3][0] = "X";
            AllRows[1][2] = "X";
            Steps++;
            continue;
        } else if(Steps >= 3 && AllRows[3][0] == 1){
            AllRows[2][1] = "X";
            Steps++;
            continue;
        }  else{
            AllRows[0][3] = 0;
            AllRows[1][2] = 0;
            AllRows[2][1] = 0;
            AllRows[3][0] = 0;
            AllRows[GetSV1][GetSV2] = 0;
        }
        if(Steps >= 4 && AllRows[0][4] == 1){
            AllRows[1][3] = "X";
            Steps++;
            continue;
        } else if(Steps >= 4 && AllRows[1][3] == 1){
            AllRows[0][4] = "X";
            AllRows[2][2] = "X";
            Steps++;
            continue;
        } else if(Steps >= 4 && AllRows[2][2] == 1){
            AllRows[3][1] = "X";
            AllRows[1][3] = "X";
            Steps++;
            continue;
        } else if(Steps >= 4 && AllRows[3][1] == 1){
            AllRows[2][2] = "X";
            AllRows[4][0] = "X";
            Steps++;
            continue;
        } else if(Steps >= 4 && AllRows[4][0] == 1){
            AllRows[3][1] = "X";
            PD = null;
        } else{
            AllRows[0][4] = 0;
            AllRows[1][3] = 0;
            AllRows[2][2] = 0;
            AllRows[3][1] = 0;
            AllRows[4][0] = 0;
            AllRows[GetSV1][GetSV2] = 0;
        }
        if(Steps >= 5 && AllRows[1][4] == 1){
            AllRows[2][3] = "X";
            Steps++;
            continue;
        } else if(Steps >= 5 && AllRows[2][3] == 1){
            AllRows[1][4] = "X";
            AllRows[3][2] = "X";
            Steps++;
            continue;
        } else if(Steps >= 5 && AllRows[3][2] == 1){
            AllRows[4][1] = "X";
            AllRows[2][3] = "X";
            Steps++;
            continue;
        } else if(Steps >= 5 && AllRows[4][1] == 1){
            AllRows[3][2] = "X";
            PD = null;
        } else{
            AllRows[1][4] = 0;
            AllRows[2][3] = 0;
            AllRows[3][2] = 0;
            AllRows[4][1] = 0;
            AllRows[GetSV1][GetSV2] = 0;
        }
        if(Steps >= 6 && AllRows[2][4] == 1){
            AllRows[3][3] = "X";
            Steps++;
            continue;
        } else if(Steps >= 6 && AllRows[3][3] == 1){
            AllRows[2][4] = "X";
            AllRows[4][2] = "X";
            Steps++;
            continue;
        } else if(Steps >= 6 && AllRows[4][2] == 1){
            AllRows[3][3] = "X";
            PD = null;
        } else{
            AllRows[2][4] = 0;
            AllRows[3][3] = 0;
            AllRows[4][2] = 0;
            AllRows[GetSV1][GetSV2] = 0;
        }
        if(Steps >= 7 && AllRows[3][4] == 1){
            AllRows[4][3] = "X";
            Steps++;
            continue;
        } else if(Steps >= 7 && AllRows[4][3] == 1){
            AllRows[3][4] = "X";
            PD = null;
        } else if(Steps >= 7 && AllRows[4][4] == 1){
            PD = null;
        } else{
            AllRows[3][4] = 0;
            AllRows[4][3] = 0;
            AllRows[4][4] = 0;
            AllRows[GetSV1][GetSV2] = 0;
        }
    }else{
        break;
    }
}

或添加:

cqlsh --request-timeout=6000

到您的[connection] request_timeout = 6000 文件。

答案 1 :(得分:4)

关于复制超时,正确的方法是使用已指向的PAGETIMEOUT参数。

  

将keyspace.table复制到' / dev / null' WITH PAGETIMEOUT = 10000;

在这种情况下,尝试使用cqlsh设置--request-timeout = 6000无效。

答案 2 :(得分:2)

目前尚不清楚你在这里使用哪个版本的Cassandra所以我将假设3.0.x

COPY功能很好,但并不总是最好的选择(例如,如果你有很多数据),不过对于这个,你可能想要检查cassandra中的一些timeout settings

此处的文档也会显示pagetimeout设置,可能会对您有所帮助。

可以通过多种其他方式在两个群集之间移动数据。您可以使用以下任何一项:

  1. sstableloader
  2. 其中一个驱动程序,例如java driver
  3. 使用spark将数据从一个群集复制到另一个群集like in this example
  4. 使用OpsCenter到clone a cluster
  5. cassandra bulk loader(我知道很多人要使用此功能)
  6. 当然#3和#4需要DSE cassandra,但它只是为了给你一个想法。我不确定您是使用Apache Cassandra还是Datastax Enterprise Cassandra。

    无论如何,希望这有帮助!

答案 3 :(得分:1)

嗨,除了以下内容,

1.检查墓碑
在cassandra中,逻辑删除降低了读取的性能并发生以下问题:OperationTimedOut:errors = {' 127.0.0.1':'客户端请求超时。请参阅Session.execute_async'},last_host = 127.0.0.1
注意
当我们在列中使用空值插入数据时,它会创建一个逻辑删除。我们需要避免在表格内插入空值 Spark中有多种选项,例如未设置https://docs.datastax.com/en/latest-csharp-driver-api/html/T_Cassandra_Unset.htm)和 ignoreNulls https://github.com/datastax/spark-cassandra-connector/blob/master/doc/5_saving.md)属性。 您可以使用以下命令检查表状态 nodetool tablestats keyspace1.tablename

2.删除墓碑
如果您在单个节点上工作,则可以通过更改表来删除逻辑删除 ALTER表keyspace1.tablename WITH gc_grace_seconds =' 0&#39 ;;

3.read_request_timeout_in_ms :配置cassandra.yaml文件中的值以增加读取请求的超时