13

我最近开始涉足数据分析,去年我学到了很多东西(目前,几乎完全使用 Python)。我觉得下一步是开始在 MapReduce/Hadoop 中训练自己。但是,我没有接受过正式的计算机科学培训,因此通常不太了解人们撰写有关 Hadoop 时使用的行话,因此我在这里提出问题。

我希望的是 Hadoop 的顶级概述(除非我应该使用其他东西?),也许是对某种教程/教科书的推荐。

例如,如果我想并行化我用 Python 编写的神经网络,我应该从哪里开始?是否有一种相对标准的方法来使用算法实现 Hadoop,或者每个解决方案都非常具体?

Apache wiki 页面将 Hadoop 描述为“在由商品硬件构建的大型集群上运行应用程序的框架”。但这意味着什么?我听说过“Hadoop 集群”这个词,而且我知道 Hadoop 是基于 Java 的。那么这是否意味着对于上面的示例,我需要学习 Java,在一些亚马逊服务器上建立一个 Hadoop 集群,然后 Jython 化我的算法,然后最终让它在使用 Hadoop 的集群上工作?

非常感谢您的帮助!

4

6 回答 6

15

首先,要将 Hadoop 与 Python 一起使用(无论何时在您自己的集群、Amazon EMR 或其他任何东西上运行它),您都需要一个名为“Hadoop Streaming”的选项。

阅读 Hadoop 手册的原始章节更新链接)以了解其工作原理。

还有一个很棒的库“MrJob”可以简化在 Hadoop 上运行 Python 作业。

您可以设置自己的集群或尝试使用 Amazon Elastic Map Reduce。后者可能会让你付出一些代价,但有时在开始时更容易运行。关于如何在 Amazon EMR 上使用 Hadoop Streaming 运行 Python有一个很棒的教程。它立即显示了一个简单但实​​用的应用程序。

要了解 Hadoop 本身,我建议您阅读其中一本书。他们说“Hadoop In Action”更适合那些对 Python/Hadoop Streaming 感兴趣的人。

另请注意,为了测试/学习,您可以在本地机器上运行 Hadoop,而无需实际的集群。

更新:

至于理解 Map Reduce(即如何识别和表达 Map Reduce 语言的不同类型问题),请阅读伟大的文章“ MapReduce 模式、算法和用例”,其中包含 Python 示例。

于 2012-08-29T14:00:41.797 回答
4

我建议您从下载Cloudera VM for Hadoop开始,这几乎是当今许多行业的标准,并简化了 Hadoop 设置过程。然后按照本教程学习单词计数示例,这是学习 Map/Reduce 的标准 hello world 等价物

在此之前,理解 map/reduce 的一种简单方法是尝试 python 的内置 map/reduce 函数:

x = [1, 2, 3, 4]
y = map(lambda z: z*z, x]
print y
[1, 4, 9, 16]
q = reduce(lambda m,n : m+n, y)
print q
30

在这里,mapper 通过对每个元素进行平方来转换数据,reducer 将平方相加。Hadoop 只是使用它来扩展大规模计算,但您需要找出自己的映射和归约函数。

于 2012-08-29T13:57:46.770 回答
3

对于喜欢 MOOC 的人来说,Udacity 上的Intro to Hadoop 和 Mapreduce是与 Cloudera 合作制作的。在课程期间,您有机会在本地安装 Cloudera Hadoop Distribution 虚拟机并在示例数据集上执行一些 map/reduce 作业。Hadoop Streaming 用于与 Hadoop 集群交互,编程是用 Python 完成的。

于 2014-03-13T11:47:59.543 回答
0

为什么不从google 的原创作品开始呢?因为这是其他人开始的地方。对于并行性,这里有许多不同的选项可供选择

于 2012-08-29T13:50:02.497 回答
0

http://blog.doughellmann.com/2009/04/implementing-mapreduce-with.html

Doug 的解决方案不适合 Google 规模的生产,因为它只是 Python 多处理池的一个精简包装器(它只使用一台机器,尽管它可以使用该机器上的许多内核)。但这足以让您入门,并且很容易看到它在做什么。

我想并行化一个神经网络

不容易。节点之间的通信将比它的价值更麻烦。但是,您可以运行多个网络实例来增加吞吐量。

ML 问题通常很容易并行化——您在每个节点上运行不同的神经网络。梯度下降可能有点棘手,因为梯度下降是非常线性的,但您可以使用其他一些优化方法(尝试几种不同的步长,然后选择最好的)。

于 2012-08-29T14:02:26.553 回答
0

好吧,我已经连续工作了 4 天,最后我想我已经涉足了。请检查此回购。我认为这会有所帮助。

于 2019-01-23T21:22:44.763 回答