大数据计算MaxCompute pyodps中使用open_reader会不定时报 IncompleteRead 是怎么回事呢?Exception requests.packages.urllib3.exceptions.ProtocolError: ProtocolError('Connection broken: IncompleteRead(6584 bytes read, 1600 more expected)', IncompleteRead(6584 bytes read, 1600 more expected)) in 'odps.tunnel.io.reader_c.BaseTunnelRecordReader._set_string' ignored
Traceback (most recent call last):
File "", line 132, in
compute_save_WPP()
File "", line 59, in compute_save_WPP
for record in reader:
File "/usr/lib64/python2.7/site-packages/odps/models/instance.py", line 796, in iter
for record in self.read():
File "/usr/lib64/python2.7/site-packages/odps/models/instance.py", line 819, in read
for record in reader[::step]:
File "/usr/lib64/python2.7/site-packages/odps/readers.py", line 88, in _iter
record = next(self)
File "odps/tunnel/io/reader_c.pyx", line 428, in odps.tunnel.io.reader_c.TunnelRecordReader.next (odps/tunnel/io/reader_c.cpp:8049)
record = self.read()
File "odps/tunnel/io/reader_c.pyx", line 330, in odps.tunnel.io.reader_c.BaseTunnelRecordReader.read (odps/tunnel/io/reader_c.cpp:7529)
cpdef read(self):
File "odps/tunnel/io/reader_c.pyx", line 400, in odps.tunnel.io.reader_c.BaseTunnelRecordReader.read (odps/tunnel/io/reader_c.cpp:7442)
six.reraise(*self._last_error)
File "odps/tunnel/io/reader_c.pyx", line 165, in odps.tunnel.io.reader_c.BaseTunnelRecordReader._read_string (odps/tunnel/io/reader_c.cpp:3813)
val = self._reader.read_string()
File "odps/tunnel/pb/decoder_c.pyx", line 101, in odps.tunnel.pb.decoder_c.Decoder.read_string (odps/tunnel/pb/decoder_c.cpp:2800)
read_bytes = self._stream.read(size)
File "/usr/lib64/python2.7/site-packages/odps/tunnel/io/stream.py", line 248, in read
content = self._internal_read(size_left)
File "/usr/lib64/python2.7/site-packages/odps/tunnel/io/stream.py", line 274, in _internal_read
self._refill_buffer()
File "/usr/lib64/python2.7/site-packages/odps/tunnel/io/stream.py", line 295, in _refill_buffer
content = self._buffer_next_chunk()
File "/usr/lib64/python2.7/site-packages/odps/tunnel/io/stream.py", line 314, in _buffer_next_chunk
return self._read_block()
File "/usr/lib64/python2.7/site-packages/odps/tunnel/io/stream.py", line 319, in _read_block
content = self._input.raw.read(self.READ_BLOCK_SIZE, decode_content=True)
File "/usr/lib64/python2.7/site-packages/requests/packages/urllib3/response.py", line 324, in read
flush_decoder = True
File "/usr/lib64/python2.7/contextlib.py", line 35, in exit
self.gen.throw(type, value, traceback)
File "/usr/lib64/python2.7/site-packages/requests/packages/urllib3/response.py", line 250, in _error_catcher
raise ProtocolError('Connection broken: %r' % e, e)
ProtocolError: ('Connection broken: IncompleteRead(6584 bytes read, 1600 more expected)', IncompleteRead(6584 bytes read, 1600 more expected))2023-10-07 13:59:49 文件【Postman-win64-5.1.2-Setup.exe】发送成功。2023-10-09 10:52:04
cn-beijing-youzheng-d01
这个问题可能是由于在读取数据时,连接被意外中断导致的。你可以尝试以下方法解决这个问题:
open_reader
函数中设置buffer_size
参数来实现这一点。例如:from odps import ODPS
# 创建ODPS实例
odps = ODPS(access_id, access_key, project)
# 设置读取数据的缓冲区大小
buffer_size = 1024 * 1024 * 10 # 10MB
# 使用open_reader读取数据
reader = odps.open_reader(table, columns, buffer_size=buffer_size)
# 遍历数据
for record in reader:
# 处理数据
pass
pandas
)来读取数据,看看是否能够正常读取。如果可以,那么问题可能出在MaxCompute的Python SDK上。这个错误信息通常表示在读取数据时发生了问题。可能的原因包括:
数据源的问题:可能是数据源的连接出现问题,或者数据源中的数据不完整。
网络问题:如果你的数据源位于远程服务器上,那么可能是网络连接出现了问题。
数据格式问题:可能是数据格式与你预期的格式不一致,导致读取数据时出现了错误。
系统资源问题:可能是系统的内存或磁盘空间不足,导致无法读取数据。
你可以尝试以下步骤来解决这个问题:
检查数据源的连接是否正常。
检查网络连接是否正常。
检查数据的格式是否正确。
检查系统的内存和磁盘空间是否充足。
这种报错一般是网络抖动,如果endpoint是公网,换成内网或者vpc 。
再增加重试机制,没有其他办法,好像不是公有云的环境。 找驻场问问吧,此回答整理自钉群“MaxCompute开发者社区2群”
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
MaxCompute(原ODPS)是一项面向分析的大数据计算服务,它以Serverless架构提供快速、全托管的在线数据仓库服务,消除传统数据平台在资源扩展性和弹性方面的限制,最小化用户运维投入,使您经济并高效的分析处理海量数据。