2015-07-23 3 views
4

Я пытаюсь переиндексировать с использованием клиента python Elasticsearch, используя https://elasticsearch-py.readthedocs.org/en/master/helpers.html#elasticsearch.helpers.reindex. Но я получаю следующее исключение: elasticsearch.exceptions.ConnectionTimeout: ConnectionTimeout caused by - ReadTimeoutElasticsearch Клиент Python Reindex Timedout

В StackTrace от ошибки

Traceback (most recent call last): 
    File "~/es_test.py", line 33, in <module> 
    main() 
    File "~/es_test.py", line 30, in main 
    target_index='users-2') 
    File "~/ENV/lib/python2.7/site-packages/elasticsearch/helpers/__init__.py", line 306, in reindex 
    chunk_size=chunk_size, **kwargs) 
    File "~/ENV/lib/python2.7/site-packages/elasticsearch/helpers/__init__.py", line 182, in bulk 
    for ok, item in streaming_bulk(client, actions, **kwargs): 
    File "~/ENV/lib/python2.7/site-packages/elasticsearch/helpers/__init__.py", line 124, in streaming_bulk 
    raise e 
elasticsearch.exceptions.ConnectionTimeout: ConnectionTimeout caused by - ReadTimeout(HTTPSConnectionPool(host='myhost', port=9243): Read timed out. (read timeout=10)) 

Есть в любом случае, чтобы предотвратить это исключение, кроме увеличения тайм-аут?

EDIT: питон код

from elasticsearch import Elasticsearch, RequestsHttpConnection, helpers 

es = Elasticsearch(connection_class=RequestsHttpConnection, 
        host='myhost', 
        port=9243, 
        http_auth=HTTPBasicAuth(username, password), 
        use_ssl=True, 
        verify_certs=True, 
        timeout=600) 
helpers.reindex(es, source_index=old_index, target_index=new_index) 
+0

Можете ли вы показать вам питон код? – Val

+0

@Val Я включил свой код – Hank

+0

Можете ли вы добавить параметр ['chunk_size'] (https://elasticsearch-py.readthedocs.org/en/master/helpers.html#elasticsearch.helpers.reindex) (возможно, с value = 100) в вызове 'reindex'? – Val

ответ

0

Это может происходить из-за OutOfMemoryError для Java кучи пространства, что означает, что вы не даете elasticsearch достаточно памяти для того, что вы хотите сделать. Попробуйте посмотреть на ваш /var/log/elasticsearch, если есть какие-то исключения.

https://github.com/elastic/elasticsearch/issues/2636

0

я страдаю от этой проблемы за пару дней, я изменил параметр request_timeout 30 (что составляет 30 секунд) не работает. Наконец, мне нужно отредактировать API-интерфейс stream_bulk и reindex внутри elasticsearch.py ​​

Измените параметр chunk_size с 500 по умолчанию (который обрабатывает 500 документов) на меньшее количество документов на каждую партию. Я поменял мой на 50, который отлично работал для меня. Больше нет ошибок таймаута чтения.

Защиту streaming_bulk (клиент, действия, chunk_size = 50, raise_on_error = True, expand_action_callback = expand_action, raise_on_exception = True, ** kwargs):

Защиту переиндексации (клиент, source_index, target_index, запрос = None, target_client = None, chunk_size = 50, прокручивать '5м' =, scan_kwargs = {}, bulk_kwargs = {}):