0

我想用一个字符串列表填充 Cassandra 数据库,然后使用 Hadoop 处理这些字符串。我想要做的是使用 Hadoop 集群依次遍历所有字符串,并记录每个字符串之间有多少重叠,以便找到最长的公共子字符串。

我的问题是,InputFormat 对象是否允许我按排序顺序读出数据,或者我的字符串是否会在集群中的每台机器上“随机”读出(根据 Cassandra 决定分配它们的方式)?MapReduce 流程是否旨在自行处理每一行,而不会像我要求的那样连续查看两行?

4

1 回答 1

1

首先,映射器将按照从 InputFormat 中获取数据的任何顺序读取数据。我不是 Cassandra 专家,但我不希望这会按顺序排列。

如果你想要排序顺序,你应该使用一个身份映射器(一个什么都不做),它的输出键是字符串本身。然后它们将在传递到reduce步骤之前进行排序。但它变得有点复杂,因为你可以拥有多个减速器。只有一个 reducer,所有东西都是全局排序的。如果有多个,每个 reducer 的输入都会被排序,但跨 reducer 的输入可能不会被排序。也就是说,相邻的字符串可能不会进入同一个 reducer。您需要一个自定义分区器来处理它。

最后,你提到你正在做最长的公共子串——你是在寻找每对字符串中最长的子串吗?在连续的字符串对中?在所有字符串中?这些可能性中的每一种都会影响您需要如何构建 MapReduce 作业。

于 2012-12-31T22:14:52.180 回答