最近几天在写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跑脚本出错的问题。