在 Spark 数据帧上调用简单的 count() 失败
Posted
技术标签:
【中文标题】在 Spark 数据帧上调用简单的 count() 失败【英文标题】:Calling simple count() on Spark dataframe fails 【发布时间】:2017-10-26 14:16:25 【问题描述】:集群管理器:YARN
部署模式:无
我被告知如果部署模式设置为无,驱动进程的标准输出位于根路径,而不是驱动进程的内部容器 ID。
SparkUI 日志:给出错误Container executed on lost node...
在进行此调用之前,我已取消保留所有其他数据帧/数据集,以确保它们不会缓存在内存中。
调用像count()
这样的简单操作,总是失败。
我基本上是在做以下事情:
columnNames.keys.foreach(
col =>
val nonNullColCount =
dataset.select(dataset(col)).filter(row =>
row.getAs(col) != null).count()
println(nonNullParamsCount)
)
所以,我在数据集上循环调用count()
。
在每次迭代中,我从列名列表中选择一列。
错误是一般性和误导性的,形式为:
Job aborted due to stage failure: Task 284 in stage 14.0 failed 4 times,
most recent failure: Lost task 284.3 in stage 14.0 (TID 100923, ip-172-31-50-226.ec2.internal, executor 266):
ExecutorLostFailure (executor 266 exited caused by one of the running tasks)
Reason: Container marked as failed: container_1506075842477_0672_01_017877 on host: ip-172-31-50-226.ec2.internal.
Exit status: -100.
Diagnostics: Container released on a *lost* node
【问题讨论】:
你能添加 Sprk UI 日志吗,还可以添加更多信息,如 Spark 版本、模式(集群 Yarn 或 Mesos)、独立和完整日志 相应地编辑了信息。 你在 AWS 上的配置吗? 是的。它在 aws emr 上。 你使用的是现货实例吗? 【参考方案1】:如果您使用的是 AWS 现货实例,并且现货实例被收回价格变化,您可能会收到以下错误。
退出状态:-100。诊断:容器在丢失的节点上释放
解决方法将 Spark 作业拆分为多个独立的步骤,这样您就可以保存 每个步骤的结果在 S3 上以短间隔作为文件或与非现场实例一起使用。
【讨论】:
以上是关于在 Spark 数据帧上调用简单的 count() 失败的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 spark-scala 在 spark 数据帧上执行枢轴?