我对 HBase 的经验有限,我需要定期(每天)从给定表中检索数据,以便生成某种摘要。
问题在于,在我的初始测试中,我首先尝试使用 HBase shell在时间范围内获取一组行,如下所示:
$ echo "scan 'MyTable', {TIMERANGE => [1531132013466,1531133000000]}" | hbase shell | tee MyTable.dat
我在MyTable.dat文件中获得了该时间戳记间隔的行内容。这些数据恰好是添加到表中的最后一个数据。
关键是我想在Python中使用 HBase REST API 来做到这一点。如果我请求一个没有任何属性的 scanner (PUT
),但批大小为1000(<Scanner batch="1000"/>
)除外,那么我会得到REST API提供的扫描器的位置,我可以重复执行GET
请求,从表的开头获取一堆数据……(尽管扫描器在到达所需的行之前已经精疲力尽)。
但是,如果我做同样的事情,指定上面的时间范围(<Scanner batch="1000" startTime="1531132013466" endTime="1531133000000"/>
),并且我从返回的位置(扫描仪)请求数据,则我必须等待很多时间(表中有很多行) ,这些是最后一个数据),但最后我得到一个 HTTP 204 错误代码,这意味着扫描仪已耗尽。
对 curl 执行相同操作可复制Python代码的行为,即
我在做什么错?感觉整个表都可以通过 HBase 外壳寻址,但是不能通过 REST API 调用来寻址...