Hadoop Hbase上的phoenix和hive ETL

Hadoop Hbase上的phoenix和hive ETL,hadoop,hive,hbase,phoenix,Hadoop,Hive,Hbase,Phoenix,phoenix是否可用于ETL和聚合 我正在尝试对我的数据进行一些ETL。现在我正在使用hbase来存储我的数据(在我们的网站上)。我需要对这些数据做一些聚合,比如每个url上的页面视图…等等 根据我的研究,我知道hive可以用于hbase数据的ETL,加上hql提供了sql语言,所以我们不需要自己编写map reduce代码。但当我尝试使用hive(pyhive)查询hbase时,需要很长时间才能完成。此外,如果我有phoenix在hbase上执行sql,那么我的hbase上还需要配置单元吗

phoenix是否可用于ETL和聚合

我正在尝试对我的数据进行一些ETL。现在我正在使用hbase来存储我的数据(在我们的网站上)。我需要对这些数据做一些聚合,比如每个url上的页面视图…等等

根据我的研究,我知道hive可以用于hbase数据的ETL,加上hql提供了sql语言,所以我们不需要自己编写map reduce代码。但当我尝试使用hive(pyhive)查询hbase时,需要很长时间才能完成。此外,如果我有phoenix在hbase上执行sql,那么我的hbase上还需要配置单元吗


现在,当我尝试使用一些复杂的sql时,phoenix将超时。而且蜂巢非常非常慢。那么,对hbase数据进行ETL的好方法是什么呢?

如果您有OLTP类型的查询,那么hbase是一个合适的选择,即您的查询模式仅限于点获取或小范围查询

Phoenix只是HBase之上的一个SQL层,它提供了用户使用SQL构造在HBase中查询数据的能力

当您提交任何SQL查询时,Phoenix将对其进行解析并创建一个执行计划,该计划可以根据您查询的内容将查询分为完全扫描、范围扫描或点获取

对于处理结果,Phoenix使用谓词下推,因此HBase执行所有处理(扫描并从所有RegionServer获取必要的行),Phoenix聚合/整理结果行并将其返回给用户

现在回答您的问题“phoenix是否适合ETL和聚合?”——如果您需要对聚合执行大扫描(全范围或大范围扫描),并希望在几秒钟或几秒钟内处理结果,则不适合。如果您的表占用空间很小(几百GB),这些查询可能工作得很好,但是随着时间的推移,表的大小会增加,最终会导致严重的性能问题。 这是OLAP场景,您应该寻找其他替代方案

我假设,当您说将Hive与HBase一起使用时,您计划在HBase表之上创建一个Hive外部表,该表可以使用HiveHBaseTableInputFormat直接查询HFiles。 这将使用MapReduce来处理查询,您无法通过分区、bucketing等来真正利用性能优化

我建议考虑使用Hbas+PHONE选项进行点获取和小范围查询,对于大型聚集/ETL类型查询,考虑使用SCAK,它将比HIVE选项更好和更快。 < >如果你的数据只是附加的,你可以考虑使用一些备用的OLAP支持存储选项,如Driud、CalkHoo/HiVe、Tez、iFiLA或Prestor选项,而不是HBASE.

根据评论更新-

Spark将比Hive(MapReduce)选项更快;Spark仅用于使用大范围或完全扫描,然后进行聚合的查询

尽管Phoenix利用协处理器和谓词下推到HBase区域,但可用资源的数量可能会成为一个限制,Phoenix将以块的形式并行化查询,这些块由GUIDE_POSTS_WIDTH决定,对于大型表,这很容易从几个100到1000,并为RPC队列创建争用,此外,在扫描过程中,将在regionserver堆中读取和加载HFiles,如果扫描结果无法在分配的堆中匹配,则可能会遇到GC或OOM问题。扫描仪可能会受到rpc等待时间和可用内存的限制,从而导致超时

您可以在一定程度上调整上述情况,但HBase/Phoenix不适用于OLAP。使用Spark,您可以直接读取HFiles,然后应用过滤器,这将消除超时问题。如果一次又一次地查询相同的数据子集,您可以尝试使用外部rdd/dataframe缓存点燃

我想补充一点,在寻找替代方案之前,您应该分析如何在HBase中存储数据,它是否与您的查询模式一致?重新检查行键设计如果查询计划正在创建完全扫描,请尝试重新设计行键或查询以避免完全扫描?检查您的数据是否分布在所有地区?您的高写入速率会影响您的读取性能吗

如果您有需要分析的clickstream类型的数据,请查看Clickhouse,Yandex为类似用例开发并开源了它,但它也适用于其他OLAP用例


希望这对您有所帮助。

谢谢您的回答。您能否详细说明spark在hbase上如何比Phoenix更适合聚合?例如,如果我想计算每个URL(组和计数)的页面浏览量,为什么Phoenix在执行此任务时会出现性能问题,以及spark如何提供帮助。我想既然Phoenix会使用HBase的region server,速度可能会更快。@I-PINGOu-根据我掌握的有关您的数据和查询的有限信息更新了我的答案,希望对您有所帮助。