综观MapReduce和HBase的从一个数据流的角度看的组合,我的问题似乎适合。我有一大套,我要地图,合并和减少文件。我以前的SQL执行是任务拆分为批量操作,累积地存储这将是映射到表中的结果,然后执行的减少相当。这有这样的在执行(或执行之间)期间的任何时刻,我有地图的结果在该时间点的益处。

据我了解,运行此工作作为MapReduce的将要求所有的地图功能,以每次运行。

我的地图功能(实际上任何功能)总是给出对于给定的输入相同的输出。有简单地重新计算输出是没有意义的,如果我没有。我输入(一组文档)将不断增长,我会定期运行MapReduce的我在操作中的数据。执行之间我只能真的来计算地图功能新增加的文件。

我的数据将可能是HBase的 - >的MapReduce - > HBase的。鉴于Hadoop是一个整个生态系统,它也许能知道一个给定的功能已经应用到一排一个给定的身份。我假设在HBase的表不变条目。并/可HADOOP考虑到这一点?

我意识到从重新计算(可能的冗余数据)的文件(特别是Cloudera的视频)可以比持续和检索的类的问题,即正被用于的Hadoop更快。

任何意见/答案?

有帮助吗?

解决方案

如果你正在寻找避免运行地图每次步骤,打破它作为自己的步骤(无论是通过使用IdentityReducer或设置减速作业0的数)并运行后使用输出的步骤地图步骤。

这是否实际上快于从每个时间取决于体积和形状的输入数据的与所述输出数据对原始数据重新计算,地图步骤的复杂程度,等等。

请注意,在新的数据集上运行你的映射器不会追加到以前运行 - 但你可以通过使用过时的输出文件夹中解决这个问题。这是说,你可以存储映射你的第一个批处理文件中my_mapper_output/20091101的输出,以及下周的一批my_mapper_output/20091108等,如果你想减少在整个集,你应该能够在my_mapper_output通过作为输入文件夹,并捕获所有输出集合。

其他提示

为什么不能在不同的环境中应用的SQL的工作流程?这意味着,添加一个“处理”列到你的输入表。当时间来运行一个总结,运行流水线去是这样的:

地图上(!通过处理滤波的输入表)(map_function);存储到map_outputs无论是在HBase的或简单地HDFS。

地图上(map_outputs)(降低功能);存储到HBase的。

您可以让生活轻松一点,假设你存储你在HBase的数据通过插入日期排序,如果记录总结成功运行的地方时间戳,然后打开过滤器上的日期晚于最后一次成功总结输入 - 你会节省一些显著扫描时间。

下面是一个说明一个公司如何架构的工作流程(虽然他们并不使用HBase的)一个有趣的演示: HTTP://www.scribd。 COM / DOC / 20971412 / Hadoop的世界生产深潜水与 - 高可用性

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top