【问题标题】:Cassandra CQLSH OperationTimedOut error=Client request timeout. See Session.execute[_async](timeout)Cassandra CQLSH OperationTimedOut 错误=客户端请求超时。请参阅 Session.execute[_async](超时)
【发布时间】:2017-02-18 17:44:05
【问题描述】:

我想将数据从一个 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

但这没有帮助。

【问题讨论】:

    标签: cassandra timeout cqlsh operation


    【解决方案1】:

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

    试试:

    cqlsh --request-timeout=6000
    

    或添加:

    [connection]
    request_timeout = 6000
    

    到您的~/.cassandra/cqlshrc 文件。

    【讨论】:

      【解决方案2】:

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

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

      尝试使用 cqlsh 设置 --request-timeout=6000 在这种情况下没有帮助。

      【讨论】:

        【解决方案3】:

        不清楚你在这里使用的是哪个版本的 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(我知道很多人都在使用它)

        当然 #3 和 #4 需要 DSE cassandra,但这只是为了给你一个想法。我不确定您使用的是 Apache Cassandra 还是 Datastax Enterprise Cassandra。

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

        【讨论】:

          【解决方案4】:

          您好,除了以下内容,

          1.检查墓碑
          在 cassandra 墓碑中会降低读取性能并出现以下问题 OperationTimedOut: errors={'127.0.0.1': 'Client request timeout.请参阅 Session.execute_async'},last_host=127.0.0.1
          注意
          当我们将数据插入到列中具有空值的表中时,它会创建一个墓碑。我们需要避免在表中插入空值。
          有多个选项可用,例如 spark 中的 unset(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';

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

          【讨论】:

          • 谢谢!!墓碑对我们来说确实是个问题!我们通过将 gc_grace_period 设置为较低的某些表来解决这个问题,这些表中的行经常被删除/单元格被设置为 null。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-07-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-26
          相关资源
          最近更新 更多