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



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'

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

我通过ES连接实例声明中的更改解决了这个问题。

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

这也使我能够包含多个es集群。注意:在ES_URL中,我必须使用完整的IP和端口号:[s_URL]:9200

相关内容

最新更新