2012-06-01 44 views
2

我是hadoop mapreduce框架的新手。我自己阅读了很多教程并理解了框架。我已经成功配置了伪分布式模式的hadoop设置。我有两个特定的任务需要在Hadoop MapReduce中完成。Hadoop MapReduce思维

我有很多很多数据文件,格式如下。

交换消息的数量; USER1;用户2;时间戳;

一个例子是:5; John Doe;约翰·史密斯; 1/1/1900;

我想什么来完成是

  1. 做数据上的用户名遮蔽(像用户名上构建SHA256,所以他们是匿名的。)

  2. 聚集的数交换在一定时期内的消息(比如一周)

现在让我们来对我的问题: 据我目前所知,该hadoop mapreduce框架旨在完成第二项任务。我可以映射键值(两个用户名之间交换消息,消息的数量),并减少它获得在给定的时间段内(例如1周)的消息总数。但是第一项任务呢?当我做数据屏蔽时,没有减少操作,这个任务不是hadoop mapreduce的东西吗?我想要并行执行,但不能真正想到应用hadoop mapreduce来完成第一项任务。我需要处理的数据文件数量非常大,因此无论如何都会考虑使用hadoop mapreduce。

感谢您的意见!

P.S .:这个问题可以概括为“哪种类型的任务是hadoop MapReduce最适合的?”

+0

为什么你不能做地图部分做转换? Map/Reduce的Map部分也可以用来转换数据,所以你的任务是:Map - > Record to#;编码用户1;编码用户2;日期。 Reduce会将它转换成你需要的统计数字 – abatyuk

+0

你说得对,我只能做地图部分。当我只做地图部分时,是否是一种很好的方法,将被屏蔽的记录文件存储回HDFS,并再次读取它以在被屏蔽的记录上执行减少作业?主内存不能保存整个数据集。 – Bob

+0

据我了解,reducer等待mappers完成他们的工作,在我的情况下意味着所有的数据文件都必须进行转换。你能解释一下你在想的工作流程吗? – Bob

回答

2

第一个任务是一个完美适合只有地图的工作。 MapReduce通常适用于排序,映射(对数据应用一些奇特功能)并减少数据。

所以你的问题很适合MR。

如果您需要强大的任务之间的通信或迭代繁重的任务(如图算法),MapReduce并不适合。因为BSP最适合,所以您可以选择Hama或Giraph,而Giraph提供主要的图形处理,而Hama则是纯粹的BSP框架,它也具有图形处理模块。

+0

我可以分开地图并相互减少吗?我以为我总是需要在启动一切的驱动程序类的同时实现映射器和减速器? – Bob

+1

您可以运行映射器。但是,如果你只需要一个减速器,你必须运行马歇尔。驱动程序类只是设置作业,在那里您可以将numReduceTasks设置为零并且不定义reduce类。 –