Urllib3.Exceptions.ReadTimeoutError: HTTPSConnectionPool(host='my-opensearch-domain.com', port=443): время ожидания чтенPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Urllib3.Exceptions.ReadTimeoutError: HTTPSConnectionPool(host='my-opensearch-domain.com', port=443): время ожидания чтен

Сообщение Anonymous »

Я запускаю скрипт Python, который массово индексирует документы в домен OpenSearch. Иногда массовые запросы завершаются с ошибкой ReadTimeoutError, как показано ниже:
Traceback (most recent call last):
File "/.../urllib3/connectionpool.py", line 536, in _make_request
response = conn.getresponse()
...
urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='my-opensearch-domain.com', port=443): Read timed out. (read timeout=15)

During handling of the above exception, another exception occurred:

requests.exceptions.ReadTimeout: HTTPSConnectionPool(host='my-opensearch-domain.com', port=443): Read timed out. (read timeout=15)

Я периодически наблюдаю эти тайм-ауты во время операций индексирования _bulk. Некоторые пакеты выполняются успешно, а другие истекают по истечении времени ожидания чтения по умолчанию.
Что я пробовал:
• Убедиться в стабильности моего интернет-соединения.
• Запуск меньшего пакета. размеры (например, 100 документов одновременно).
• Подтверждено, что кластер OpenSearch работоспособен и имеет достаточно ресурсов.
• Проверено, что индексирование работает большую часть времени, за исключением случаев большой нагрузки.
Вопросы:
• Как я могу предотвратить эти периодические исключения ReadTimeoutError?
• Есть ли параметры конфигурации (тайм-ауты, повторные попытки), которые я могу настроить в клиенте OpenSearch Python или библиотеке запросов?
• Существуют ли передовые методы выполнения больших заданий массового индексирования в OpenSearch?
Любые рекомендации по устранению этих тайм-аутов или передовые методы обработки больших заданий массового индексирования будут полезны. оценил.
import json
import logging
import time
import boto3
from requests_aws4auth import AWS4Auth
from opensearchpy import OpenSearch, RequestsHttpConnection

# Configure basic logging (ERROR only to reduce verbosity)
logger = logging.getLogger(__name__)
logger.setLevel(logging.ERROR)

# Configuration (use placeholders, no PII)
AWS_REGION = "us-east-1" # Replace as needed
OPENSEARCH_ENDPOINT = "your-opensearch-domain.us-east-1.es.amazonaws.com" # Replace with your endpoint
INDEX_NAME = "test-index"

def create_opensearch_client(timeout=15, max_retries=3, pool_maxsize=10):
session = boto3.Session(region_name=AWS_REGION)
credentials = session.get_credentials()
awsauth = AWS4Auth(
credentials.access_key,
credentials.secret_key,
AWS_REGION,
"es",
session_token=credentials.token,
)

return OpenSearch(
hosts=[{"host": OPENSEARCH_ENDPOINT, "port": 443}],
http_auth=awsauth,
use_ssl=True,
verify_certs=True,
timeout=timeout,
max_retries=max_retries,
retry_on_timeout=True,
connection_class=RequestsHttpConnection,
pool_maxsize=pool_maxsize,
)

def bulk_index_docs(opensearch_client, docs, batch_size=100):
# Index documents in batches
for i in range(0, len(docs), batch_size):
batch = docs[i:i+batch_size]
bulk_body = []
for doc in batch:
doc_id = doc.get("id", f"doc_{i}")
bulk_body.append({"index": {"_index": INDEX_NAME, "_id": doc_id}})
bulk_body.append(doc)

try:
response = opensearch_client.bulk(body=bulk_body)
if response.get("errors"):
logger.error("Some documents failed to index.")
else:
# In a minimal reproducible example, we won't log successes to stdout
pass
except Exception as e:
logger.error(f"Bulk indexing failed: {str(e)}")

def main():
# Minimal example documents
docs = [
{"id": "1", "name": "Alice", "updated_at": "2024-12-17T10:00:00Z"},
{"id": "2", "name": "Bob", "updated_at": "2024-12-17T10:05:00Z"},
]

client = create_opensearch_client(timeout=15, max_retries=3, pool_maxsize=5)
bulk_index_docs(client, docs, batch_size=1)

if __name__ == "__main__":
main()


Подробнее здесь: https://stackoverflow.com/questions/792 ... search-dom
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»