淘先锋技术网

首页 1 2 3 4 5 6 7
  1. 出现错误前进行的操作。设置hive计算引擎设置为spark,并添加了一些配置项
    set spark.executor.memory=4g;
    set spark.yarn.executor.memoryOverhead=4096;
    set hive.exec.parallel = true;
    set hive.execution.engine=spark;
    
  2. 日志输出
    =================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=================
    
  3. 原因分析
    看到网上有的说是版本不匹配,但是这里我用的是阿里云的EMR,暂时排除这个原因。
    继续搜索,看到http://blog.sina.com.cn/s/blog_6dd718930102z2un.html这个文章,文章中分析的原因是集群资源满了之后,新开job无法获取资源时就会抛出这个错误。我查看了当时集群资源占用情况后发现job运行时集群资源确实被占满,于是采取文章中的方法,设置spark session的超时时间为15分钟
    set hive.spark.client.server.connect.timeout=900000;
    但是这个也不能完美解决,后来又出现了一次这个错误。解决的方法可以是
    1. 继续增加超时时间。
    2. 或者更改计算引擎为tez,因为相较于spark,tez能够及时的释放资源,重用container,节省调度时间,对内存的资源要求率不高; 而spark如果存在迭代计算时,container一直占用资源(这个也是看别的介绍这样说的)set hive.execution.engine=tez;
    3. 将job执行期间的其它作业挪到其它时间点。

资料:

spark与tez比较
https://blog.csdn.net/w892824196/article/details/102465885