hadoop - 使用hadoop的并行机器学习(推荐)算法

标签 hadoop machine-learning hdfs apache-spark matrix-factorization

我正在研究推荐算法:使用随机梯度作为优化器的矩阵分解。

我想并行化我的算法。我找到这篇文章Parallelized Stochastic Descent Gradient 。 他们给出了一个算法(p3):

Algorithm 3 SimuParallelSGD(Examples {c1, . . . cm}, Learning Rate η, Machines k)

Define T = ⌊m/k⌋
Randomly partition the examples, giving T examples to each machine.
for all i ∈ {1, . . . k} parallel do
  Randomly shuffle the data on machine i.
  Initialize w(i,0) = 0.
  for all t ∈ {1, . . . T }: do
    Get the tth example on the ith machine (this machine), c(i,t)
    w(i,t) ← w(i,t−1) − η∂(w)  ci*(wi,t−1)
  end for
end for
Aggregate from all computers v = 1/k SUM(W(i,t) and return v.

他们评论道:

"The algorithm requires no communication between machines until the end. This is perfectly suited to MapReduce settings."

我看不出他们是如何实现的。他们是否“手动”在每台机器上分发数据?或使用HDFS

HDFS 负责数据的分发;如何限制我的程序仅处理当前数据节点上的数据?

是否有合适的方法通过spark + hadoop集群来实现它?

欢迎任何线索


我忘了说一件事。我在 Spark 上看到了带有 SGD回归逻辑示例。

但是数据集只是一个

      UserID | ItemID | ratings

在我的例子中,为了强化算法,我们添加了一些用户信息和项目信息。因此,我在每个数据节点上还需要两个文件(UserID 年龄性别..)和(ItemID 颜色大小..)以完成计算。

我在想也许可以让HDFS的复制数量等于机器的数量,这样所有的数据都会在每个节点上。但我不知道什么时候我会在 Spark 上做这样的事情:

 val textFile = sc.textFile("README.md")
  1. 会发生什么?
  2. rdd会在每个datanode的内存上创建吗?
  3. 所有任务是否只能由每个数据节点在本地处理?

最佳答案

这与 Spark 在逻辑回归示例中使用的算法相同:

http://spark.apache.org/examples.html

是的,所有方法都依赖于将数据拆分为 block ,这就是 HDFS 本​​身所做的。 在 MapReduce 设置中,每个映射器都会执行最内层的 for 循环,而缩减器会聚合来自所有计算机的结果。为了收敛,您需要多次运行它 - 从而调度许多 MapReduce 作业。

作为一个实用的旁注,随机步骤之前的洗牌通常被省略。它需要在每次迭代时重写数据或完全内存映射+随机播放数据 - 两者都相当昂贵。

关于hadoop - 使用hadoop的并行机器学习(推荐)算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22816363/

相关文章:

hadoop - 如果我们在不增加文件数量的情况下增加了存储在HDFS中的文件大小,那么NameNode所需的内存会增加还是减少?

hadoop - 是否可以配置clickhouse数据存储为hdfs

java - Hadoop - 分析日志文件 (Java)

hadoop - 名称节点和辅助名称节点未启动

用于商业用途的 Java 机器学习库?

python-3.x - keras 多维度输入到 simpleRNN : dimension mismatch

hadoop - 如何在Cloudera上挂载HDFS?

hadoop - Hadoop 中的文件存储、 block 大小和输入拆分

hadoop - 在现有的 Hortonworks HDP 集群中安装 Spark 1.5

machine-learning - 将一般集合 S 的观测值显式映射到内积空间