1

我对 Spark 比较陌生,并使用 python 和 spark SQL 编写了一个简单的脚本。我的问题是它在执行的开始阶段完全没问题,但逐渐变慢了,在最后一个阶段结束时整个应用程序挂起。这是应用程序被挂起的代码片段 -

hivectx.registerDataFrameAsTable(aggregatedDataV1,"aggregatedDataV1")
q1 = "SELECT *, (Total_Sale/Sale_Weeks) as Average_Sale_Per_SaleWeek, (Total_Weeks/Sale_Weeks) as Velocity FROM aggregatedDataV1"
aggregatedData = hivectx.sql(q1)
aggregatedData.show(100)

我在终端上有以下内容 -

16/03/29 09:05:50 INFO TaskSetManager: Finished task 96.0 in stage 416.0 (TID 19992) in 41924 ms on 10.9.0.7 (104/200)
16/03/29 09:05:50 INFO TaskSetManager: Finished task 108.0 in stage 416.0 (TID 20004) in 24608 ms on 10.9.0.10 (105/200)
16/03/29 09:05:50 INFO TaskSetManager: Finished task 105.0 in stage 416.0 (TID 20001) in 24610 ms on 10.9.0.10 (106/200)
16/03/29 09:05:55 INFO TaskSetManager: Starting task 116.0 in stage 416.0 (TID 20012, 10.9.0.10, partition 116,NODE_LOCAL, 2240 bytes)
16/03/29 09:06:31 INFO TaskSetManager: Finished task 99.0 in stage 416.0 (TID 19995) in 78435 ms on 10.9.0.7 (110/200)
16/03/29 09:06:40 INFO TaskSetManager: Starting task 119.0 in stage 416.0 (TID 20015, 10.9.0.10, partition 119,NODE_LOCAL, 2240 bytes)
16/03/29 09:07:12 INFO TaskSetManager: Starting task 122.0 in stage 416.0 (TID 20018, 10.9.0.7, partition 122,NODE_LOCAL, 2240 bytes) 
16/03/29 09:07:16 INFO TaskSetManager: Starting task 123.0 in stage 416.0 (TID 20019, 10.9.0.7, partition 123,NODE_LOCAL, 2240 bytes)
16/03/29 09:07:28 INFO TaskSetManager: Finished task 111.0 in stage 416.0 (TID 20007) in 110198 ms on 10.9.0.7 (114/200)
16/03/29 09:07:52 INFO TaskSetManager: Starting task 124.0 in stage 416.0 (TID 20020, 10.9.0.10, partition 124,NODE_LOCAL, 2240 bytes)
16/03/29 09:08:08 INFO TaskSetManager: Finished task 110.0 in stage 416.0 (TID 20006) in 150023 ms on 10.9.0.7 (115/200)
16/03/29 09:08:12 INFO TaskSetManager: Finished task 113.0 in stage 416.0 (TID 20009) in 154120 ms on 10.9.0.7 (116/200)
16/03/29 09:08:16 INFO TaskSetManager: Finished task 116.0 in stage 416.0 (TID 20012) in 145691 ms on 10.9.0.10 (117/200)

之后,整个应用程序被挂起。我的 spark-env.sh 文件具有以下配置:

export SPARK_PUBLIC_DNS="azuremaster.westus.cloudapp.azure.com"
export SPARK_EXECUTOR_INSTANCES=1
export SPARK_EXECUTOR_CORES=2
export SPARK_EXECUTOR_MEMORY=3G
export SPARK_MASTER_OPTS="-Dspark.deploy.defaultCores=1"
export SPARK_WORKER_PORT="8888"
export PYSPARK_PYTHON=/usr/bin/python3
export PYSPARK_DRIVER_PYTHON=python3
export SPARK_HIVE=true

我正在使用3 节点集群。一名拥有2 核和 4 GB 内存的Master和另外两名拥有4 核和 7 GB 内存的Worker

到目前为止,我已经尝试了以下方法 -

  • 增加执行器核心的数量
  • 增加/减少具有不同资源数量的执行者。

我有 -

  1. 火花-1.6.0
  2. 爪哇 7
  3. 斯卡拉 2.10.4
  4. 预建的hadoop 2.3
  5. 预建蜂巢

运行应用程序 2 小时后,它给出了错误。

终端窗口

我猜需要调整配置,但不知道是哪一个。如果有人知道发生了什么并提出一些帮助信息,我将不胜感激。

提前致谢。

4

1 回答 1

0

您的内存不足错误表明您可能需要增加驱动程序内存。默认情况下,这是 2GB。我遇到了类似的问题,并通过 spark-submit 标志传递自定义配置。

尝试这个:

spark-submit --driver-memory = 4g app.py

如果这不起作用;您需要查看 spark web UI 或 ganglia 以查看执行期间使用了多少内存。Ganglia 将允许您查看正在使用的内存量以及您是否需要更多内存来完成工作。

于 2017-06-08T23:14:16.873 回答