我需要根据时间范围获取数据。是否有任何方法根据时间范围对hbase表进行分区。例如:我想要从9点到9点05分的数据。Hbase表可以基于时间进行分区吗?
回答
您可以将时间戳作为密钥的第一部分。显然,缺点是你不能再直接查询其他密钥。如果你也需要这些,你可以考虑复制你的数据,如果这些对你来说都很重要的话。
对我来说,问题是重复的条目。我可以同时发生许多事件。例如:我可以在10:05发生10个事件。如果我将它转换为纪元时间并插入它,它们可以在hbase中相互覆盖(或无法写入)。
我可以附加一个ID与时间戳,但我可以设置开始和结束时间mapreduce作业,如果我添加此ID?
您可以创建类型为<timestamp><id>
的复合密钥,然后hbase中的所有条目将按时间戳排序。然后,您可以创建一个扫描仪,该扫描仪在范围的开始处开始,并在范围的末尾结束。
您可能会遇到的一个问题是,如果您的插入率很高,那么您将有一台服务器成为所有新条目的热点。解决方法之一是反转键,并确保第一部分是随机的:<sha1 of ID><timestamp>
。这具有在整个集群中分布写入的优点,但是需要读取整个表以获得特定范围的缺点。
如果您使用第一种方法<timestamp><id>
,那么您的地图作业可能无法将作品拆分为尽可能多的块。默认方式表拆分工作在区域上。如果时间片足够小,则可以让一个区域服务于数据,而不会在查询中获得任何并行性。您可能会有一个自定义表格拆分,将查询并行化到比地区更多的映射器上,但是您仍然会读取来自一个区域的所有数据,并且也可能具有并行性的缺点。
设置表格的方式取决于您的预计使用场景和读写比例以及您需要为每个表现设置多高。
如果您追加一个id到您的时间戳以确保唯一性,那么您仍然可以让扫描仪返回具有给定时间戳的所有事件。 HBase根据字节表示对光标进行排序。因此,如果您的密钥是<timestamp>:<id>
,您可以将扫描仪设置为从第<timestamp>
行开始,并停止在<timestamp+1>
的行以获取该时间戳的所有事件
- 1. 我可以在awk中进行基于时间的进度吗?
- 2. 我可以在SQL Server的时区之间进行转换吗?
- 3. 基于时间参考的Mysql分区
- 4. 加入相关实体时可以指定基于日期的分区键吗?
- 5. 基于元组中的值对列表进行分区 - Python
- 6. 基于列和时间戳的Hbase筛选器行
- 7. 访问HBase的表从蜂巢基于时间戳
- 8. 我可以对C#System.Threading.ThreadPool进行分区吗?
- 9. 我应该对表格进行分区/子分区吗?
- 10. 使用HBase进行分析
- 11. Oracle 10g分区:我可以分区一个子表吗?
- 12. Sql服务器表分区 - 我可以在服务器之间分配表吗?
- 13. 基于C++时区的时间
- 14. 有人可以分享基于GTX 580的基准排序吗?
- 15. 基于Unix时代的Oracle范围分区时间戳
- 16. 基于cron作业时间还是基于服务器时区?
- 17. 对表进行分区
- 18. Google App Engine中可以进行长时间轮询吗?
- 19. 使用Hbase进入Hive可能吗?
- 20. MySQL:可以同时进行三个分页(INSERT,SELECT,INSERT)吗?
- 21. 我可以使用Corona SDK进行实时音频分析吗?
- 22. 我可以在分析时进行调试吗?
- 23. 如何可以平行为MySQL分区表的每个分区
- 24. 我可以查看cin缓冲区以进行调试吗?
- 25. Ruby on Rails可以通过多个路径进行一个动作,同时可以区分动作吗?
- 26. 基于投影点对时间间隔进行分组的最佳方式
- 27. 使用基于时间间隔的分组进行数据清理 - sql2005
- 28. Rabbitmq消息与基于Java API的消息ID进行区分
- 29. 基于标签对NumPy数组进行分区
- 30. PHP RSS基于时间表