odps-jdbc提交MaxCompute数据源SQL报错HTTP/1.0 is not allowed

news2025/1/11 0:04:43

概述

最近负责的一款数据产品。有个功能:选择某个数据源,比如阿里云的MaxCompute数据源,然后手写SQL,点击自动生成字段(即获取前置SQL里的查询字段。前置SQL可以有drop then create table动作子句,但是最后一个子句必须得是select子句),然后选择数据的去向,比如MQ,需要指定一个已存在的topic,即实现数据推送功能。

都在做业务出海的大背景下,我们也需要部署一套环境在菲律宾马尼拉。后来,商业分析同事反馈MaxCompute数据源无法自动生成字段,并给出报错信息截图,报错信息如下:SQLException: create download session failed: instance id=, Error:ErrorCode=Local Error, ErrorMessage=Hi, HTTP/1.0 is not allowed。

自动生成字段的逻辑是:先使用alibaba druid sql-parser解析SQL获取查询字段,但是select *这种无法解析,因为sql-parser并不会执行SQL语句,只是通过AST等语法树技术去做词法和句法分析。然后代码逻辑判断select *这种情况抛异常,后续逻辑捕获异常,通过拿到数据源信息,提交执行SQL,进而拿到执行结果,最后解析结果数据。

也就是说,现在是执行这个SQL:select * from phl_anls.tmp_liujun_iview_test limit 1失败。

网络只找到一个类似帖子,但是没有什么参考价值。

问题背景,另一篇文章:连接阿里云MaxCompute数据源报错504 Gateway Time-out

排查

另外,阿里云日志查询平台,搜不到系统报错日志。初步怀疑,SQL执行提交到MC数据源,并没有拿到结果数据?也就不会有我们平台产品层面的报错日志?
在这里插入图片描述
搜索条件改为:_container_name_:cloud-*-autojob-fat-v1,发现其实有日志的:

ERROR c.x.c.a.b.s.DataProviderService- sendEmail error:org.springframework.mail.MailSendException: Mail server connection failed; nested exception is javax.mail.MessagingException: Could not connect to SMTP host: smtpdm-ap-southeast-1.aliyun.com, port: 25;
ERROR c.x.c.a.b.d.b.JdbcDataProvider- jdbc execAutoWork ??????_copy, sqlNum = 1, error: 
ERROR com.aliyun.odps.jdbc.OdpsConnection- no fallback
ERROR com.aliyun.odps.jdbc.OdpsConnection- enableLimitFallback: false
ERROR com.aliyun.odps.jdbc.OdpsConnection- create download session failed: ErrorCode=Local Error, ErrorMessage=Hi, HTTP/1.0 is not allowed
WARN  com.aliyun.odps.jdbc.OdpsConnection- task summary is empty
INFO  com.aliyun.odps.jdbc.OdpsConnection- It took me 3623 ms to run sql
INFO  com.aliyun.odps.jdbc.OdpsConnection- http://logview.odps.aliyun.com/logview/?h=http://dataworks.companyapi.com/api&p=phl_anls&i=20221216034615839gqoz6af03&token===
INFO  com.aliyun.odps.jdbc.OdpsConnection- Enabled SQL task properties: {odps.idata.useragent=JDBC-Version:3.3.6 SDK-Version:0.40.10-public}
INFO  com.aliyun.odps.jdbc.OdpsConnection- create prepared statements: SELECT * FROM phl_anls.tmp_liujun_iview_test LIMIT 1
INFO  c.xy.cloudiview.common.util.JdbcUtil- MaxCompute ds getConnection success
INFO  com.aliyun.odps.jdbc.OdpsConnection- Connect to odps project phl_anls successfully
INFO  com.aliyun.odps.jdbc.OdpsConnection- JVM timezone : Asia/Manila
INFO  com.aliyun.odps.jdbc.OdpsConnection- endpoint=http://dataworks.companyapi.com/api, project=phl_anls, schema=null
INFO  com.aliyun.odps.jdbc.OdpsConnection- ODPS JDBC driver, Version 3.3.6

也就是说,通过odps-jdbc驱动(版本为当前最新版3.3.6)方式提交SQL,MC数据源连接成功,SQL提交成功,然后阿里云会生成一个odps logview地址。但是下一步获取Summary信息失败,日志级别为Warn:task summary is empty

该死,查询日志语句应该是:_container_name_:cloud-iview-autojob-fat-v1 and content:ERROR,不能写成and content:ERROR/WARN一次性查询两种级别的日志。

与此同时,我们这边的运维同事也在与阿里云的网络支持持续沟通中,涉及到一些网络层面的专业术语,不是很懂,情况也不容乐观。

