如何使用Spark将800 GB的数据加载到配置单元表中?

时间:2017-08-18 21:42:27

标签: python hadoop apache-spark hive yarn

我们有很多时间序列的三分量磁场(北,东,下)在许多不同的站点测量。

我们希望使用Spark with Python来分析这些数据。我们使用Spark 1.6.1和Yarn作为集群管理器。我正在使用纱线client部署模式运行spark-submit作业。

在我的代码中,我每个月使用sc.binaryFiles阅读90-93个文件[每月30-31 * 3(北,东和下)]并执行combineByKey每天将90个文件组合在一起,最终在DataFrame的所有北方,东方和下方获得30天。在所有月份和所有站点以及所有年份重复此操作,将其加载到HDFS上的蜂巢表中。

我正在尝试将200 GB(10年)的数据(每个日期是一个17 MB的npy文件)加载到Hive表中以进行数据分析。我们有一个4个节点的集群,122 GB的内存,44个vCores。我在488 GB可用中使用465 GB内存。我使用pyspark代码将npy文件作为sc.binaryFiles读取,每次迭代使用90个文件。我使用以下参数给出spark-submit

--num-executors 16 --driver-memory 2g --executor-memory 26G --executor-cores 10 \
--conf "spark.sql.shuffle.partitions=2048" \
--conf "spark.shuffle.memory.fraction=0.8" \
--conf "spark.storage.memoryFraction=0.2" \
--conf "spark.yarn.executor.memoryOverhead=2600" \
--conf "spark.yarn.nodemanager.resource.memory-mb=123880" \
--conf "spark.yarn.nodemanager.resource.cpu-vcores=43"

但是在大​​约130次迭代后我总是得到以下错误。

org.apache.spark.storage.ShuffleBlockFetcherIterator.throwFetchFailedException(ShuffleBlockFetcherIterator.scala:323) 

另外,我每年都会提交一份新工作。

即使我每次迭代只处理90个文件,为什么会出现此错误?是否可以遍历所有年份,所有工作站和工作中的所有月份?我的迭代逻辑处理所有年份,站点和月份但不能在Spark中运行它而不会失败。

请告诉我如何让火花顺利完成我的工作。

0 个答案:

没有答案