【问题标题】:OperationTimedOut: errors={}, last_host=127.0.0.1OperationTimedOut:错误={},last_host=127.0.0.1
【发布时间】:2016-01-23 06:05:54
【问题描述】:

我正在使用单节点 Cassandra,我打算运行一些查询以检查响应时间。在某些查询中,执行 10 秒后我会出现以下错误:

OperationTimedOut: errors = {}, last_host = 127.0.0.1

所以我运行了以下命令:

sudo gedit /usr/bin/cqlsh.py

并更改cqlsh.py文件:

# cqlsh should run correctly when run out of a Cassandra source tree,
# out of an unpacked Cassandra tarball, and after a proper package install.
cqlshlibdir = os.path.join(CASSANDRA_PATH, 'pylib')
if os.path.isdir(cqlshlibdir):
    sys.path.insert(0, cqlshlibdir)

from cqlshlib import cql3handling, cqlhandling, pylexotron, sslhandling
from cqlshlib.displaying import (ANSI_RESET, BLUE, COLUMN_NAME_COLORS, CYAN,
                                 RED, FormattedValue, colorme)

from cqlshlib.formatting import (DEFAULT_DATE_FORMAT, DEFAULT_NANOTIME_FORMAT,
                                 DEFAULT_TIMESTAMP_FORMAT, DateTimeFormat,
                                 format_by_type, format_value_utype,
                                 formatter_for)

from cqlshlib.tracing import print_trace, print_trace_session
from cqlshlib.util import get_file_encoding_bomsize, trim_if_present

DEFAULT_HOST = '127.0.0.1'
DEFAULT_PORT = 9042
DEFAULT_CQLVER = '3.3.1'
DEFAULT_PROTOCOL_VERSION = 4
DEFAULT_CONNECT_TIMEOUT_SECONDS = 240

DEFAULT_FLOAT_PRECISION = 5
DEFAULT_MAX_TRACE_WAIT = 300

但是,当我再次尝试运行查询时,cql 在 10 秒后返回相同的错误:

OperationTimedOut: errors = {}, last_host = 127.0.0.1

我必须怎么做才能使查询没有回答超时?

【问题讨论】:

    标签: python performance cassandra timeout cql3


    【解决方案1】:

    最新版本的 cassandra 允许您在使用时指定 cqlsh 超时,而不必编辑您的 cqlshrc 文件。

    cqlsh --request-timeout <your-timeout>

    【讨论】:

      【解决方案2】:

      你是在 cqlsh 中执行这些查询吗?

      如果是这样,您将遇到客户端请求超时(不是连接超时,也不是服务器端读取请求超时)。

      您可以通过在 ~/.cassandra/cqlshrc 中设置一个来更改默认超时:

      [connection]
      client_timeout = 20
      # Can also be set to None to disable:
      # client_timeout = None
      

      更多详情请参阅https://issues.apache.org/jira/browse/CASSANDRA-7516

      我从另一条评论中看到您已经知道分页。这将是最好的方法,因为它不需要您在数据层和应用层将整个结果集编组到内存中。

      【讨论】:

      • 我应该在 ~/.cassandra/cqlshrc 中更改默认超时的目录是什么?我找不到...
      • 我不打算使用“分页”,因为我正在对 RDBMS 和 Cassandra 进行查询性能比较。我打算获取查询的完整结果并检查响应时间...使用“分页”选项我认为这是不可能的...
      • 你可以把它放在指定的路径(~/.cassandra/cqlshrc),或者在cqlsh命令行中指定一个备用路径:github.com/apache/cassandra/blob/cassandra-2.2.3/bin/…
      【解决方案3】:

      您会看到一些响应告诉您如何提高各种超时,但真正的答案是您几乎从不想提高这些超时,因为如果您有一个真实的数据集,您将杀死您的服务器(或删除请求/突变)具有大量长时间运行的查询。与大型、长时间运行的查询相比,您最好使用分页和更多短期运行的查询。

      【讨论】:

      • 我需要在基准测试时为交互式检查设置超时时间。所以“真正的答案”在旁观者的眼中...... ;-)
      【解决方案4】:

      您必须更改cassandra.yaml 文件中的read_request_timeout_in_ms 参数。然后重启 Cassandra。

      【讨论】:

      • 我已将 [read_request_timeout] 更改为 '5000000' 并且错误仍在继续。我正在使用一个节点,然后我想更改 'cqlsh.py' 文件应该可以解决问题,但不是...
      • 您必须编辑的 cassandra.yaml 文件是节点之一,而不是 cqlsh 客户端之一。是你做的吗?你重启了节点吗?
      • 我只是在包含 1000 万条记录的一系列列中进行一些测试。如果我运行查询'select * from tail_by_time',10 秒后我会出现该错误。如果我对列族“分页”,则查询以 100 行为一组运行。但我想要完整的结果来检查响应时间......
      猜你喜欢
      • 2016-05-25
      • 2016-12-07
      • 2015-09-24
      • 2015-12-10
      • 2016-10-11
      • 2016-09-16
      • 2016-01-09
      • 2014-08-01
      • 2017-07-06
      相关资源
      最近更新 更多