最近几天在写SQL脚本使用DS进行调度的时候,跑成功的概率极其的小,今天跑了二十多个脚本,只跑成功了两个,而且总是报错 :
execute sql error: SQL task prepareStatementAndBind error,无法将SQL进行转换
当跑成功的时候查看日志是:
prepare statement replace sql ,这里成功的将SQL进行了转换
SQL task prepareStatementAndBind error:

查阅资料之后得知可能是hivesever2没有连接,公司用的是1.2版本的Hive,已经配置了hiveserver2,这就让我头疼了。公司服务器什么的都部署到了华为云上,HA集群配置了三台,一查看结果有两台服务器有问题,果断将服务器重启,结果还是没有用。又在GitHub上问题查询得到可能是 "hive.server2.thrift.max.worker.threads" and "hive.metastore.client.socket.timeout"这两个的配置问题。
hive.server2.thrift.max.worker.threads:在这里我将DS阈值设置到了1000,原来是500,因为可能跑的脚本多了,资源不释放什么的,调整完成之后保存重启。
hive.metastore.client.socket.timeout:在这里将时间设置到了3600s,即60分钟,保证任务最终能够将资源释放。
未修改配置之前,几乎全是执行失败

修改配置之后,都可以执行成功

在对以上两个配置调整完成之后,完美的解决了DS跑脚本出错的问题。
作者在使用DS进行SQL脚本调度时遇到低成功率和错误,经排查发现是HiveServer2版本不匹配及配置问题。通过调整hive.server2.thrift.max.worker.threads和hive.metastore.client.socket.timeout配置,成功解决了DS脚本执行失败的问题。
1404





