火花谓词下推不适用于phoenix hbase表

时间:2018-07-20 05:57:58

标签: apache-spark hadoop hive hbase phoenix

我正在进行spark-hive-hbase集成。这里使用了phoenix hbase表进行集成。

Phoenix : **apache-phoenix-4.14**
HBase   : **hbase-1.4**
spark   : **spark-2.3**
hive    : **1.2.1**

我正在使用Spark Thrift服务器,并使用 jdbc访问表。

我测试的几乎所有基本功能都运行良好。但是当我从spark 带有条件的地方提交查询时,它被提交给phoenix而没有where条件的查询,并且所有过滤都发生在spark侧。

如果表中有数十亿数据,我们将无法使用它。

示例:

Input-query: select * from hive_hbase where rowid=0;

Query-submitted: PhoenixQueryBuilder: Input query : select /*+ NO_CACHE  */ "rowid","load_date","cluster_id","status" from hive_hbase

是错误吗? 请建议是否有任何方法可以强制使用where condition(filter)提交查询(仅适用于jdbc)。

感谢与问候 拉胡尔

1 个答案:

答案 0 :(得分:1)

上述行为不是bug,而是spark的功能,它将确保不在DB端发生过滤器,而是在spark的末端完成过滤器,从而确保非行键过滤器的性能和执行可以快速完成。如果您仍然想为所有意图和目的推送谓词,则可以使用phoenix-spark或自己编辑spark的谓词下推代码。以下是供您参考的链接

  1. https://community.hortonworks.com/questions/87551/predicate-pushdown-support-in-hortonworks-hbase-co.html
  2. http://www.waitingforcode.com/apache-spark-sql/predicate-pushdown-spark-sql/read