我们在使用 Spark 引擎执行 Hive 查询时收到错误。
执行spark任务失败,出现异常
'org.apache.hadoop.hive.ql.metadata.HiveException(创建失败
Spark 客户端。)' 失败:执行错误,返回代码 1
org.apache.hadoop.hive.ql.exec.spark.SparkTask
以下属性设置为使用 Spark 作为执行引擎而不是 MapReduce:
set hive.execution.engine=spark;
set spark.executor.memory=2g;
我也尝试更改以下属性。
set yarn.scheduler.maximum-allocation-mb=2048;
set yarn.nodemanager.resource.memory-mb=2048;
set spark.executor.cores=4;
set spark.executor.memory=4g;
set spark.yarn.executor.memoryOverhead=750;
set hive.spark.client.server.connect.timeout=900000ms;
我还需要设置一些其他属性吗?有人可以建议吗?
看起来 e YARN 容器内存小于 Spark 执行器的要求。请将 YARN 容器内存和最大值设置为大于 Spark 执行器内存 + 开销。
- 纱线.scheduler.最大分配-mb
- 纱线.nodemanager.resource.内存-mb
纱线.nodemanager.resource.内存-mb:
可以为容器分配的物理内存量(以 MB 为单位)。这意味着 YARN 可以在该节点上使用的内存量,因此该属性应该低于该机器的总内存。
<name>yarn.nodemanager.resource.memory-mb</name>
<value>40960</value> <!-- 40 GB -->
下一步是提供有关如何将可用总资源分解到容器中的 YARN 指南。您可以通过指定为容器分配的最小 RAM 单位来实现此目的。
在yarn-site.xml中
<name>yarn.scheduler.minimum-allocation-mb</name> <!-- RAM-per-container ->
<value>2048</value>
纱线.scheduler.最大分配-mb:
它定义了容器可用的最大内存分配(以 MB 为单位)
这意味着 RM 只能以“yarn.scheduler.minimum-allocation-mb”的增量向容器分配内存,并且不能超过“yarn.scheduler.maximum-allocation-mb”,并且它不应超过节点的总分配内存。
在yarn-site.xml中
<name>yarn.scheduler.maximum-allocation-mb</name> <!-Max RAM-per-container->
<value>8192</value>
另请转到 Spark 历史记录服务器:转到 Spark on YARN 服务实例 >
历史服务器 > 历史服务 WebUI > 单击相关作业 > 单击
在相关的失败作业上 > 单击该作业的失败阶段并查看
对于“详细信息”部分。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)