在 Spark 1.4 中应用 LSH 算法(https://github.com/soundcloud/cosine-lsh-join-spark/tree/master/src/main/scala/com/soundcloud/lsh),我处理一个文本文件(4GB ) 以 LIBSVM 格式 ( https://www.csie.ntu.edu.tw/~cjlin/libsvm/ ) 来查找重复项。首先,我在一台服务器上运行了我的 scala 脚本,只使用了一个 36 核的执行器。我在 1.5 小时内检索了我的结果。
为了更快地获得结果,我尝试在具有 3 个节点的 hpc 中通过 yarn 在 hadoop 集群中运行我的代码,其中每个节点有 20 个内核和 64 gb 内存。由于我在 hpc 中没有太多运行代码,因此我遵循了此处给出的建议:https ://blog.cloudera.com/blog/2015/03/how-to-tune-your-apache-spark-jobs-part -2/
结果,我提交了如下火花:
spark-submit --class com.soundcloud.lsh.MainCerebro --master yarn-cluster --num-executors 11 --executor-memory 19G --executor-cores 5 --driver-memory 2g cosine-lsh_yarn.jar
据我了解,我为每个节点分配了 3 个执行程序,并为每个执行程序分配了 19 GB。
但是,即使过去了两个多小时,我也无法得到我的结果。
我的火花配置是:
val conf = new SparkConf()
.setAppName("LSH-Cosine")
.setMaster("yarn-cluster")
.set("spark.driver.maxResultSize", "0");
我该如何挖掘这个问题?我应该从哪里开始改进计算时间?
编辑:
1)
我注意到在纱线中合并的速度要慢得多
entries.coalesce(1, true).saveAsTextFile(text_string)
2)
HPC 的执行者和阶段:
服务器的执行者和阶段: