【发布时间】:2018-06-13 01:39:52
【问题描述】:
我使用 Spark 2.0.2。
我正在尝试运行一个 Spark 应用程序,该应用程序对已创建的模型进行预测。
集群信息:m4.2xlarge 16 vCPU,32 GiB 内存,仅 EBS 存储 EBS 存储:1000 GiB
根据here 提出的建议,我制定了Google-Spreadsheet 来计算调整参数。
无论我尝试什么,我都会遇到以下 2 个异常:
- 容器因超出内存限制而被 YARN 杀死。使用了 10.0 GB 的 10 GB 物理内存。考虑提升 spark.yarn.executor.memoryOverhead。
- 执行器心跳在 159126 毫秒后超时
下面是我要执行的代码
val allGears = sc.textFile(allGearsFilePath)
val allUsers = sc.textFile(allUsersFilePath)
val allUserItems = allUsers.cartesian(allGears).map{ case(x,y) => (x.toInt, y.toInt)}
allUserItems.cache()
val gearPurchased = sc.textFile(gearPurchaseRating)
val gearAddedToCart = sc.textFile(gearAddToCartRating)
val gearShoppingUserToItem = gearPurchased.map(_.split(',') match { case Array(user, item, rate) => (user.toInt, item.toInt) })
gearShoppingUserToItem.cache()
val allUserItemToGearShoppingUnion = allUserItems.union(gearShoppingUserToItem)
val allUserItemToGearShoppingIntersection = allUserItems.intersection(gearShoppingUserToItem)
val FinalSubtraction = allUserItems.subtract(gearShoppingUserToItem)
val nonPurchasedGears = FinalSubtraction
nonPurchasedGears.cache()
allUserItems.unpersist()
gearShoppingUserToItem.unpersist()
val out = model.predict(nonPurchasedGears)
当我尝试预测用户可以购买哪些装备时出现异常。
下面是我运行的 spark-submit 命令
spark-submit --jars jedis-2.7.2.jar,commons-pool2-2.3.jar,spark-redis-0.3.2.jar,SparkHBase.jar,recommendcontentslib_2.11-1.0.jar --class org.digitaljuice.itemrecommender.RecommendGears --master yarn --driver-memory 2g --num-executors 5 --executor-memory 9g --executor-cores 5 --conf spark.yarn.executor.memoryOverhead=1024 recommendersystem_2.11-0.0.1.jar /work/output/gearpurchaserating/part-00000 /work/output/gearaddtocartrating/part-00000 /work/output/allGears/part-00000 /work/output/allAccounts/part-00000 /work/allaccounts/acc_toacc/part-m-00000 /work/Recommendations/ /work/TrainingModel
如何调整应用程序以使其运行并做出预测? 我尝试了各种方法,但似乎没有任何效果,所以我猜我没有正确调整应用程序。请帮忙。
谢谢
【问题讨论】:
-
能不能把
allUserItems.cache()改成allUserItems.cache().count()来触发缓存权就行了?gearShoppingUserToItem.cache()也一样。这会让你知道什么/什么时候失败。此外,你为什么使用 RDD API?已经是 21 世纪了:) -
我看到您有几个
cache调用,并且由于cache坚持仅到内存中,您很快就会遇到 OOM 问题。当您看到错误时,正在评估 DAG 中的哪个阶段? -
哦,是的,您运行的是哪个版本的 Spark?
-
我是说它们可能是一个陷阱(通常,我会推荐
.persist(StorageLevel.MEMORY_AND_DISK),除非您绝对确定数据适合内存)。但是,您还在做其他事情可能会导致 OOM,这就是为什么我问您在哪个阶段看到错误。 -
就在我尝试预测时,在这条线上 val out = model.predict(nonPurchasedGears)
标签: scala apache-spark rdd apache-spark-mllib