我正在使用 Apache Phoenix 来简化我在 Hbase 上的数据检索/更新操作。但是我想从性能的角度知道哪一个会更好?Phoenix 或使用 Hbase Native API 的自定义包装器?还是我们有其他不影响性能的方法?
2 回答
在完美世界中,Native api 会运行得更快,但你需要一直努力,因为为 Hbase 开发好的 api 是一个单独的项目。大工程。
而且你需要对 map-reduce 和 hbase 内部流程有很好的理解。但是凤凰城已经为你做了这一切。例如,二级索引在主表上创建和自动维护全局索引。查询效率更高时会自动使用索引,将全表扫描转换为点扫描和范围扫描。多个列可以按升序或降序排序。额外的主表列可以包含在索引中以形成覆盖索引。有两种类型可供选择: 可变数据的服务器端索引维护。客户端索引维护针对一次写入、仅附加的用例进行了优化。
Phoenix还为您制作跳过扫描地图减少。还有更多...看这里http://phoenix-hbase.blogspot.com/或http://phoenix.apache.org/performance.html#
phoenix 下的团队花了很多时间来优化所有这些操作,如果你想用原生 api 编写。你必须确信你可以做得更好。
作为另一种解决方案,您可以使用 Hive 或 SparkSQL。但是 Hive 性能较差,Spark 是单独的集群,技术也很困难。
还有一个非常好的技术是高性能的 SparkOnHbase http://blog.cloudera.com/blog/2014/12/new-in-cloudera-labs-sparkonhbase/ 这个更快,但更复杂。并且没有像索引和 Hbase 原生函数这样的好特性。所以你需要写它。
Phoenix 将是一个很好的选择,因为它通过更好地理解 Hbase 的内部工作原理,将类似 SQL 的查询转换为本地 HBase 调用。它将为您实现协处理器,为您维护索引,如果您计划通过 Hbase API 来实现,这将是一个繁琐的过程。因此,phoenix 使 Hbase 查询的生活变得更加轻松。由于它是由 salesforce 创建的,因此您可以担保它。此外,它有良好的社区支持。