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