在 CDH-5.10.2 上的 RSparkling 中连续 "Got IO error when sending batch UDP bytes: java.net.ConnectException: Connection refused"
Continous "Got IO error when sending batch UDP bytes: java.net.ConnectException: Connection refused" in RSparkling on CDH-5.10.2
我正在尝试在离线 CDH-5.10.2 集群上执行 this RSparkling example。我的环境是:
- Spark 1.6.0;
- sparklyr 0.6.2;
- h2o 3.10.5.2;
- rsparkling 0.2.1.
我使用自定义的 Sparkling Water JAR,它基本上是 1.6.12 并应用了 this PR:
options(rsparkling.sparklingwater.location = "/opt/h2o/sparkling-water-1.6.13-SNAPSHOT/assembly/build/libs/sparkling-water-assembly_2.10-1.6.13-SNAPSHOT-all.jar")
连接成功后:
config <- spark_config()
config$spark.dynamicAllocation.enabled <- "false"
config$spark.driver.memory <- "6g"
config$spark.executor.memory <- "6g"
config$spark.executor.heartbeatInterval <- "20s"
sc <- spark_connect(master = "yarn-client", config = config)
我创建了 H2O 上下文:
h2o_context(sc)
H2O 上下文创建需要几分钟(这是第一个奇怪的事情)。
创建后,应用程序会再过几分钟没有响应(甚至 Spark master UI 变得无法访问)。此时没有打印 H2O 日志。
之后,会出现 H2O 日志,但它们主要包含以下消息:
Got IO error when sending batch UDP bytes: java.net.ConnectException: Connection refused
和介于两者之间的罕见这些:
WARN: Unblock allocations; cache below desired, but also OOM: OOM, (K/V:Zero + POJO:661.8 MB + FREE:306.7 MB == MEM_MAX:968.5 MB), desiredKV=121.1 MB OOM!
然后快速执行以下与H2O无关的代码:
flights_tbl <- copy_to(sc, nycflights13::flights, "flights")
airports_tbl <- copy_to(sc, nycflights13::airports, "airports")
airlines_tbl <- copy_to(sc, nycflights13::airlines, "airlines")
model_tbl <- flights_tbl %>%
filter(!is.na(arr_delay) & !is.na(dep_delay) & !is.na(distance)) %>%
filter(dep_delay > 15 & dep_delay < 240) %>%
filter(arr_delay > -60 & arr_delay < 360) %>%
left_join(airlines_tbl, by = c("carrier" = "carrier")) %>%
mutate(gain = dep_delay - arr_delay) %>%
select(origin, dest, carrier, airline = name, distance, dep_delay, arr_delay, gain)
但是当 H2O 必须再次发挥作用时:
df_hex <- as_h2o_frame(sc,model_tbl,name="model_hex",FALSE)
应用又挂了(到现在挂了二十分钟左右)。
我尝试多次重新运行这段代码并成功了一次,但通常它只是挂起。如何解决此问题?
我检查了CPU、RAM 和磁盘使用情况,所有这些似乎都没有问题。也没有明显的网络问题。
更新 1。也许 ConnectException
只是 K/V:Zero + POJO:661.8 MB + FREE:306.7 MB == MEM_MAX:968.5 MB
的结果。所以我将尝试找出如何增加 H2O 的最大内存(以及为什么它首先低于 1 GB)。
根本原因是 sparklyr
的内存分配不足,默认的 1 GB 内存对于在同一 JVM 中执行的 H2O 客户端来说不够用。这些代码行挽救了局面:
config$`sparklyr.shell.driver-memory` <- "6g"
config$`sparklyr.shell.executor-memory` <- "6g"
我正在尝试在离线 CDH-5.10.2 集群上执行 this RSparkling example。我的环境是:
- Spark 1.6.0;
- sparklyr 0.6.2;
- h2o 3.10.5.2;
- rsparkling 0.2.1.
我使用自定义的 Sparkling Water JAR,它基本上是 1.6.12 并应用了 this PR:
options(rsparkling.sparklingwater.location = "/opt/h2o/sparkling-water-1.6.13-SNAPSHOT/assembly/build/libs/sparkling-water-assembly_2.10-1.6.13-SNAPSHOT-all.jar")
连接成功后:
config <- spark_config()
config$spark.dynamicAllocation.enabled <- "false"
config$spark.driver.memory <- "6g"
config$spark.executor.memory <- "6g"
config$spark.executor.heartbeatInterval <- "20s"
sc <- spark_connect(master = "yarn-client", config = config)
我创建了 H2O 上下文:
h2o_context(sc)
H2O 上下文创建需要几分钟(这是第一个奇怪的事情)。
创建后,应用程序会再过几分钟没有响应(甚至 Spark master UI 变得无法访问)。此时没有打印 H2O 日志。
之后,会出现 H2O 日志,但它们主要包含以下消息:
Got IO error when sending batch UDP bytes: java.net.ConnectException: Connection refused
和介于两者之间的罕见这些:
WARN: Unblock allocations; cache below desired, but also OOM: OOM, (K/V:Zero + POJO:661.8 MB + FREE:306.7 MB == MEM_MAX:968.5 MB), desiredKV=121.1 MB OOM!
然后快速执行以下与H2O无关的代码:
flights_tbl <- copy_to(sc, nycflights13::flights, "flights")
airports_tbl <- copy_to(sc, nycflights13::airports, "airports")
airlines_tbl <- copy_to(sc, nycflights13::airlines, "airlines")
model_tbl <- flights_tbl %>%
filter(!is.na(arr_delay) & !is.na(dep_delay) & !is.na(distance)) %>%
filter(dep_delay > 15 & dep_delay < 240) %>%
filter(arr_delay > -60 & arr_delay < 360) %>%
left_join(airlines_tbl, by = c("carrier" = "carrier")) %>%
mutate(gain = dep_delay - arr_delay) %>%
select(origin, dest, carrier, airline = name, distance, dep_delay, arr_delay, gain)
但是当 H2O 必须再次发挥作用时:
df_hex <- as_h2o_frame(sc,model_tbl,name="model_hex",FALSE)
应用又挂了(到现在挂了二十分钟左右)。
我尝试多次重新运行这段代码并成功了一次,但通常它只是挂起。如何解决此问题?
我检查了CPU、RAM 和磁盘使用情况,所有这些似乎都没有问题。也没有明显的网络问题。
更新 1。也许 ConnectException
只是 K/V:Zero + POJO:661.8 MB + FREE:306.7 MB == MEM_MAX:968.5 MB
的结果。所以我将尝试找出如何增加 H2O 的最大内存(以及为什么它首先低于 1 GB)。
根本原因是 sparklyr
的内存分配不足,默认的 1 GB 内存对于在同一 JVM 中执行的 H2O 客户端来说不够用。这些代码行挽救了局面:
config$`sparklyr.shell.driver-memory` <- "6g"
config$`sparklyr.shell.executor-memory` <- "6g"