我想用字符串列表填充cassandra数据库,然后使用hadoop处理这些字符串。我要做的是使用hadoop集群按顺序遍历所有字符串,并记录每个字符串之间有多少重叠,以便找到最长的公共子字符串。我的问题是,inputformat对象是否允许我按排序的顺序读取数据,或者在集群中的每台机器上“随机”(根据cassandra决定如何分配字符串)读取字符串?mapreduce进程设计为自己处理每一行,而不是像我所要求的那样连续地查看两行吗?
ffvjumwh1#
首先,Map程序将以从inputformat获取数据的任何顺序读取数据。我不是一个CassandraMaven,但我不认为这将是排序。如果您想要排序的顺序,您应该使用一个标识Map器(一个什么也不做的Map器),它的输出键是字符串本身。然后在传递到reduce步骤之前对它们进行排序。但它变得有点复杂,因为你可以有一个以上的减速器。只有一个减速机,一切都是全局排序。对于多个减速机,每个减速机的输入都会被排序,但是跨减速机的输入可能不会被排序。也就是说,相邻的字符串可能不属于同一个减速机。你需要一个自定义分区器来处理这个问题。最后,你提到你正在做最长的公共子串-你在寻找每对字符串中最长的子串吗?在连续的一对弦中?在所有的弦中?这些可能性中的每一个都会影响您需要如何构造mapreduce工作。
1条答案
按热度按时间ffvjumwh1#
首先,Map程序将以从inputformat获取数据的任何顺序读取数据。我不是一个CassandraMaven,但我不认为这将是排序。
如果您想要排序的顺序,您应该使用一个标识Map器(一个什么也不做的Map器),它的输出键是字符串本身。然后在传递到reduce步骤之前对它们进行排序。但它变得有点复杂,因为你可以有一个以上的减速器。只有一个减速机,一切都是全局排序。对于多个减速机,每个减速机的输入都会被排序,但是跨减速机的输入可能不会被排序。也就是说,相邻的字符串可能不属于同一个减速机。你需要一个自定义分区器来处理这个问题。
最后,你提到你正在做最长的公共子串-你在寻找每对字符串中最长的子串吗?在连续的一对弦中?在所有的弦中?这些可能性中的每一个都会影响您需要如何构造mapreduce工作。