我最近开始进行数据分析,去年我学到了很多东西(目前,几乎只使用Python)。我觉得下一步是开始自己在MapReduce / Hadoop中进行培训。我没有正式的计算机科学培训,所以经常不太了解人们写Hadoop时使用的术语,因此我的问题在这里。
我希望的是Hadoop的顶级概述(除非我还应该使用其他东西吗?),也许是对某种教程/教科书的推荐。
例如,如果我想并行化我用Python编写的神经网络,我将从哪里开始?是否有一种相对标准的方法来实现Hadoop算法,或者每种解决方案都是特定于问题的?
Apache wiki页面将Hadoop描述为“在由商用硬件构建的大型集群上运行应用程序的框架”。但那意味着是什么意思?我听说过“Hadoop集群”一词,我知道Hadoop是基于Java的。那么这对于上面的例子是否意味着我需要学习Java,在一些亚马逊服务器上设置一个Hadoop集群,然后在最终使用Hadoop在集群上工作之前使用Jython-ify我的算法?
非常感谢您的帮助!
答案 0 :(得分:15)
首先,要将Hadoop与Python一起使用(无论何时在您自己的集群或Amazon EMR上运行它,或其他任何东西),您都需要一个名为“Hadoop Streaming”的选项。
阅读Hadoop手册的original chapter(updated link),了解其工作原理。
还有一个great library“MrJob”,它简化了在Hadoop上运行Python作业的过程。
您可以设置自己的群集或尝试使用Amazon Elastic Map Reduce。后者可能会花费你一些东西,但有时在开始时更容易运行。有关如何在Amazon EMR上使用Hadoop Streaming运行Python的great tutorial。它立即显示了一个简单但实际的应用程序。
要了解Hadoop本身,我建议您阅读其中一本书。他们说"Hadoop In Action"更适合那些对Python / Hadoop Streaming感兴趣的人。
另请注意,对于测试/学习内容,您可以在本地计算机上运行Hadoop而无需实际群集。
更新:
至于理解Map Reduce(即如何在Map Reduce语言中识别和表达不同类型的问题),请阅读带有Python示例的精彩文章“MapReduce Patterns, Algorithms, and Use Cases”。
答案 1 :(得分:4)
我建议您首先下载Cloudera VM for Hadoop,这是当今许多行业的标准,并简化了Hadoop设置流程。然后按照this tutorial进行单词计数示例,这是一个标准的hello world等效于学习Map / Reduce
在此之前,了解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
这里映射器通过对每个元素求平方来转换数据,并且缩减器对平方进行求和。 Hadoop只是使用它来扩展大规模计算,但你需要找出自己的映射和减少函数。
答案 2 :(得分:3)
对于那些喜欢MOOC作为选项的人来说,Udacity上有Intro to Hadoop and Mapreduce,与Cloudera合作。在课程中,您有机会在本地安装Cloudera Hadoop Distribution虚拟机,并在样本数据集上执行一些map / reduce作业。 Hadoop Streaming用于与Hadoop集群交互,编程在Python中完成。
答案 3 :(得分:0)
为什么不从original work by google开始?因为这是每个人开始的地方。对于并行性,有许多不同的选项可供选择here
答案 4 :(得分:0)
http://blog.doughellmann.com/2009/04/implementing-mapreduce-with.html
Doug的解决方案不适合Google规模的制作,因为它只是Python多处理池的一个薄包装器(它只使用一台机器,尽管它可以在该机器上使用多个核心)。但这足以让你开始,而且很容易看出它在做什么。我想并行化神经网络
不容易。节点之间的通信比它的价值更麻烦。但是,您可以运行多个网络实例,以提高吞吐量。
ML问题通常很容易并行化 - 您在每个节点上运行不同的神经网络。渐变体面可能有点棘手,因为渐变体面非常线性,但您可以使用其他一些优化方法(尝试几种不同的步长,并选择哪种最佳)。
答案 5 :(得分:0)
好吧,我已经连续进行了4天的研究,最后我认为我已经介入了。请检查this repo。我认为这会有所帮助。