云HBase Phoenix索引构建最佳实践

本文涉及的产品
云原生多模数据库 Lindorm,多引擎 多规格 0-4节点
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 介绍三种的不同的索引构建方法及其适用场景

用户福利

阿里云发布业界首款云原生多模数据库Lindorm,新用户可享9.9元/3个月优惠,技术交流钉钉群:35977898,更多内容请参考链接

背景

Phoenix的索引构建有两类方法:

  • 同步构建,直接通过sqlline.py create index构建
    在云HBase Phoenix 5.x之后,同步构建可以通过轻客户端或重客户端来构建。
  • 异步构建,先create index ... async, 然后通过MR提交build索引job。

因此我们有三种方式构建索引:轻客户端、重客户端、MR异步构建,我们依次介绍下各种方案的优缺点、适用场景和使用方法。

同步构建-轻客户端

适用与数据量比较小,一般构建耗时在10分钟以内。
使用方式: 直接使用轻客户端, sqlline-thin.py , create index 即可。

如果数据量较大,我们很可能会遇到索引build超时,我们释放调整Phoenix hbase.rpc.timeout、hbase.client.scanner.timeout.period、phoenix.query.timeoutMs 配置,重启Queryserver生效。

优点:

  1. 简单,不占用客户端资源,整个build过程是在服务端完成的。

缺点:

  1. 调整参数需要重启queryserver生效,重启过程会导致线上服务临时中断
  2. 调整参数会对线上服务造成影响
    如果有异常SQL导致的大请求会导致服务端负载高,调整了RPC超时时间, 一旦遇到这种请求,无法及时中断,可能对线上业务产生的影响。
  3. 无法控制并发,可能因为索引构建打爆服务器

同步构建-重客户端

重客户端适用于中小规模的数据构建,一般索引构建时间在10小时以内。

使用方式:

  1. 下载重客户端工具

    1. 部署在用户VPC下,机器配置大于等于4c8g;重客户端构建索引的过程中流量会经过这个节点,如果需要更快的索引构建,可以升级节点配置。
  2. 调整配置 bin/hbase-site.xml后,使用bin/sqline.py
  • 集群地址

    • hbase.zookeeper.quorum

      zk 连接地址,注意使用VPC链接地址。

  • 并发数

    • phoenix.query.threadPoolSize

      并发数,越大对目标集群读写压力,可以从1开始逐步增加

  • 超时配置

    • phoenix.query.keepAliveMs
    • hbase.rpc.timeout
    • hbase.client.scanner.timeout.period
    • phoenix.query.timeoutMs

      超时时间单位是ms, 可以按需调整。

for ex:


 <property>
        <name>hbase.zookeeper.quorum</name>
        <value>master1-1,master2-1,master3-1:2181</value>
</property>
<property>
        <name>phoenix.query.threadPoolSize</name>
        <value>1</value>
</property>
<property>
    <name>phoenix.query.keepAliveMs</name>
    <value>60000000</value>
</property>
<property>
    <name>hbase.rpc.timeout</name>
    <value>60000000</value>
</property>
<property>
    <name>hbase.client.scanner.timeout.period</name>
    <value>60000000</value>
</property>
<property>
    <name>phoenix.query.timeoutMs</name>
    <value>60000000</value>
</property>

优点:

  • 灵活,并发、超时时间可以按需调整,无需重启Phoenix集群,对线上服务影响小

缺点:

  • 需要单独build索引的资源机器
  • 受制于build索引机器的单机性能,扩展性差。

异步构建-MR

MR索引构建适用于超大规模数据的情况。

使用方式:

  • 异步索引构建方案

    • 创建异步索引
      CREATE INDEX async_index ON my_schema.my_table (v) ASYNC
    • 提交MR JOB build 索引
hadoop  --config /mr-phoenix-conf jar \
/mr-phoenix-conf/ali-phoenix-5.2.4.1-HBase-2.x-client.jar   \
org.apache.phoenix.mapreduce.index.IndexTool \
--data-table {DATA_TABLE_XXXX} \
--index-table {INDEX_XXX} \
--output-path hdfs://hbase-cluster/ASYNC_INDEX_TMP

