问题 : Python 通过 Impyla 连接 Impala 时,如果集群资源较为紧张,会经常出现连接超时的错误,即 socket.timeout: timed out

解决办法 : 编辑 thriftpy/transport/socket.py 文件,找到 146 行 TServerSocket 下的 __init__ 函数,将 client_timeout 参数从 3000 修改为 None:

class TServerSocket(object):
    """Socket implementation for server side."""
    def __init__(self, host=None, port=None, unix_socket=None,
                 socket_family=socket.AF_INET, client_timeout=3000,
                 backlog=128):
class TServerSocket(object):
    """Socket implementation for server side."""
    def __init__(self, host=None, port=None, unix_socket=None,
                 socket_family=socket.AF_INET, client_timeout=None,
                 backlog=128):
class TSocket(object):
    """Socket implementation for client side."""
    def __init__(self, host=None, port=None, unix_socket=None,
                 sock=None, socket_family=socket.AF_INET,
                 socket_timeout=3000, connect_timeout=None):
class TSocket(object):
    """Socket implementation for client side."""
    def __init__(self, host=None, port=None, unix_socket=None,
                 sock=None, socket_family=socket.AF_INET,
                 socket_timeout=60000, connect_timeout=None):

在使用 connect 时设置 timeout 尽量大点,该参数是用于连接 impala 的超时参数,单位是 ms,这里设置 6000(也就是 6s)。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 yu_mingm623@163.com