【发布时间】:2019-04-28 09:28:57
【问题描述】:
我正在使用 Spark SQL。 Spark 版本 2.2.2。
SQL 喜欢
select a.*, b.* from a inner join b on a.id=b.id
表 a 和 b 很大。这行得通,我可以得到答案。
其次,我想将 SQL 结果保存到 hive 表中。 SQL 喜欢:
create table xxx stored as orc as select ...
这将失败,错误代码为 143。错误消息是:
ExecutorLostFailure(由于其中一个正在运行的任务导致执行程序 268 退出)原因:容器标记为失败:主机上的 container_e37_1554167308087_15187_01_000269:xxx。退出状态:143。诊断:容器应请求终止。退出代码是 143 +详细信息 ExecutorLostFailure(由于其中一个正在运行的任务导致执行程序 268 退出)原因:容器标记为失败:主机上的 container_e37_1554167308087_15187_01_000269:xxxx。退出状态:143。诊断:容器应请求终止。退出代码是 143 容器以非零退出代码 143 退出 被外部信号杀死
我尝试使用 pyspark 来使用df.saveAsTable()。这在某些情况下有效,但并非所有时候都有效。
有人可以帮忙吗?
谢谢。
【问题讨论】:
-
Hive 创建了大量由驱动程序处理的元数据。你为驱动分配了多少内存
--driver-memory? -
df.saveAsTable()由于分区不均匀而随机失败。在保存df.repartition(n).saveAsTable()之前尝试重新分区 -
@MaFF 不会随机失败。它适用于表 a 和 b,但不适用于表 c 和 d。
-
驱动内存为 6GB @MaFF
-
要解决内存问题,您可以尝试重新分区,增加执行器内存
--executor-memory,通过执行器减少内核数量(它们共享执行器的 RAM),不要忘记将内存开销增加到符合规格
标签: apache-spark apache-spark-sql