如何使用spark_apply_bundle

时间:2018-04-08 11:05:23

标签: r apache-spark sparklyr

我正在尝试使用spark_apply_bundle来限制packages/data传输到YARN托管群集上的工作节点的数量。如here中所述,我必须将tarball的路径作为packages参数传递给spark_apply,我还必须通过spark配置中的"sparklyr.shell.files"将其提供。

我的问题是:

  • tarball的路径是否可以相对于项目的工作目录,如果不是,那么它应该存储在hdfs还是其他地方?
  • 应该传递给"sparklyr.shell.files"的内容?它是传递给spark_apply的路径的副本吗?

目前我的不成功脚本看起来像这样:

bundle <- paste(getwd(), list.files()[grep("\\.tar$",list.files())][1], sep = "/")

...

config$sparklyr.shell.files <- bundle
sc <- spark_connect(master = "yarn-client", config = config)

...

spark_apply(sdf, f, packages = bundle)

1 个答案:

答案 0 :(得分:1)

通过将tarball复制到hdfs,spark作业成功了。似乎使用其他方法(例如将文件复制到每个工作节点)似乎是合理的,但这似乎是最简单的解决方案。

更新的脚本如下所示:

bundle <- paste(getwd(), list.files()[grep("\\.tar$",list.files())][1], sep = "/")

...

hdfs_path <- "hdfs://nn.example.com/some/directory/"
hdfs_bundle <- paste0(hdfs_path, basename(bundle))
system(paste("hdfs dfs -put", bundle, hdfs_path))
config$sparklyr.shell.files <- hdfs_bundle
sc <- spark_connect(master = "yarn-client", config = config)

...

spark_apply(sdf, f, packages = bundle)