在 HBase 中,使用Get
或Scan
获取数据,而在 RDBMS 中使用 SQL 查询。为了仅获取相关数据,使用 HBase 过滤器进行过滤,而在 RDBMS 中使用WHERE
谓词。
获取数据后,您可以对其执行计算。这种范例适用于具有几千行和多列的“小数据”。但是,当您扩展到数十亿行和数百万列时,在网络中移动大量数据将在网络层产生瓶颈,客户端需要足够强大并且有足够的内存来处理大量数据和计算。此外,客户端代码可能变得庞大而复杂。
在这种情况下,协处理器可能有意义。您可以将业务计算代码放入在 RegionServer 上运行的协处理器中,与数据位于同一位置,并将结果返回给客户端。
这只是使用协处理器可以带来好处的一种情况。以下是一些类比,可能有助于解释协处理器的一些好处。
触发器和存储过程
Observer 协处理器类似于 RDBMS 中的触发器,因为它在特定事件(例如Get
或Put
)发生之前或之后执行代码。端点协处理器类似于 RDBMS 中的存储过程,因为它允许您对 RegionServer 本身而不是客户端上的数据执行自定义计算。
MapReduce 的
MapReduce 的工作原理是将计算移动到数据的位置。协处理器在相同的主体上运行。
AOP
如果您熟悉面向方面编程(AOP),您可以将协处理器视为通过拦截请求然后运行一些自定义代码来应用建议,然后将请求传递到其最终目标(甚至更改目标)。
你的类应该实现一个协处理器接口 - 协处理器, RegionObserver , CoprocessorService - 仅举几例。
使用 HBase Shell 静态(从配置)或动态加载协处理器。有关详细信息,请参阅加载协处理器。
从客户端代码调用协处理器。 HBase 透明地处理协处理器。
框架 API 在协处理器包中提供。