Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MapReduce结果的增量更新_Java_Search_Hadoop_Mapreduce_Hbase - Fatal编程技术网

Java MapReduce结果的增量更新

Java MapReduce结果的增量更新,java,search,hadoop,mapreduce,hbase,Java,Search,Hadoop,Mapreduce,Hbase,我有一个MapReduce作业,它在HBase中填充搜索索引。此MapReduce作业每天在完整的数据集上运行。有没有办法对上次计算索引后到达的新数据运行MapReduce,然后在HBase中正确更新搜索索引?如果原始数据保存在HBase中,您可以设计密钥,以便按时间对行进行排序。然后可以使用定义为昨天扫描的最后一行+1的起始行扫描表。你也可以让钥匙从一天开始。由于行是按键排序的,所以您可以轻松地从所需日期的第一行开始,然后在第二天停止 如果将行创建为: long currentTimeMS =

我有一个MapReduce作业,它在HBase中填充搜索索引。此MapReduce作业每天在完整的数据集上运行。有没有办法对上次计算索引后到达的新数据运行MapReduce,然后在HBase中正确更新搜索索引?

如果原始数据保存在HBase中,您可以设计密钥,以便按时间对行进行排序。然后可以使用定义为昨天扫描的最后一行+1的起始行扫描表。你也可以让钥匙从一天开始。由于行是按键排序的,所以您可以轻松地从所需日期的第一行开始,然后在第二天停止

如果将行创建为:

long currentTimeMS = System.currentTimeMillis();
long currentDay = currentTimeMS / (1000 * 60 * 60 * 60 * 24);
Put put = new Put(Bytes.add(Bytes.toBytes(currentDay), "some other key stuff".getBytes()));
// add columns...
hbaseTable.put(put);
您可以使用以下工具扫描一天的数据:

long currentDay = currentTimeMS / (1000 * 60 * 60 * 60 * 24);
long yesterday = currentDay - 1;

Scan dayScan = new Scan(); 
dayScan.setStartRow(Bytes.toBytes(yesterday));
dayScan.setStopRow(Bytes.toBytes(currentDay));
// create map reduce job with dayScan
有一些类似的库可以简化时间计算,使代码更具可读性

你也可以尝试类似的结果。但这假设您插入并且从不更新源行,因为它实际上是在列版本的udpate时间运行的。由于按行键排序,数据可能不紧密,因此速度也可能较慢。总的来说,这似乎不是推荐的方式。但对于快速而肮脏的原型,它是有效的


如果您直接从HDFS扫描数据,那么您可以通过每天将数据保存到不同的目录来实现类似的功能。然后,您只能扫描昨天的目录,而不能扫描其他内容。

虽然我们可以使用您的方法从MapReduce作业中读取新数据……但我们如何将结果与以前计算的结果合并?这是我真正的问题…如果这不清楚,我道歉,这取决于你的结果。如果它们真的很大,您可能需要第二个MapReduce作业来组合它们。如果它们很小,您可以更新并将结果保存到某个地方。有关实际数据的更多信息将有助于找出最佳解决方案。在我生成反向索引进行搜索的情况下,使用第二个mapreduce作业实际上可能有效……此新作业可以合并索引您是否考虑使用Sqoop?Sqoop现在支持两种类型的增量udpate:LastValue和Last modified。