发现没有H2O实例的执行程序,杀死云

时间:2016-07-08 21:51:18

标签: apache-spark machine-learning glm h2o sparkling-water

我使用苏打水运行Tweedie GLM,用于不同大小的数据,即20 MB,400 MB,2GB,25 GB。代码适用于采样迭代10 。但我必须测试大型采样方案..

Sampling iteration is 500 

在这种情况下,代码可以很好地处理20和400 mb数据。但是当数据大于2 GB时,它会开始抛出问题

在搜索之后,我发现一个解决方案禁用了更改侦听器,但这对大数据不起作用      的 --conf "spark.scheduler.minRegisteredResourcesRatio=1" "spark.ext.h2o.topology.change.listener.enabled=false"

这是我的火花提交配置

spark-submit \
     --packages  ai.h2o:sparkling-water-core_2.10:1.6.1, log4j:log4j:1.2.17\
        --driver-memory 8g \
        --executor-memory 10g \
        --num-executors 10\
        --executor-cores 5 \
        --class TweedieGLM  target/SparklingWaterGLM.jar \
        $1\
        $2\
        --conf "spark.scheduler.minRegisteredResourcesRatio=1" "spark.ext.h2o.topology.change.listener.enabled=false"

这是我得到的错误

16/07/08 20:39:55 ERROR YarnScheduler: Lost executor 2 on cfclbv0152.us2.oraclecloud.com: Executor heartbeat timed out after 175455 ms
    16/07/08 20:40:00 ERROR YarnScheduler: Lost executor 2 on cfclbv0152.us2.oraclecloud.com: remote Rpc client disassociated
    16/07/08 20:40:00 ERROR LiveListenerBus: Listener anon1 threw an exception
    java.lang.IllegalArgumentException: Executor without H2O instance discovered, killing the cloud!
            at org.apache.spark.h2o.H2OContext$$anon$1.onExecutorAdded(H2OContext.scala:203)
            at org.apache.spark.scheduler.SparkListenerBus$class.onPostEvent(SparkListenerBus.scala:58)
            at org.apache.spark.scheduler.LiveListenerBus.onPostEvent(LiveListenerBus.scala:31)
            at org.apache.spark.scheduler.LiveListenerBus.onPostEvent(LiveListenerBus.scala:31)
            at org.apache.spark.util.ListenerBus$class.postToAll(ListenerBus.scala:56)
            at org.apache.spark.util.AsynchronousListenerBus.postToAll(AsynchronousListenerBus.scala:37)
            at org.apache.spark.util.AsynchronousListenerBus$$anon$1$$anonfun$run$1.apply$mcV$sp(AsynchronousListenerBus.scala:79)
            at org.apache.spark.util.Utils$.tryOrStopSparkContext(Utils.scala:1136)
            at org.apache.spark.util.AsynchronousListenerBus$$anon$1.run(AsynchronousListenerBus.scala:63)

2 个答案:

答案 0 :(得分:0)

我将使用Sparkling water shell并一次执行一行来解决这个问题

  • 启动shell
  • 启动H2O
  • 监控群集状态

然后

  1. 读取输入数据并将其缓存
  2. 阅读Yarn日志以找出我的任务被杀的原因,很多时候Yarn preemption会杀死执行者。
  3. 增加启动H2O流程的Spark等待时间
  4. 将执行程序的数量减少到3 /增加内核为3 /将执行程序内存增加到6 GB
  5. 监控Spark UI和H2O Flow UI,了解每个阶段内存的变化情况
  6. 作为一般规则,H2O集群的内存大小应为数据输入大小的5倍。每次迭代都超过了这个限制吗? 2 GB似乎很小。我们每天使用苏打水和Spark处理大量产品。

    在H2o网站上有一些建议

    https://github.com/h2oai/sparkling-water/blob/master/doc/configuration/internal_backend_tuning.rst

答案 1 :(得分:0)

仔细阅读github https://github.com/h2oai/sparkling-water/issues/32上发布的问题。我在这里尝试了几种选择是我尝试过的 新增
{{1}}

Changed the :

Executors from 10 to 3,6 9
executor-memory from 4 to 12 and 12 to 24gb
driver-memory from 4 to 12 and 12 to 24gb

这是我学到的:GLM是内存密集型作业,因此我们必须提供足够的内存来执行作业。