使用AllRowsReader读取行但从特定行开始

时间:2015-06-11 13:44:01

标签: java cassandra astyanax

我有一个批处理作业,使用in the Astyanax wiki所述的AllRowsReader读取Cassandra中的大约3300万行:

new AllRowsReader.Builder<>(getKeyspace(), columnFamily)
            .withPageSize(100)
            .withIncludeEmptyRows(false)
            .withConcurrencyLevel(1)
            .forEachRow(
                row -> {
                    try {
                        return processRow(row);
                    } catch (Exception e) {
                        LOG.error("Error while processing row!", e);
                        return false;
                    }
                }
            )
            .build()
            .call();

如果某种错误会导致批处理作业停止,我希望能够从它停止的行中读取并继续读取,这样我就不必再次从第一行开始读取。有没有快速简单的方法来做到这一点?

或者AllRowsReader是否适合这类任务?

1 个答案:

答案 0 :(得分:0)

由于没有人回答让我尝试这个。 Cassandra使用分区器来确定应该在哪个节点放置行。 主要有两种类型的分区器: 1)订购 2)无序

https://docs.datastax.com/en/cassandra/2.2/cassandra/architecture/archPartitionerAbout.html

如果是Ordered Partitioner,则根据字典顺序放置行。但是对于无序分区程序,您无法了解订单。

有序分区程序在cassandra中被视为反模式,因为它使集群分发变得非常困难。 https://docs.datastax.com/en/cassandra/2.2/cassandra/planning/planPlanningAntiPatterns.html

我假设您应该在代码中使用无序分区程序。所以目前没有办法告诉cassandra使用从这个特定行开始的无序分区器。

我希望这能回答你的问题