- 出现错误前进行的操作。设置hive计算引擎设置为spark,并添加了一些配置项
set spark.executor.memory=4g; set spark.yarn.executor.memoryOverhead=4096; set hive.exec.parallel = true; set hive.execution.engine=spark;
- 日志输出
=================JOB OUTPUT BEGIN================= Logging initialized using configuration in file:/etc/ecm/hive-conf-2.3.5- 1.0.8/hive-log4j2.properties Async: true OK Time taken: 1.465 seconds FAILED: SemanticException Failed to get a spark session: org.apache.hadoop.hive.ql.metadata.HiveException: Failed to create spark client. =================JOB OUTPUT END=================
- 原因分析
看到网上有的说是版本不匹配,但是这里我用的是阿里云的EMR,暂时排除这个原因。
继续搜索,看到http://blog.sina.com.cn/s/blog_6dd718930102z2un.html这个文章,文章中分析的原因是集群资源满了之后,新开job无法获取资源时就会抛出这个错误。我查看了当时集群资源占用情况后发现job运行时集群资源确实被占满,于是采取文章中的方法,设置spark session的超时时间为15分钟
set hive.spark.client.server.connect.timeout=900000;
但是这个也不能完美解决,后来又出现了一次这个错误。解决的方法可以是- 继续增加超时时间。
- 或者更改计算引擎为tez,因为相较于spark,tez能够及时的释放资源,重用container,节省调度时间,对内存的资源要求率不高; 而spark如果存在迭代计算时,container一直占用资源(这个也是看别的介绍这样说的)
set hive.execution.engine=tez;
- 将job执行期间的其它作业挪到其它时间点。
资料:
spark与tez比较
https://blog.csdn.net/w892824196/article/details/102465885