Tunnel常见错误码

本文为您介绍使用Tunnel过程中的常见错误码,帮助您了解错误码产生原因,并提供解决措施。

Tunnel常见错误码如下:

报错信息:ErrorCode=NoSuchPartition, ErrorMessage=The specified partition does not exist.

  • 产生原因

    目标分区不存在。

  • 解决措施

    执行show partitions <table_name>;命令确认分区名称正确性,或者为目标表创建新的分区。更多创建分区信息,请参见添加分区

报错信息:ErrorCode=Unauthorized, ErrorMessage=The request authorization header is invalid or missing.

  • 产生原因

    AccessKey不正确,无法通过身份校验。

  • 解决措施

    您可以进入AccessKey管理页面获取正确的AccessKey。如果AccessKey配置无误,请加入钉钉群进行反馈,并提供使用该AccessKey成功上传或下载的日志信息。

报错信息:ErrorCode=Local Error, Failed to create download session with tunnel endpoint.

  • 产生原因

    • 原因一:网络未连通。

    • 原因二:表或分区的小文件太多。

  • 解决措施

    • 原因一的解决措施:

      在报错设备的命令行窗口,使用curl命令连接报错信息中的Tunnel Endpoint,验证是否可以正常访问。

      • 如果可以正常访问,会返回如下信息。此时请跳过该步骤,根据下方原因二的解决措施进行处理。验证连通性

      • 如果无法正常访问,请检查并修改Tunnel Endpoint配置。

        公网的Tunnel Endpoint以aliyun.com结尾,云产品互联网络或VPC网络的Tunnel Endpoint以aliyun-inc.com结尾。请您根据实际业务情况配置正确的Tunnel Endpoint。更多Tunnel Endpoint信息,请参见Endpoint

        说明

        如果您通过外网设备访问云产品互联网络或VPC网络的Tunnel Endpoint,或者通过云产品互联网络或VPC网络设备访问公网的Tunnel Endpoint,有可能网络不通。

    • 原因二的解决措施:

      通过MaxCompute客户端DataWorks客户端执行desc extended命令,查看表或分区的文件数量。

      desc extended <table_name> [partition(partition_spec)];

      返回结果中的FileNum即为文件数量。当文件数量超过1000个时,需要合并小文件

      如果您的项目还使用了Instance Tunnel下载数据,同样受表文件数量影响。当文件数量过多时,就会存在超时问题。如果不需要下载SQL结果数据,可以关闭Instance Tunnel,SQL的执行过程并不受Limit参数影响,会把全表的数据都列出来。如果期望达到查询加速的效果,可以添加WHERE条件,例如查找没有NULL值的列,可以添加where xxx not null语句,生成一份临时数据,不需要全表扫描。

报错信息:ErrorCode=NoSuchProject, ErrorMessage=The specified project name does not exist.

  • 产生原因

    MaxCompute项目名称不正确或Tunnel Endopint不正确。

  • 解决措施

    • 检查并修改项目名称。

      您可以登录MaxCompute控制台,左上角切换地域后,即可在项目管理页签查看到具体的MaxCompute项目名称。

    • 检查并修改Tunnel Endpoint

      各地域各网络对应的Tunnel Endopint信息,请参见Endpoint

报错信息:ErrorCode=NoPermission, ErrorMessage=Authorization Failed [4019], You have NO privilege 'odps:Update' on.

  • 产生原因

    没有上传数据权限。

  • 解决措施

    您可以通过DataWorks的数据地图,申请目标表的Update权限,或者由项目所有者或表所有者授予表的Update权限。更多授权信息,请参见MaxCompute权限

报错信息:ErrorCode=NoPermission, ErrorMessage=Authorization Failed [4019], You have NO privilege 'odps:Download' on.

  • 产生原因

    没有下载数据权限。

  • 解决措施

    您可以通过DataWorks的数据地图,申请目标表的Download权限,或者由项目所有者或具备Super_Administrator角色的用户授予表的Download权限。更多Download授权信息,请参见Policy权限控制

报错信息:ErrorCode=NoPermission, ErrorMessage=Authorization Failed [4021], You have NO privilege 'odps:Select' on 'xxx',project 'xxx' is protected.

  • 产生原因

    MaxCompute项目设置了数据保护机制,禁止使用Tunnel下载数据。

  • 解决措施

    联系项目所有者(Project Owner)设置Exception Policy,为用户授权。更多Exception Policy信息,请参见数据流出策略一:设置Exception Policy

报错信息:ErrorCode=InvalidBlockID, ErrorMessage=The specified block id is not valid.xxxx.

  • 产生原因

    多任务并发,BlockID非法。

  • 解决措施

    减小并发度,同时您可以执行如下命令清理5天前的日志。

    tunnel purge 5;

报错信息:ErrorCode=TableModified, ErrorMessage=The specified table has been modified since the download initiated. Try initiate another download.

  • 产生原因

    下载数据过程中,表被修改了。

  • 解决措施

    需要重新创建Download Session下载数据。您可以通过如下方式查看修改记录:

