Spark工作只会挂起大数据

时间:2017-12-06 22:10:02

标签: hadoop apache-spark yarn emr amazon-emr

我试图从s3(15天的数据)查询。我试着单独查询它们(每天)它工作正常。它也能正常工作14天。但是当我查询15天时,作业一直在运行(挂起)并且任务#没有更新。

我的设置:

我正在使用具有动态分配和最大资源打开的51节点集群r3.4x large。

我所做的只是=

val startTime="2017-11-21T08:00:00Z"
val endTime="2017-12-05T08:00:00Z"

val start = DateUtils.getLocalTimeStamp( startTime )
val end = DateUtils.getLocalTimeStamp( endTime )

val days: Int = Days.daysBetween( start, end ).getDays

val files: Seq[String] = (0 to days)
      .map( start.plusDays )
      .map( d => s"$input_path${DateTimeFormat.forPattern( "yyyy/MM/dd" ).print( d )}/*/*" )

sqlSession.sparkContext.textFile( files.mkString( "," ) ).count

当我运行相同的14天时,我得到了197337380(计数),我分别运行了第15天并获得了27676788.但是当我查询15天时,工作总计挂起

更新:

这项工作正常:

  var df = sqlSession.createDataFrame(sc.emptyRDD[Row], schema)

    for(n <- files ){
      val tempDF = sqlSession.read.schema( schema ).json(n)
      df = df(tempDF)
    }

df.count

但有人可以解释为什么它现在有效而不是之前有效吗?

更新:将mapreduce.input.fileinputformat.split.minsize设置为256 GB后,现在工作正常。

2 个答案:

答案 0 :(得分:9)

动态分配和最大化资源分配都是不同的设置,当其他活动时,将禁用其中一个。通过在EMR中最大化资源分配,每个节点启动1个执行程序,并将所有核心和内存分配给该执行程序。

我建议采取不同的路线。你似乎有一个包含51个节点的非常大的集群,不确定它是否是必需的。但是,请遵循此经验法则,您将了解如何调整这些配置。

  • 群集内存 - 至少是您正在处理的数据的2倍。

现在假设您需要51个节点,请尝试以下操作:

  • r3.4x有16个CPU - 因此您可以将其中一个用于操作系统和其他进程。
  • 将执行程序的数量设置为150 - 这将为每个节点分配3个执行程序。
  • 将每个执行程序的核心数设置为5(每个节点3个执行程序)
  • 将执行程序内存设置为大致总主机内存/ 3 = 35G
  • 你必须控制并行性(默认分区),将其设置为你拥有的总核心数~800
  • 调整随机分区 - 使这个核心数量增加两倍 - 1600

以上配置对我来说就像一个魅力。您可以在Spark UI上监视资源利用率。

此外,在您的yarn config /etc/hadoop/conf/capacity-scheduler.xml文件中,将yarn.scheduler.capacity.resource-calculator设置为org.apache.hadoop.yarn.util.resource.DominantResourceCalculator - 这将允许Spark真正完全控制这些CPU。更改后重新启动纱线服务。

答案 1 :(得分:0)

你应该增加执行程序内存和#executors,如果数据很大,请尝试增加驱动程序内存。

我的建议是不要使用动态资源分配并让它运行并查看它是否仍然挂起(请注意,spark作业可能会消耗整个群集资源并使其他应用程序匮乏资源尝试此方法时,没有任何作业运行)。如果它没有挂起,这意味着你应该玩资源分配,然后开始硬编码资源并不断增加资源,以便你可以找到你可能使用的最佳资源分配。

以下链接可以帮助您了解资源分配和资源优化。

http://site.clairvoyantsoft.com/understanding-resource-allocation-configurations-spark-application/

https://community.hortonworks.com/articles/42803/spark-on-yarn-executor-resource-allocation-optimiz.html