阿里云EMR异步构建云HBase二级索引

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 一、非HA EMR构建二级索引云HBase借助Phoenix实现二级索引功能,对于Phoenix二级索引的详细介绍可参考https://yq.aliyun.com/articles/536850?spm=a2c4e.11153940.blogrightarea544746.26.673e7308MxY7Lc当Phoenix表数据量较大时,可以选择异步构建索引方式,利用MR快速同步索引数据,同时降低HBase服务端负载。

一、非HA EMR构建二级索引

云HBase借助Phoenix实现二级索引功能,对于Phoenix二级索引的详细介绍可参考https://yq.aliyun.com/articles/536850?spm=a2c4e.11153940.blogrightarea544746.26.673e7308MxY7Lc
当Phoenix表数据量较大时,可以选择异步构建索引方式,利用MR快速同步索引数据,同时降低HBase服务端负载。
由于云HBase没有MR,需要借助外部计算引擎(自建Hadoop集群或者阿里云EMR),详细操作步骤可参考阿里云瑾谦大神的博客:https://yq.aliyun.com/articles/544746?spm=a2c4e.11153940.blogcont574090.11.28895835Lse5dN
这篇文章主要介绍在非HA的EMR环境下执行bulkload向phoenix表中批量入库,构建二级索引稍有不同,但大体上类类似,只不过将bulkload命令替换成二级索引构建命令:

    
yarn --config ${CONF_DIR}  jar ${PHOENIX_HOME}/phoenix-${version}-client.jar  org.apache.phoenix.mapreduce.index.IndexTool --data-table "TABLENAME"  --index-table "INDEXNAME"  --output-path "hdfs://hbase-cluster/path/"

${CONF_DIR}是需要创建的用户配置目录,用户需要把配置有云HBase zookeeper信息的hbase-site.xml和云HBase的hdfs-site.xml配置文件放在该目录下。
hbase-site.xml配置:

 
<configuration>
  <property>
    <name>hbase.zookeeper.quorum</name>
    <value>zk1,zk2,zk3</value>
   </property>
</configuration>

--data-table 是phoenix数据表的表名
--index-table是phoenix中已经创建好的索引表名
--output-path是云HBase集群hdfs的目录,要指定hdfs的nameservice,二级索引的数据本质还是利用BulkLoad生成,HFile文件存放在改目录下,然后再move到索引表中。

二、HA EMR构建二级索引

如果构建二级索引时EMR集群开启了HA,在使用上述步骤过程中,可能会遇到下面的问题:

这个问题原因是由于开启HA的EMR集群HDFS的nameservice名跟云HBase的HDFS的nameservice名相同导致的。
解决这个问题需要联系工作人员把云HBase集群HDFS的nameservice改掉(以hbase-cluster为例),并在EMR集群中把指定hdfs-site.xml配置修改为改动后的云HBase的nameservice名。
云HBase集群HDFS的nameservice修改完成后,可以按照以下步骤操作:

  1. 在EMR的客户机上新建配置目录,并将EMR集群的core-site.xml、hdfs-site.xml以及yarn-site.xml、mapred-site.xml拷贝到新建的配置目录。
  2. 修改hdfs-site.xml将EMR集群和云HBase集群的hdfs配置合并。
    原hdfs-site.xml已经有dfs.nameservices配置项,需要将云HBase的namesercie也添加到该配置,实例如下:
      <property>
          <name>dfs.nameservices</name>
          <value>emr-cluster,hbase-cluster</value>
      </property> 

// emr-cluster表示EMR集群的nameservice,hbase-cluster表示云HBase的nameservice
然后在hdfs-site.xml配置文件添加如下云HBase的配置:

   
        <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>{emr-header-1-host}:8020</value> 
         </property>  
         <property> 
               <name>dfs.namenode.rpc-address.hbase-cluster.nn2</name>  
               <value>{emr-header-2-host}:8020</value> 
          </property> 

//{emr-header-1-host}和{emr-header-2-host}为云HBase的主备节点的主机或IP,需联系工作人员获取
3.配置云HBase的zookeeper配置项
在第1步新建的配置目录下,增加hbase-site.xml配置

     <configuration>
        <property>
        <name>hbase.zookeeper.quorum</name>
        <value>zk1,zk2,zk3</value>
        </property>
  </configuration>

// zk1,zk2,zk3为云HBase的zookeeper配置,可在云HBase管理控制台查看。
4.执行异步构建索引命令实例

  yarn --config /etc/ecm/hbase-conf/  jar  /opt/alihbase-1.1.4/lib/phoenix-4.11.0-AliHBase-1.1-0.3-client.jar  org.apache.phoenix.mapreduce.index.IndexTool --data-table WEB_STAT  --index-table WEB_IDX  --output-path hdfs://hbase-cluster/tmp/WEB_STAT/1/ 