报错信息:ErrorCode=StatusConflict, ErrorMessage=The download session is expired.

  • 产生原因

    下载超过24小时,导致Session过期。

  • 解决措施

    重新创建Download Session下载数据。需要注意的是:

    • Download Session如果没有主动关闭,超过24小时会自动失效。

    • 创建Download Session后,如果表被修改了,Download Session也会失效。

报错信息:ErrorCode=StatusConflict, ErrorMessage=You cannot complete the specified operation under the current upload or download status.

  • 产生原因

    • 原因一:Upload Session已经提交。

    • 原因二:表或分区内的小文件太多。

  • 解决措施

    • 原因一的解决措施:重新创建Upload Session上传数据。

    • 原因二的解决措施:合并小文件,请参见合并小文件

报错信息:ErrorCode=InvalidProjectTable, ErrorMessage=The specified project or table name is not valid or missing.

  • 产生原因

    项目名称或表名称不正确。

  • 解决措施

    检查项目名称或表名称的正确性并修改。

    您可以登录MaxCompute控制台,左上角切换地域后,即可在项目管理页签查看到具体的MaxCompute项目名称。

    您可以执行show tables;命令查看表的名称。

报错信息:ErrorCode=InvalidPartitionSpec, ErrorMessage=Error: The specified partitionspec is not valid.

  • 产生原因

    分区字段不正确或格式有误。

  • 解决措施

    您可以执行show partitions <table_name>;命令查看表的分区。检查分区字段信息,确保满足如下要求:

    • 参数中的分区列顺序要与建表语句中分区列顺序保持一致。

    • 当分区列值中有引号(pt='a'或pt="a")时,旧版本SDK没有做过引号处理,需要使用新版本的Tunnel SDK。

    • 多级分区中间有空格时,例如pt1=a, pt2=a,需要把空格删掉。

    • 多级分区需要填写所有的分区。

    • 分区名大小写要与建表语句保持一致。

报错信息:ErrorCode=InvalidRowRange, ErrorMessage=The specified row range is not valid.

  • 产生原因

    openReader的两个参数startOffset和count取值有问题。

  • 解决措施

    检查代码确保满足如下要求:

    • startOffset必须大于等于0。

    • count必须大于0。

报错信息:ErrorCode=StatusConflict, ErrorMessage=Cannot close upload now: Close Upload Session Failed.Because of Status Conflict.Current Status:critical.

  • 产生原因

    DDL操作失败,导致Upload Session状态异常。

  • 解决措施

    重新创建Upload Session。

报错信息:ErrorCode=StatusConflict, ErrorMessage=The upload|download session is expired.

  • 产生原因

    Upload Session或Download Session超过24小时,已失效。

  • 解决措施

    重新创建Upload Session或Download Session。

报错信息:ErrorCode=FlowExceeded, ErrorMessage=Your flow quota is exceeded.

请填写钉钉群申请表单加入钉钉群进行反馈。

报错信息:ErrorMessage=java.net.SocketException: Connection reset.

  • 产生原因

    常见于使用SDK编写的程序或者第三方平台通过Tunnel读取数据进行处理的过程。服务端有连接保护,打开RecordReader后长时间不读数据,服务端会断开连接,时限为300秒。图示如下。

    用法示例

    RecordReader内部有缓存,一旦用户的计算或处理逻辑较为缓慢,未能在超时时限内处理完一块缓存数据并触发下一次读取,则会出现该错误。

  • 解决措施

    优化代码处理逻辑。

报错信息:ErrorCode=Unauthorized ErrorMessage=The request authorization header is invalid or missing. Message:The signatrue is Time-Expired.

  • 产生原因

    签名的时间校验未通过。

  • 解决措施

    检查客户端系统时间,时间差不能超过15分钟。Tunnel服务端会定时NTP授时,一般是准确的。如果确定客户端系统时间没问题,请填写钉钉群申请表单加入钉钉群进行反馈。

    如果使用Tunnel SDK开发时遇到这个错误,需要保证Open Writer与写入数据之间的时间间隔不能超过15分钟,签名在Open Writer时生成。

报错信息:ErrorCode=MalformedDataStream ErrorMessage=The data stream you provided was not well-formed or did not validate against schema.

  • 产生原因

    上传数据的结构和目标表的结构不一致。

  • 解决措施

    检查上传数据的结构与目标表的结构,确保二者一致。

报错信息:ErrorCode=MethodNotAllowed, ErrorMessage=The specified method is not allowed against clustered table and partition.

  • 产生原因

    Tunnel暂时不支持Clustered Table上传。

  • 解决措施

    无。

报错信息:ErrorCode=InstanceNotTerminate, ErrorMessage=The instance does not terminate.

  • 产生原因

    下载的Instance还未运行完。

  • 解决措施

    等待Instance运行完成后再下载。