在 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 数据帧上执行枢轴?

缓存后正在重新评估 Spark 数据帧

Spark:在scala中的数据帧上使用动态过滤器进行聚合

spark - 在大型数据帧上执行 groupby 和聚合时,java 堆内存不足

如何仅对 Spark 数据帧上的特定字段使用“立方体”?

具有两个分类变量的数据帧上的 Groupby 和 count() [重复]