/etc/ecm/hbase-conf/为第1步新建配置目录
/opt/alihbase-1.1.4/lib/phoenix-4.11.0-AliHBase-1.1-0.3-client.jar为依赖phoenix client jar包
WEB_STAT为测试原表,WEB_IDX为异步索引表

常见问题:

  1. 如果运行bulkload或二级索引的mapreduce程序一直处于卡住状态,即map一直0%,最终失败。异常信息如下:
    image

image
解决办法:检查EMR集群的子节点是否加入到云HBase的白名单中。
2.如果EMR运行MR任务时Reduce运行过程中备Killed,日志信息出现“container killed on request.Exit code is 143"信息,如下图:
image
image
解决办法:原因是HBase表分区过多,EMR集群在配置较低情况下配置不太合理。修改下Yarn配置:


    <property>
      <name>yarn.nodemanager.vmem-check-enabled</name>
      <value>false</value>
      <description>Whether virtual memory limits will be enforced for containers</description>
    </property>
    <property>
       <name>yarn.nodemanager.vmem-pmem-ratio</name>
       <value>4</value>
       <description>Ratio between virtual memory to physical memory when setting memory limits for containers</description>
    </property>
相关实践学习
云数据库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
目录
相关文章
|
4月前
|
关系型数据库 MySQL BI
用友畅捷通基于阿里云 EMR StarRocks 搭建实时湖仓实战分享
本文从用友畅捷通公司介绍及业务背景;数据仓库技术选型、实际案例及未来规划等方面,分享了用友畅捷通基于阿里云 EMR StarRocks 搭建实时湖仓的实战经验。
602 0
用友畅捷通基于阿里云 EMR StarRocks 搭建实时湖仓实战分享
|
8月前
|
存储 SQL 分布式计算
阿里云全托管flink-vvp平台hudi connector实践(基于emr集群oss-hdfs存储)
阿里云全托管flink-vvp平台hudi sink connector实践,本文数据湖hudi基于阿里云E-MapReduce产品,以云对象存储oss-hdfs作为存储
|
11月前
|
SQL 存储 监控
水滴筹基于阿里云 EMR StarRocks 实战分享
水滴筹大数据部门的数据开发工程师韩园园老师为大家分享水滴筹基于阿里云EMR StarRocks的实战经验。
5781 3
水滴筹基于阿里云 EMR StarRocks 实战分享
|
SQL 存储 弹性计算
阿里云EMR 2.0:重新定义新一代开源大数据平台
本次分享主要介绍了阿里云E-MapReduce的开发历程,EMR 2.0的新特性、产品架构,以及EMR 2.0在平台体验、数据开发、资源形态及分析场景等方面的全面突破与创新,重新定义新一代开源大数据平台。
2134 0
阿里云EMR 2.0:重新定义新一代开源大数据平台
|
3月前
|
存储 分布式计算 Apache
阿里云 EMR 基于 Paimon 和 Hudi 构建 Streaming Lakehouse
Apache Paimon 和 Apache Hudi 作为数据湖存储格式,有着高吞吐的写入和低延迟的查询性能,是构建数据湖的常用组件。本文在阿里云EMR上,针对数据实时入湖场景,对 Paimon 和 Hudi 的性能进行比对,并分别以 Paimon 和 Hudi 作为统一存储搭建准实时数仓。
64622 1
阿里云 EMR 基于 Paimon 和 Hudi 构建 Streaming Lakehouse
|
4月前
|
存储 NoSQL 分布式数据库
Hbase的三种索引_全局索引,覆盖索引,本地索引(七)
Hbase的三种索引_全局索引,覆盖索引,本地索引(七)
69 0
|
4月前
|
SQL 分布式数据库 HIVE
Hbase二级索引_Hive on Hbase 及phoenix详解
Hbase二级索引_Hive on Hbase 及phoenix详解
44 0
|
8月前
|
SQL 分布式数据库 Apache
|
8月前
|
存储 分布式计算 大数据
CommunityOverCode Asia 精彩回顾|阿里云开源大数据 EMR 技术实践分享
阿里云开源大数据 EMR 在 CommunityOverCode Asia 的精彩分享。
558 0
|
存储 人工智能 运维
免费公测|阿里云EMR Serverless StarRocks 公测正式开启!
阿里云EMR Serverless StarRocks 免费公测已开启,向所有用户开放!您可通过EMR控制台直接创建实例,轻松体验全托管、免运维的服务。
3911 1
免费公测|阿里云EMR Serverless StarRocks 公测正式开启!

热门文章

最新文章