ps: ali-phoenix-client获取,先下载重客户端包,解压后,取ali-phoenix-xxxx-HBase-2.x-client.jar

  • 索引Build MR环境准备
  1. 自建Hadoop或者购买EMR Hadoop集群
  2. 在MR环境中创建mr-phoenix-conf目录
  3. 配置云HBASE的zk到hbase-site.xml,并此配置文件添加到mr-phoenix-conf目录
    云HBase的zk地址可以从控制台获取。
  4. 拷贝以下hadoop配置文件到mr-phoenix-conf目录下,包括: core-site.xml、mapred-site.xml、yarn-site.xml、hdfs-site.xml
  5. 修改hdfs-site.xml(mr-phoenix-conf目录下) 增加hbase hdfs访问能力。
    云HBase HDFS开端口和NN地址获取,找@云HBase答疑协助。
  • 修改dfs.nameservices 增加hbase-cluster
  • 增加hbase-cluster hdfs相关配置

EMR集群打通HBase集群参考配置

  <property>
    <name>dfs.nameservices</name>
    <value>emr-cluster,hbase-cluster</value>
  </property>
  <property>
    <name>dfs.client.failover.proxy.provider.hbase-cluster</name>
    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
  </property>

  <property>
    <name>dfs.ha.automatic-failover.enabled.hbase-cluster</name>
    <value>true</value>
  </property>

  <property>
    <name>dfs.ha.namenodes.hbase-cluster</name>
    <value>nn1,nn2</value>
  </property>
  <property>
    <name>dfs.namenode.rpc-address.hbase-cluster.nn1</name>
    <value>${nn1-host}:8020</value>
  </property>
  <property>
    <name>dfs.namenode.rpc-address.hbase-cluster.nn2</name>
    <value>${nn2-host}:8020</value>
  </property>

优点:

  • 可以对任意规模数据进行索引构建, 扩展性强

缺点:

  • 需要准备单独build资源
  • 相对复杂

总结

适用数据量 优点 缺点
轻客户端 0~10GB 简单,无需额外资源 配置参数调整会影响线上服务
重客户端 10GB-512GB 可以灵活配置并发、超时参数,无需重启Phoenix集群 需要单独的构建索引的机器,受制于单机性能
MR异步构建 512GB~TB级 适用于任意规模索引构建,扩展性强 额外MR资源、MR集群配置复杂

一般少量数据直接用轻客户端来做索引构建,对于中小规模的数据推荐用重客户端来构建索引,而大规模数据则推荐用MR进行索引构建。

参考文档:

相关实践学习
lindorm多模间数据无缝流转
展现了Lindorm多模融合能力——用kafka API写入,无缝流转在各引擎内进行数据存储和计算的实验。
云数据库HBase版使用教程
&nbsp; 相关的阿里云产品:云数据库 HBase 版 面向大数据领域的一站式NoSQL服务,100%兼容开源HBase并深度扩展,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库,是为淘宝、支付宝、菜鸟等众多阿里核心业务提供关键支撑的数据库。 了解产品详情:&nbsp;https://cn.aliyun.com/product/hbase &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
2月前
|
存储 分布式计算 分布式数据库
深入理解Apache HBase:构建大数据时代的基石
在大数据时代,数据的存储和管理成为了企业面临的一大挑战。随着数据量的急剧增长和数据结构的多样化,传统的关系型数据库(如RDBMS)逐渐显现出局限性。
336 12
|
4月前
|
存储 Java 分布式数据库
HBase构建图片视频数据的统一存储检索
HBase构建图片视频数据的统一存储检索
|
11月前
|
分布式计算 分布式数据库 Docker
docker 构建 hbase 容器
docker 构建 hbase 容器
292 1
|
6月前
|
存储 NoSQL 分布式数据库
Hbase的三种索引_全局索引,覆盖索引,本地索引(七)
Hbase的三种索引_全局索引,覆盖索引,本地索引(七)
171 0
|
6月前
|
SQL 分布式数据库 HIVE
Hbase二级索引_Hive on Hbase 及phoenix详解
Hbase二级索引_Hive on Hbase 及phoenix详解
77 0
|
SQL 分布式数据库 Apache
|
存储 搜索推荐 Java
如何基于 HBase 构建图片、视频数据的统一存储检索方案|学习笔记
快速学习如何基于 HBase 构建图片、视频数据的统一存储检索方案
如何基于 HBase 构建图片、视频数据的统一存储检索方案|学习笔记
|
分布式数据库 索引 Hbase
《HBase应用与发展之HBase RowKey与索引设计》电子版地址
HBase应用与发展之HBase RowKey与索引设计
122 0
《HBase应用与发展之HBase RowKey与索引设计》电子版地址
|
分布式计算 数据处理 分布式数据库
《基于HBase和Spark构建企业级数据处理平台》电子版地址
基于HBase和Spark构建企业级数据处理平台
108 0
《基于HBase和Spark构建企业级数据处理平台》电子版地址
|
分布式数据库 Hbase