Phoenix索引构建最佳实践
用户福利
阿里云发布业界首款云原生多模数据库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生效。
优点:
- 简单,不占用客户端资源,整个build过程是在服务端完成的。
缺点:
- 调整参数需要重启queryserver生效,重启过程会导致线上服务临时中断
- 调整参数会对线上服务造成影响
如果有异常SQL导致的大请求会导致服务端负载高,调整了RPC超时时间, 一旦遇到这种请求,无法及时中断,可能对线上业务产生的影响。 - 无法控制并发,可能因为索引构建打爆服务器
同步构建-重客户端
重客户端适用于中小规模的数据构建,一般索引构建时间在10小时以内。
使用方式:
-
下载重客户端工具
- 部署在用户VPC下,机器配置大于等于4c8g;重客户端构建索引的过程中流量会经过这个节点,如果需要更快的索引构建,可以升级节点配置。
- 调整配置 bin/hbase-site.xml后,使用bin/sqline.py
-
集群地址
- hbase.zookeeper.quorum
zk 连接地址,注意使用VPC链接地址。
- hbase.zookeeper.quorum
-
并发数
- phoenix.query.threadPoolSize
并发数,越大对目标集群读写压力,可以从1开始逐步增加
- phoenix.query.threadPoolSize
-
超时配置
- 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环境准备
- 自建Hadoop或者购买EMR Hadoop集群
- 在MR环境中创建mr-phoenix-conf目录
- 配置云HBASE的zk到hbase-site.xml,并此配置文件添加到mr-phoenix-conf目录
云HBase的zk地址可以从控制台获取。 - 拷贝以下hadoop配置文件到mr-phoenix-conf目录下,包括: core-site.xml、mapred-site.xml、yarn-site.xml、hdfs-site.xml
- 修改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进行索引构建。
参考文档:

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Amazon Redshift数据迁移阿里云MaxCompute技术方案
1 方案概述 本文将介绍如何通过公网环境迁移Amazon Redshift数据到阿里云MaxCompute服务当中。 本方案的总体迁移流程如下: 第一, 将Amazon Redshift 中的数据导出到Amazon S3存储上; 第二, 借助阿里云在线迁移服务(Data Online Migration)从AWS S3将数据迁移到阿里云OSS上; 第三, 将数据从阿里云OSS加载到同Region的MaxCompute项目中,并进行校验数据完整性。 2 前提条件 · 准备Redshift的集群环境及数据环境; 使用已有的Redshift集群或创建新的Redshift集群: **** 在Redshift集群中准备好需要迁移的数据,本方案中在public schema中准备了TPC-H数据集进行方案介绍: · 准备MaxCompute的项目环境; 在阿里云Region创建MaxCompute项目,这里以新加坡Region为例,创建了作为迁移目标的MaxCompute项目: 3 Redshift导出数据到S3 3.1 Unload简介 3.1.1 命令介绍 AWS Redshift支持Role...
- 下一篇
搜“apple”不返回“Apple”?你需要了解 Elasticsearch Normalizer
作者介绍 魏彬,普翔科技 CTO,开源软件爱好者,中国第一位 Elastic 认证工程师,《Elastic日报》和 《ElasticTalk》社区项目发起人,被 elastic 中国公司授予 2019 年度合作伙伴架构师特别贡献奖。对 Elasticsearch、Kibana、Beats、Logstash、Grafana 等开源软件有丰富的实践经验,为零售、金融、保险、证券、科技等众多行业的客户提供过咨询和培训服务,帮助客户在实际业务中找准开源软件的定位,实现从 0 到 1 的落地、从 1 到 N 的拓展,产生实际的业务价值。 在 Elasticsearch 中处理字符串类型的数据时,如果我们想把整个字符串作为一个完整的 term 存储,我们通常会将其类型 type 设定为 keyword。但有时这种设定又会给我们带来麻烦,比如同一个数据再写入时由于没有做好清洗,导致大小写不一致,比如 apple、Apple两个实际都是 apple,但当我们去搜索 apple 时却无法返回 Apple 的文档。要解决这个问题,就需要 Normalizer 出场了。废话不多说,直接上手看! 一、上手 我...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS关闭SELinux安全模块
- CentOS7设置SWAP分区,小内存服务器的救世主
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- 设置Eclipse缩进为4个空格,增强代码规范
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2全家桶,快速入门学习开发网站教程