【发布时间】:2014-05-13 23:07:08
【问题描述】:
工具:带有 spark 0.9.0 的 hadoop 集群(没有 YARN)。
理想的情况是通过 HDFS 在 namenode 上运行 spark 程序,而不在 datanode 之间进行通信。该程序会这样做:
举个例子:在 HDFS 上,我有 2 种类型的数据:A 和 B,我的集群由 3 个数据节点组成。
我的目标是运行一个可以处理 A 和 1/3B 的所有数据的程序。 Datanode1 与 A 和 B1(前三分之一)交互,Datanode2 与 A 和 B2(第二个三分之一)交互,Datanode3 与 A 和 B3 交互...... 所以为了尊重“机器之间没有通信直到结束”的条件,我必须在datanode1的内存中拥有A和B1,在......的内存中拥有A和B2。
程序在每个datanode上的结果将在最后汇总。
有没有办法用 Spark 做到这一点?
【问题讨论】:
-
为什么要处理每个节点中的所有A?在我看来,您试图限制您的工作将如何执行,而不是指定您的工作将做什么,然后让 Spark 进行优化。为什么你有这个限制?安全?您能否更具体地说明您尝试执行哪种计算?
-
是的,我正在研究推荐算法:使用随机梯度作为优化器的矩阵分解。我想并行化我的算法。事实上,是的,如果 spark 会进行优化,那将是完美的。我的目标是优化计算时间。所以我不想通过网络通信来访问数据,这就是为什么我认为限制作业的执行可能是一个想法。最近我听说 spark 可以在实际计算期间加载对下一次计算有用的数据。因此,网络通信将在计算期间“隐藏”。需要一些资源
标签: hadoop cluster-computing hdfs clustered-index apache-spark