Ошибка ReadTimeOut при записи writer.write (xlist) в соединение odps Alibaba.Любое предложение? - PullRequest
0 голосов
/ 18 октября 2018
from odps import ODPS
from odps import options
import csv
import os
from datetime import timedelta, datetime 

options.sql.use_odps2_extension = True
options.tunnel.use_instance_tunnel = True
options.connect_timeout = 60
options.read_timeout=130
options.retry_times = 7
options.chunk_size = 8192*2

odps = ODPS('id','secret','project', endpoint ='endpointUrl')
table = odps.get_table('eventTable')

def uploadFile(file):
    with table.open_writer(partition=None) as writer:
        with open(file, 'rt') as csvfile:
                rows = csv.reader(csvfile, delimiter='~')
                for final in rows:
                    writer.write(final)
    writer.close();

uploadFile('xyz.csv')       

Предположим, я передаю количество файлов в файле uploadFile, вызываемых один за другим из каталога. Чтобы подключить облако alibaba из python для переноса данных в таблицу максимальных вычислений через облако.Когда я запускаю этот код, служба останавливается либо после продолжительной работы, либо в ночное время.Он сообщает мне об ошибке Read Time Out Error в строке writer.write (final).

Ошибка:

Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/urllib3/response.py", line 226, in _error_catcher
    yield
  File "/usr/lib/python3/dist-packages/urllib3/response.py", line 301, in read
    data = self._fp.read(amt)
  File "/usr/lib/python3.5/http/client.py", line 448, in read
    n = self.readinto(b)
  File "/usr/lib/python3.5/http/client.py", line 488, in readinto
    n = self.fp.readinto(b)
  File "/usr/lib/python3.5/socket.py", line 575, in readinto
    return self._sock.recv_into(b)
socket.timeout: timed out

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/requests/models.py", line 660, in generate
    for chunk in self.raw.stream(chunk_size, decode_content=True):
  File "/usr/lib/python3/dist-packages/urllib3/response.py", line 344, in stream
    data = self.read(amt=amt, decode_content=decode_content)
  File "/usr/lib/python3/dist-packages/urllib3/response.py", line 311, in read
    flush_decoder = True
  File "/usr/lib/python3.5/contextlib.py", line 77, in __exit__
    self.gen.throw(type, value, traceback)
  File "/usr/lib/python3/dist-packages/urllib3/response.py", line 231, in _error_catcher
    raise ReadTimeoutError(self._pool, None, 'Read timed out.')
requests.packages.urllib3.exceptions.ReadTimeoutError: HTTPConnectionPool(host='dt.odps.aliyun.com', port=80): Read timed out.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/dataUploader.py", line 66, in <module>
    uploadFile('xyz.csv')       
  File "/dataUploader.py", line 53, in uploadFile
    writer.write(final)
  File "/usr/local/lib/python3.5/dist-packages/odps/models/table.py", line 643, in __exit__
    self.close()
  File "/usr/local/lib/python3.5/dist-packages/odps/models/table.py", line 631, in close
    upload_session.commit(written_blocks)
  File "/usr/local/lib/python3.5/dist-packages/odps/tunnel/tabletunnel.py", line 308, in commit
    in self.get_block_list()])
  File "/usr/local/lib/python3.5/dist-packages/odps/tunnel/tabletunnel.py", line 298, in get_block_list
    self.reload()
  File "/usr/local/lib/python3.5/dist-packages/odps/tunnel/tabletunnel.py", line 238, in reload
    resp = self._client.get(url, params=params, headers=headers)
  File "/usr/local/lib/python3.5/dist-packages/odps/rest.py", line 138, in get
    return self.request(url, 'get', stream=stream, **kwargs)
  File "/usr/local/lib/python3.5/dist-packages/odps/rest.py", line 125, in request
    proxies=self._proxy)
  File "/usr/lib/python3/dist-packages/requests/sessions.py", line 608, in send
    r.content
  File "/usr/lib/python3/dist-packages/requests/models.py", line 737, in content
    self._content = bytes().join(self.iter_content(CONTENT_CHUNK_SIZE)) or bytes()
  File "/usr/lib/python3/dist-packages/requests/models.py", line 667, in generate
    raise ConnectionError(e)
requests.exceptions.ConnectionError: HTTPConnectionPool(host='dt.odps.aliyun.com', port=80): Read timed out.

packet_write_wait: Connection to 122.121.122.121 port 22: Broken pipe

Это ошибка, которую я получил.Можете подсказать в чем проблема?

1 Ответ

0 голосов
/ 18 октября 2018

Тайм-аут чтения - это время ожидания чтения данных.Обычно, если серверу не удается отправить байтовые секунды после последнего байта, возникает ошибка времени ожидания чтения.

Это происходит из-за того, что сервер не может прочитать файл в течение указанного периода времени ожидания.

Здесь тайм-аут чтения был установлен равным 130 секундам, что меньше, если размер файла очень велик.

Увеличьте лимит времени ожидания со 130 секунд до 500 секунд, т. Е. С options.read_timeout=130 до options.read_timeout=500

Это решило бы вашу проблему, в то же время минимизировав время повтора с 7 до 3, т.е. options.retry_times=7 до options.retry_times=3

...