首页 文章

如何避免列表在Python3中初始化Elasticsearch连接时没有属性'startswith'?

提问于
浏览
1

self.es = Elasticsearch([{'host': kwargs['ES_URL'], 'port': 9200}]) 上面的代码生成错误:

Traceback (most recent call last):
  File "/usr/local/lib/python3.5/dist-packages/airflow/models.py", line 1633, in _run_raw_task
    result = task_copy.execute(context=context)
  File "/usr/local/lib/python3.5/dist-packages/airflow/operators/python_operator.py", line 95, in execute
    return_value = self.execute_callable()
  File "/usr/local/lib/python3.5/dist-packages/airflow/operators/python_operator.py", line 100, in execute_callable
    return self.python_callable(*self.op_args, **self.op_kwargs)
  File "/usr/local/lib/python3.5/dist-packages/pallet-0.0.0-py3.5.egg/pallet/tasks/datatable.py", line 241, in driver_de_datatable
    run_id=kwargs['run_id']
  File "/usr/local/lib/python3.5/dist-packages/pallet-0.0.0-py3.5.egg/pallet/tasks/datatable.py", line 28, in __init__
    self.es = Elasticsearch([{'host': kwargs['ES_URL'], 'port': 9200}])
  File "/usr/local/lib/python3.5/dist-packages/elasticsearch/client/__init__.py", line 170, in __init__
    self.transport = transport_class(_normalize_hosts(hosts), **kwargs)
  File "/usr/local/lib/python3.5/dist-packages/elasticsearch/transport.py", line 108, in __init__
    self.set_connections(hosts)
  File "/usr/local/lib/python3.5/dist-packages/elasticsearch/transport.py", line 157, in set_connections
    connections = list(zip(connections, hosts))
  File "/usr/local/lib/python3.5/dist-packages/elasticsearch/transport.py", line 154, in _create_connection
    return self.connection_class(**kwargs)
  File "/usr/local/lib/python3.5/dist-packages/elasticsearch/connection/http_urllib3.py", line 92, in __init__
    self.pool = pool_class(host, port=port, timeout=self.timeout, maxsize=maxsize, **kw)
  File "/usr/local/lib/python3.5/dist-packages/urllib3/connectionpool.py", line 166, in __init__
    ConnectionPool.__init__(self, host, port)
  File "/usr/local/lib/python3.5/dist-packages/urllib3/connectionpool.py", line 71, in __init__
    self.host = _ipv6_host(host).lower()
  File "/usr/local/lib/python3.5/dist-packages/urllib3/connectionpool.py", line 897, in _ipv6_host
    if host.startswith('[') and host.endswith(']'):
AttributeError: 'list' object has no attribute 'startswith'

需要注意的是,它已经成功了很长时间,但是第一次开始产生错误 .

1 回答

  • 0

    我通过改变ES'连接实例的声明来解决它 .

    我使用 self.es = Elasticsearch(kwargs['ES_URL']) 而不是 self.es = Elasticsearch([{'host': kwargs['ES_URL'], 'port': 9200}])

    这也使我能够包含多个es簇 . 注意:在ES_URL中,我必须使用完整的IP以及端口号:[es_url]:9200

相关问题