Apache Phoenix 与 Hbase Native API

Apache Phoenix vs Hbase Native API

我正在使用 Apache Phoenix 来简化我在 Hbase 上的数据 retrieval/update 操作。但我想知道从性能的角度哪个更好?使用 Hbase Native API 的 Phoenix 或自定义包装器?或者我们有没有其他不影响性能的方法?

在 Perfect world Native api 中会工作得更快,但您需要一直努力,因为为 Hbase 开发好的 api 它是一个单独的项目。大工程。

并且您需要对 map-reduce 和 hbase 内部流程有很好的了解。但 Phoenix 已经为您完成了这一切。 例如 Secondary Indexing 创建并自动维护主 table 的全局索引。 查询在效率更高时自动使用索引,将完整 table 扫描转换为点和范围扫描。 可以按升序或降序对多个列进行索引。 额外的 table 主列可以包含在索引中以形成覆盖索引。 有两种口味可供选择: mutable 数据的服务器端索引维护。 针对一次写入、仅追加用例优化的客户端索引维护。

Phoenix 还为您制作了跳过扫描 map-reduce。 还有更多……看这里 http://phoenix-hbase.blogspot.com/ or http://phoenix.apache.org/performance.html#

在 phoenix 下工作的团队花了很多时间来优化所有这些操作,如果你想用原生写 api。你必须确信你能做得更好。

作为另一种解决方案,您可以使用 Hive 或 SparkSQL。 但是Hive性能较差,Spark是独立集群,技术难度也比较大。

另外一个很好的技术就是高性能的SparkOnHbasehttp://blog.cloudera.com/blog/2014/12/new-in-cloudera-labs-sparkonhbase/ 这个速度更快,但更复杂。并且没有像索引和Hbase原生功能这样的好特性。所以你需要写它。

Phoenix 将是一个很好的选择,因为它通过更好地理解 Hbase 的内部工作原理,将类似 SQL 的查询转换为本机 HBase 调用。它将为您实施协处理器,为您维护索引,如果您计划通过 Hbase API 实施,这将是一个繁琐的过程。所以 phoenix 使 Hbase 查询的生活更轻松。由于它是由 salesforce 创建的,因此您可以为其提供担保。此外,它有很好的社区支持。