用户导表到OBS报“pathobs://xxx already exists”错误
用户可新建一个不存在的OBS目录或手动删除已存在的OBS目录,再重新提交作业。删除已存在的OBS目录后,目录下的所有数据将会被删除。请谨慎执行此删除操作。
对两个表进行join操作时,提示:SQL_ANALYSIS_ERROR: Reference 't.id' is ambiguous, could be: t.id,t.id.;
出现这个提示,表示进行join操作的两个表中包含相同的字段,但是在执行命令时,没有指定该字段的归属。
例如:在表tb1和tb2中都包含字段“id”。
错误的命令:
select id from tb1 join tb2;
正确的命令:
select tb1.id from tb1 join tb2;
执行查询语句报错:The current account does not have permission to perform this operation,the current account was restricted. Restricted for no budget.
请先确认是否欠费,如有欠费请充值。
如果充值后仍然提示相同的错误,请退出账号后重新登录。
执行查询语句报错:There should be at least one partition pruning predicate on
partitioned table XX.YYY]()
原因分析:
上述报错信息说明:partitioned
table XX.YYY执行查询时,其查询条件中未使用其表分区列。
查询分区表时,查询条件中每个分区表必须包含至少一个分区列才允许执行,否则不允许执行。
解决方法:
建议用户参考如下例子查询分区表:
其中partitionedTable为分区表,partitionedColumn为分区列,查询语句为:
SELECT * FROM partitionedTable WHERE partitionedColumn = XXX
查询每个分区表时必须包含至少一个分区条件。
LOAD数据到OBS外表报错:IllegalArgumentException: Buffer size too small. size
问题描述
在Spark SQL作业中,使用LOAD DATA命令导入数据到DLI表中时报如下错误:
error.DLI.0001: IllegalArgumentException: Buffer size too small. size = 262144 needed = 2272881
或者如下错误
error.DLI.0999: InvalidProtocolBufferException: EOF in compressed stream footer position: 3 length: 479 range: 0 offset: 3 limit: 479 range 0 = 0 to 479 while trying to read 143805 bytes
问题原因
上述报错可能原因是当前导入的文件数据量较大,同时因为spark.sql.shuffle.partitions参数设置的并行度过大,导致缓存区大小不够而导入数据报错。
解决方案
建议可以尝试调小spark.sql.shuffle.partitions参数值来解决缓冲区不足问题。具体该参数设置步骤如下:
1.登录DLI管理控制台,单击“作业管理 > SQL作业”,对应SQL作业行的操作列,单击“编辑”按钮,跳转到“SQL编辑器”。
2.在“SQL编辑器”中,单击“设置”,参考如下图配置添加参数。
3.重新执行作业。
SQL作业运行报错:DLI.0002 FileNotFoundException
问题现象
SQL作业执行报错,报错信息大致如下:
Please contact DLI service. DLI.0002: FileNotFoundException: getFileStatus on obs://xxx: status [404]
解决方案
请排查在同一时间点是否还有另外作业对当前报错作业操作的表信息有删除操作。
DLI不允许同时有多个作业在同一时间点对相同表进行读写操作,否则会造成作业冲突,导致作业运行失败。
用户通过CTAS创建hive表报schema解析异常错误
目前DLI支持hive语法创建TEXTFILE、SEQUENCEFILE、RCFILE、ORC、AVRO、PARQUET文件类型的表,如果用户CTAS建表指定的文件格式为AVRO类型,而且直接使用数字作为查询语句(SELECT)的输入,如“CREATE TABLE tb_avro STORED AS AVRO AS SELECT 1”则会报schema解析异常。
此问题的原因是如果不指定列名,则会把SELECT后的内容同时作为列名和插入值,而AVRO格式的表不支持列名为数字,所以会报解析schema异常错误。
用户可以通过“CREATE TABLE tb_avro STORED AS AVRO AS SELECT 1 AS colName”指定列名的方式解决该问题,或者将存储格式指定为除AVRO以外的其它格式。
在DataArts Studio上运行DLI SQL脚本,执行结果报org.apache.hadoop.fs.obs.OBSIOException错误
问题现象
在DataArts Studio上运行DLI SQL脚本,执行结果的运行日志显示语句执行失败,错误信息为:
DLI.0999: RuntimeException: org.apache.hadoop.fs.obs.OBSIOException: initializing on obs://xxx.csv: status [-1] - request id
[null] - error code [null] - error message [null] - trace :com.obs.services.exception.ObsException: OBS servcie Error Message. Request Error:
...
Cause by: ObsException: com.obs.services.exception.ObsException: OBSs servcie Error Message. Request Error: java.net.UnknownHostException: xxx: Name or service not known
问题根因
第一次执行DLI SQL脚本,用户没有在DLI控制台上同意隐私协议导致在DataArts Studio运行SQL脚本报错。
解决方案
1.登录DLI控制台,选择“SQL编辑器”,输入任意执行一个SQL语句,比如“select 1”。
2.弹出隐私协议后,勾选“同意以上隐私协议”,单击“确定”。
说明该隐私协议只需要在第一次执行时同意即可,后续再次运行不再会弹出和确认。
3.重新在DataArts Studio上运行DLI SQL脚本,脚本运行正常。
使用CDM迁移数据到DLI,迁移作业日志上报UQUERY_CONNECTOR_0001:Invoke DLI service api failed错误
问题现象
在CDM迁移数据到DLI,迁移作业提交后,在CDM作业迁移日志中查看作业执行失败,具体日志有如下报错信息:
org.apache.sqoop.common.SqoopException: UQUERY_CONNECTOR_0001:Invoke DLI service api failed, failed reason is %s.
at org.apache.sqoop.connector.uquery.intf.impl.UQueryWriter.close(UQueryWriter.java:42)
at org.apache.sqoop.connector.uquery.processor.Dataconsumer.run(Dataconsumer.java:217)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
问题原因
在CDM界面创建迁移作业,配置DLI目的连接参数时,“资源队列”参数错误选成了DLI的“通用队列”,应该选择DLI的“SQL队列”。
解决方案
1.登录DLI管理控制台,选择“队列管理”,在队列管理界面查看是否有“SQL队列”类型的队列。
−是,执行3。
−否,执行2购买“SQL队列”类型的队列。
2.单击“购买队列”创建队列,其中队列类型选择“SQL队列”,选择其他参数后提交创建。
3.在CDM侧重新配置迁移作业的DLI目的连接参数,其中资源队列”参数选择已创建的DLI“SQL队列”。
4.CDM重新提交迁移作业,查看作业执行日志。
SQL作业访问报错:File not Found
问题现象
执行SQL作业访问报错:File not Found。
解决措施
文件报错找不到,一般是读写冲突产生的,建议查询一下SQL查询报错表的时候,是否有作业正在覆盖写对应数据。
SQL作业访问报错:DLI.0003: AccessControlException XXX
问题现象
SQL作业访问报错:DLI.0003: AccessControlException XXX。
解决措施
请查看下AccessControlException写的OBS桶,确认当前账号是否有访问桶的权限。
SQL作业访问外表报错:DLI.0001: org.apache.hadoop.security.AccessControlException: verifyBucketExists on}: status [403]
问题现象
SQL作业访问外表报错:DLI.0001: org.apache.hadoop.security.AccessControlException: verifyBucketExists on {{桶名}}: status [403]。
解决措施
当前账号没有访问该外表所在OBS桶的权限,请添加相应OBS权限再执行该查询。
执行SQL语句报错:The current account does not have permission to perform this operation,the current account was restricted. Restricted for no budget.
问题现象
执行SQL语句报错:The current account does not have permission to perform this operation,the current account was restricted. Restricted for no budget。
解决措施
请先确认帐号否欠费,如帐号欠费请续费后重试。
如果续费后重试仍然提示相同的错误,请退出账号后重新登录。