本地(国内开发机)不能测试MC数据源(部署在新加坡)的联通性:

2022-12-12 16:37:11,553 [http-nio-8082-exec-2] INFO  1- ODPS JDBC driver, Version 3.2.21
2022-12-12 16:37:11,553 [http-nio-8082-exec-2] INFO  1- endpoint=http://dataworks.companyapi.com/api, project=phl_anls
2022-12-12 16:37:11,553 [http-nio-8082-exec-2] INFO  1- JVM timezone : Asia/Shanghai
2022-12-12 16:37:11,553 [http-nio-8082-exec-2] INFO  1- charset=UTF-8, logview host=null
2022-12-12 16:45:52,139 [http-nio-8082-exec-2] ERROR c.xy.cloudiview.common.util.JdbcUtil- MaxCompute ds getConnection error: {}
com.aliyun.odps.ReloadException: 
	at com.aliyun.odps.LazyLoad.lazyLoad(LazyLoad.java:65)
	at com.aliyun.odps.Project.getProperty(Project.java:505)
	at com.aliyun.odps.jdbc.OdpsConnection.<init>(OdpsConnection.java:181)
	at com.aliyun.odps.jdbc.OdpsDriver.connect(OdpsDriver.java:59)
	at java.sql.DriverManager.getConnection(DriverManager.java:664)
	at java.sql.DriverManager.getConnection(DriverManager.java:247)
	at com.xy.cloudiview.common.util.JdbcUtil.getConnection(JdbcUtil.java:67)
	at com.xy.cloudiview.autojob.business.dataprovider.business.JdbcDataProvider.getSqlColumn(JdbcDataProvider.java:454)
	省略若干行
Caused by: com.aliyun.odps.OdpsException: 
	at com.aliyun.odps.rest.RestClient.handleErrorResponse(RestClient.java:398)
	at com.aliyun.odps.rest.RestClient.request(RestClient.java:330)
	at com.aliyun.odps.rest.RestClient.request(RestClient.java:284)
	at com.aliyun.odps.Project.reload(Project.java:332)
	at com.aliyun.odps.LazyLoad.lazyLoad(LazyLoad.java:63)
	... 62 common frames omitted

总结

跨地域,走公网+https(即:jdbc:odps:https://service.ap-southeast-1.maxcompute.aliyun.com/api?project=phl_anls) ,数据源连接成功,SQL提交执行也是成功,可以拿到数据。不过评估下来,不能走公网方式;
走内网,不管是http还是https(jdbc:odps:https://service.ap-southeast-1.maxcompute.aliyun-inc.com/api?project=phl_anls),数据源连接失败,报错:504 Gateway Time-out
于是建议走代理方式,代理后的URL,http方式(jdbc:odps:http://dataworks.companyapi.com/api?project=phl_anls),数据源连接成功;https方式(jdbc:odps:https://dataworks.companyapi.com/api?project=phl_anls),数据源连接失败,报错:504 Gateway Time-out
代理后的http方式,通过odps-jdbc提交SQL,打开 logview 链接,报错提示:
在这里插入图片描述
但是我手动调整这个logview 地址,看起来是可以拿到执行记录和执行结果的:
在这里插入图片描述

解决

问题前前后后排查长达2周。。
这中间,尝试过使用客户端odpscmd;也看过网络部署方案,涉及知识盲区:
在这里插入图片描述
后面再次排查时,发现如下日志:

ErrorCode=Local Error, ErrorMessage=Failed to create download session with tunnel endpoint http://dt.ap-southeast-1.maxcompute.aliyun-inc.com
ERROR com.aliyun.odps.jdbc.OdpsConnection- create download session for session failed: ErrorCode=Local Error, ErrorMessage=Failed to create download session with tunnel endpoint http://dt.ap-southeast-1.maxcompute.aliyun-inc.com
at com.aliyun.odps.tunnel.InstanceTunnel$DownloadSession.initiate(InstanceTunnel.java:514)
at com.aliyun.odps.tunnel.InstanceTunnel$DownloadSession.<init>(InstanceTunnel.java:253)
at com.aliyun.odps.tunnel.InstanceTunnel$DownloadSession.<init>(InstanceTunnel.java:228)
at com.aliyun.odps.tunnel.InstanceTunnel.createDownloadSession(InstanceTunnel.java:78)
at com.aliyun.odps.jdbc.OdpsStatement.getResultSet(OdpsStatement.java:688)
at com.aliyun.odps.jdbc.OdpsStatement.executeQuery(OdpsStatement.java:404)

看到一个很重要的信息:Failed to create download session with tunnel endpoint http://dt.ap-southeast-1.maxcompute.aliyun-inc.com

咨询阿里云,这个地址dt.ap-southeast-1.maxcompute.aliyun-inc.com是新加坡的odpstunnel的下载内网地址,也就是数据源连接成功(参考前面的日志),SQL提交成功(executeQuery),执行也是成功,获取结果集(getResultSet),最后需要下载结果集,于是需要createDownloadSession,就会走这个地址。

故而nginx代理需要加上odpstunnel域名(dt.ap-southeast-1.maxcompute.aliyun-inc.com)的代理。
在这里插入图片描述

另外,之前多次排查问题时,日志并没有记录到这个tunnel endpoint信息,就有点盲人摸象的感觉。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/118402.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【PS-选区速成】快速选择工具、魔棒工具、对象选择工具

目录 快速选择工具 1、位置 2、3种模式&#xff1a;新选区、添加到选区、从选区减去 3、画笔的设置参数 画笔大小&#xff1a;识别的范围 硬度&#xff1a;边缘的识别能力 间距&#xff1a;识别的连贯程度 跟【选区工具】配套使用的快捷键 1、按【ALT】减区 2、放大…

数据结构之排序【快速排序和归并排序的非递归代码实现及分析】

引言&#xff1a; 今天因为要写论文&#xff0c;所以现在有点迟了&#xff0c;并且此时是北京时间&#xff1a;2022/12/28/1:41 ,我发现晚睡我真的是专业的&#xff0c;当然睡觉我也是专业的&#xff0c;懂的都懂&#xff0c;现在有点迟加上天大寒&#xff0c;手指不可屈伸&am…

android之View的滑动

其实不管是哪种滑动方式&#xff0c;基本思想都是类似的&#xff1a;当点击事件传递到View时&#xff0c;系统记下触摸点的坐标&#xff0c;手指移动的时候&#xff0c;系统记下移动后的坐标&#xff0c;并计算出偏移量&#xff0c;并通过偏移量来修改View的坐标。 下面我们来…

黑客比程序员高在哪里?

黑客其实和一般的程序员一样&#xff0c;但是他们的关注点不一样。黑客关注的是如何破坏&#xff0c;通过这些有创造性的破坏来获取利益&#xff0c;展现自己的能力。而程序员关注的是如何创造&#xff0c;通过创造来获取利益&#xff0c;展现自己的能力。 就如同一个硬币的两…

CCF BDCI|算能赛题决赛选手说明论文-01

基于TPU平台实现人群密度估计 加速器队伍 黄显钧 个人名义参赛 中国-广东广州peterhuang0323qq.com 团队简介 加速器队伍队长&#xff1a;黄显钧&#xff0c;现任某科技公司的高级工程师&#xff0c;技术栈涉足嵌入式全栈开发&#xff0c;AI 开发等领域&#xff0c;对技术充满…

云桌面 Vscode 远程debug python

云桌面 Vscode 远程debug python1、进入云桌面2、下载VScode配套软件3、挂载本地磁盘4、安装软件4.1 安装VScode4.2 安装插件vsix文件4.3 在服务端安装vscode server5、VScode 配置6、远程调试6.1 python解释器选择6.2 设置debug7. mtu 配置Author: 沧海一阳1、进入云桌面 根据…

傻白入门芯片设计,盘点计算机体系结构顶会

目录 一、集成电路/半导体领域的三大顶会&#xff1a; &#xff08;1&#xff09;ISSCC &#xff08;2&#xff09;IEDM &#xff08;3&#xff09;VLSI 二、计算机体系结构四大顶会 &#xff08;1&#xff09;ISCA &#xff08;2&#xff09;HPCA &#xff08;3&#x…

42. 网络中的网络(NiN)

LeNet、AlexNet和VGG都有一个共同的设计模式&#xff1a;通过一系列的卷积层与汇聚层来提取空间结构特征&#xff1b;然后通过全连接层对特征的表征进行处理。 AlexNet和VGG对LeNet的改进主要在于如何扩大和加深这两个模块。 或者&#xff0c;可以想象在这个过程的早期使用全连…

利用GithubPage和Hexo搭建个人博客

title: 利用Github搭建个人博客 date: 2022-11-28 20:55:30 tags: [blogs] categories: Hexo 建立Git远程仓库 固定格式为&#xff1a;name.github.io ![]](https://img-blog.csdnimg.cn/fa9d7320d1cc422a8a79f2b41dd8458e.png) 开启Github Pages 设置github的token登陆 连接…

免费在线绘制高颜值,带填充的连贯堆叠柱状图

堆叠柱状图是我们日常工作中经常使用的一类图形。然而当分类较多时&#xff0c;堆叠柱状图看起来不是那么清晰&#xff0c;通过添加额外的连线&#xff0c;可以增加堆叠柱状图的颜值&#xff0c;给人一种连贯的感觉&#xff0c;并且能够更好地观察数据比例的变化。 图1. 堆叠柱…

1.8 异常 模块和包

文章目录了解异常异常的捕获方法为什么需要捕获异常捕获常规的异常捕获指定的异常捕获多个异常捕获所有的异常异常else异常的finally异常的传递Python模块模块的导入自定义模块测试模块\_all\_模块Python包了解异常 当我们的解释器运行时发生了一些没办法的操作&#xff0c;或…

初学Java web(十)

Filter和Listener 一.Filter 概念&#xff1a;Filter表示过滤器&#xff0c;是JavaWeb三大组件(Servlet、Filter、Listener)之一。 过滤器可以把对资源的请求拦截下来&#xff0c;从而实现一些特殊的功能。 过滤器一般完成一些通用的操作&#xff0c;比如&#xff1a;权限控…

新键盘到了,我的工作效率提升了数十倍

前言&#xff1a;快过年了&#xff0c;找到了一份满意的实习&#xff0c;正好旧的键盘坏掉了&#xff0c;最近入手了一款不错的机械键盘奖励自己。到货使用一段时间了&#xff0c;来一篇键盘开箱的博客做一个反馈。 新键盘使用感言&#xff1a;优良的键盘如图云上漫步&#xf…

白质中的BOLD信号激活检测问题

白质中BOLD信号的生理意义存在争议的两个主要原因&#xff1a; BOLD信号依赖于脑血流量CBF和脑血容量CBV&#xff0c;但是白质中的血流量和血容量比灰质中的少得多&#xff08;利用MRI估计的微血管数量&#xff1a;白质为10-192条/mm^2&#xff0c;灰质为99-761条/mm^2&#x…

【GUI界面】基于Python的WSG84三点定位系统(经纬度坐标与平面坐标转换法求解)

【GUI界面】基于Python的WSG84三点定位系统&#xff08;经纬度坐标与平面坐标转换法求解&#xff09; 方法汇总&#xff1a; blog.csdn.net/weixin_53403301/article/details/128441789 【精准三点定位求解汇总】利用Python或JavaScript高德地图开放平台实现精准三点定位&…

[开源工具]使用Fiddler简单计算QPS[新手开箱可用]

使用Fiddler简单计算QPS1.什么是QPS?2.怎么计算QPS?3.如何使用Fiddler得到一个API接口的QPS?3.1配置&#xff1a;打开Fiddler文件夹&#xff0c;点击Fiddler.exe运行fiddler进行配置4.如何得到本机的核心数?5.根据公式计算QPS?6.扩展计算单机可支撑PV(理论值)?1.什么是QP…

springboot中controller层接收参数,servers层调用mapper层,一条sql搞定排序

前言 很多小伙伴们在公司不管是测试C端产品还是B端产品&#xff0c;都会测到排序的业务需求&#xff1b;那么我们就会好奇排序是如何实现的呢&#xff1f;下面我们开始介绍代码的实现 数据库建表 我们需要创建一个书籍book表结构&#xff0c;如下图所示 CREATE TABLE book ( …

嵌入式C语言面向对象编程 --- 总结

什么是 C 语言面向对象? 在开始嵌入式 C 语言设计模式系列文章之前,先通过三篇文章讲述了如何使用 C 语言实现面向对象的三大特性,封装,继承,多态。 图片来源公众号:码农翻身 对于“面向对象”这个词语,相信很多软件工程师都不会感觉到陌生,并且很多软件工程师在刚开…

ABAP: 定义关键字的区别

问题&#xff1a;TYPE、LIKE、LIKE TABLE OF、LIKE LINE OF、TYPE TABLE OF 的区别&#xff1f; 1、TYPE 用于变量的类型定义&#xff0c;可以是表中预定义好的字段&#xff0c;也可以是C(字符)&#xff0c;F(浮点型)&#xff0c;I(整型)等。 例如&#xff1a; DATA: NAME TY…

Spring Cloud简介

一、什么是SpringCloud&#xff1f; Spring Cloud 是一系列框架的有序集合。 Spring Cloud 并没有重复制造轮子&#xff0c;它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来。 通过 Spring Boot 风格进行再封装屏蔽掉了复杂的配置和实现原理&#xff…