返回顶部
首页 > 资讯 > 数据库 >[平台建设] HBase平台建设实践
  • 936
分享到

[平台建设] HBase平台建设实践

[平台建设]HBase平台建设实践 2019-09-29 00:09:12 936人浏览 猪猪侠
摘要

本文主要介绍HBase平台的建设思路及设计, 并对跨集群数据迁移实践进行总结 背景 由于公司业务场景的需要,我们需要开发HBase平台,主要需要以下功能: 建表管理 授权管理 SDK实现 与

[平台建设] HBase平台建设实践

本文主要介绍HBase平台的建设思路及设计, 并对跨集群数据迁移实践进行总结

背景

由于公司业务场景的需要,我们需要开发HBase平台,主要需要以下功能:

  • 建表管理
  • 授权管理
  • SDK实现
  • 与公司内部系统打通

我们使用的HBase 版本:

HBase 1.2.0-cdh5.16.2

hadoop: 2.6.0-cdh5.16.2

目前主要应用场景:

  • 实时计算如商品、商家等维度表
  • 去重逻辑
  • 中间件服务等监控数据
  • 用户画像

平台建设

建表管理

指定命名空间

HBase系统默认定义了两个缺省的namespace:

  • hbase:系统内建表,包括namespace和meta表
  • default:用户建表时未指定namespace的表都创建在此

我们需要根据业务组进行定义命名空间,方便维护管理

支持多集群,不同业务组根据需要选择相应集群

指定表名

指定列族

因为列族在创建表的时候是确定的,列名以列族作为前缀,按需可动态加入,如: cf:name, cf:age

cf 就是列族, name, age 就是列名

设置生存时间TTL

一旦达到过期时间,HBase将自动删除行

支持预分区

HBase默认建表时有一个region,这个region的rowkey是没有边界的,即没有starTKEy和endkey,在数据写入时,所有数据都会写入这个默认的region,随着数据量的不断增加,此region已经不能承受不断增长的数据量,会进行split,分成2个region。在此过程中,会产生两个问题:

  1. 数据往一个region上写,会有写热点问题。
  2. region split会消耗宝贵的集群I/O资源。

基于此可以控制在建表的时候,创建多个空region,并确定每个region的起始和终止rowkey,这样只要我们的rowkey设计能均匀的命中各个region,就不会存在写热点问题。自然split的几率也会大大降低。当然随着数据量的不断增长,该split的还是要进行split。像这样预先创建hbase表分区的方式,称之为预分区.

预分区的实现,参考HBase的shell脚本实现.

相关代码:

Configuration configuration = conn.getConfiguration();
RegionSplitter.SplitAlGorithm hexStringSplit = RegionSplitter.newSplitAlgoInstance(configuration, splitaLgo);
splits = hexStringSplit.split(numRegions);

指定分割算法以及预分区的数目

分割算法主要三种:

  • HexStringSplit: rowkey是十六进制的字符串作为前缀的
  • DecimalStringSplit: rowkey是10进制数字字符串作为前缀的
  • UnifORMSplit: rowkey前缀完全随机

其他配置:

   HColumnDescriptor hColumnDescriptor = new HColumnDescriptor(cf);
   //指定版本,设置成一个即可
   hColumnDescriptor.setMaxVersions(1);
   //指定列族过期时间,界面配置最小单位天,HBase TTL时间单位为秒
   Long ttl = TimeUnit.DAYS.toSeconds(expireDays);
   hColumnDescriptor.setTimeToLive(ttl.intValue());
   //启用压缩算法
   hColumnDescriptor.setCompressionType(Compression.Algorithm.SNAPPY);
   //进行compaction的时候使用压缩算法
   hColumnDescriptor.setCompactionCompressionType(Compression.Algorithm.SNAPPY);
   //让数据块缓存在LRU缓存里面有更高的优先级
   hColumnDescriptor.setInMemory(true);
   //bloom过滤器,过滤加速
   hColumnDescriptor.setBloomFilterType(BloomType.ROW);
   descriptor.addFamily(hColumnDescriptor);

最终调用 admin.createTable进行建表

建表的时候,注意要检测命名空间存在,不存在进行创建命名空间,还有建表的时候自动给相应的业务组进行授权。

表结构查看、数据预览、表删除等功能通过HBase java api 就可以实现, 这里不介绍了.

授权管理

先说HBase如何实现鉴权?

我们采用HBase ACL 鉴权机制,具体配置如下:


      hbase.superuser
      admin


    hbase.coprocessor.region.classes    
    org.apache.hadoop.hbase.security.access.AccessController 

  
    hbase.coprocessor.master.classes
    org.apache.hadoop.hbase.security.access.AccessController
  
 
      hbase.security.authorization
      true
  

给其他业务组授权都采用超级账户进行

下面是权限对照表:

TBvHoD.png

授权流程:

TDp6XR.png

用户如何进行HBase操作以及平台如何进行认证和鉴权?

我们开发了一个很简单的SDK

SDK 实现

SDK 主要的功能就是进行认证和授权、以及获取相关集群的连接信息的操作。

整体流程:

TDEAsg.png

与公司内部系统打通

主要工作就是开发平台使用HBase任务如何打通认证鉴权等,因为都是基于业务组提交任务,所以很容易实现满足需求

针对外部服务在容器内使用HBase, 在主机名没有做DNS 正反向解析之前,需要在容器内配置hosts。

集群数据迁移

主要场景是我们需要将老集群的数据迁移到新集群,要实现跨集群迁移。

老集群版本: HBase: 1.2.0-cdh5.12.0 Hadoop: 2.6.0-cdh5.12.0

新集群版本: HBase: 1.2.0-cdh5.16.2 Hadoop: 2.6.0-cdh5.16.2

使用Distcp方案来进行,一般选择业务低峰期去做, ,需要保证HBase集群中的表是静态数据,需要停止业务表的写入

具体步骤

(1) 在新集群中hdfs 用户下执行distcp命令

在新集群的NameNode节点执行命令

hadoop distcp -DmapReduce.job.queue.name=default -pug -update -skipcrccheck -m 100 hdfs://ip:8020/hbase/data/aaa/user_test /hbase/data/aaa/user_test

(2) 执行HBase命令来修复HBase表的元数据,如表名、表结构等内容,会重新注册到新集群的ZooKeeper中。

sudo -u admin  hbase hbck -fixMeta  "aaa:user_test"

sudo -u admin hbase hbck -fixAssignments "aaa:user_test"

(3)验证数据:

scan "aaa:user_test" ,{LIMIT=>10}

(4) 旧集群表删除:

#!/bin/bash 
exec sudo -u admin  hbase shell <

为了迁移方便,可以将上述命令封装成一个Shell脚本,如:

#! /bin/bash
for i in `cat /home/hadoop/hbase/tbl`
do
echo $i
hadoop distcp -Dmapreduce.job.queue.name=queue_0001_01 -update -skipcrccheck -m 100 hdfs://old_hbase:9000/hbase/data/$i /hbase/data/$i
done
hbase hbck -repairHoles

总结

本文主要对HBase平台建设的实践总结,主要包括创建HBase表相关属性配置的实现,以及认证鉴权的多租户设计思路介绍,同时对HBase跨集群表元信息及数据迁移实践进行总结.

本文作者: chaplinthink, 关注领域:大数据、基础架构、系统设计, 一个热爱学习、分享的大数据工程师
您可能感兴趣的文档:

--结束END--

本文标题: [平台建设] HBase平台建设实践

本文链接: https://lsjlt.com/news/9021.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • [平台建设] HBase平台建设实践
    本文主要介绍HBase平台的建设思路及设计, 并对跨集群数据迁移实践进行总结 背景 由于公司业务场景的需要,我们需要开发HBase平台,主要需要以下功能: 建表管理 授权管理 SDK实现 与...
    99+
    2019-09-29
    [平台建设] HBase平台建设实践
  • 资料下载 | 58同城HBase平台及生态建设实践
    前言:2020年3月7日晚7点,大佬张祥在微信群向大家详细介绍了58同城HBase平台及其生态的建设实践与相关经验,确实讲得很好。今天花了点时间帮大家整理了一下,希望更多的没有参与直播的朋友能够看到它,也欢迎大家积极转发一下,视...
    99+
    2014-10-14
    资料下载 | 58同城HBase平台及生态建设实践
  • [平台建设] 大数据平台如何实现任务日志采集
    本文主要介绍如何基于log4j appender自定义扩展实现大数据平台任务日志采集. 背景 平台任务主要分3种: flink实时任务, spark任务,还有java任务,spark、flin...
    99+
    2018-05-22
    [平台建设] 大数据平台如何实现任务日志采集
  • LAMP平台搭建
    文章目录 LAMP简介web服务器工作流程CGI和FastCGIhttpd与php结合方式web工作流程 LAMP平台构建安装httpd安装mysql安装php配置apache启用代理模块...
    99+
    2023-08-31
    php apache 服务器 mysql linux
  • 从零构建Flink SQL计算平台 - 1平台搭建
    一、理想与现实 Apache Flink 是一个分布式流批一体化的开源平台。Flink 的核心是一个提供数据分发、通信以及自动容错的流计算引擎。Flink 在流计算之上构建批处理,并且原生的支持迭代计算,内存管理以及程序优化。 ...
    99+
    2015-10-04
    从零构建Flink SQL计算平台 - 1平台搭建
  • 宜信智能监控平台建设实践|宜信技术沙龙
    【宜信技术沙龙】是由宜信技术学院主办的系列技术分享活动,活动包括线上和线下两种形式,每期技术沙龙都将邀请宜信及其他互联网公司的技术专家分享来自一线的实践经验,分享内容覆盖金融科技及软件研发等主要技术领域,旨在为金融科技行业提供可落地实践的解...
    99+
    2023-06-04
  • [平台建设] 日志数据同步数仓设计
    本文主要针对日志数据接入数据仓库场景进行设计, 同时介绍了下在设计接入时的一些细节,针对可能出现的问题进行必要的处理. 背景 主要针对用户流量数据、风控数据、人物画像等数据进行同步至数仓, 制...
    99+
    2019-01-19
    [平台建设] 日志数据同步数仓设计
  • OpenStack云平台搭建
    参考: https://blog.csdn.net/m0_45692110/article/details/122628664 https://huaweicloud.csdn.net/635607c3d3efff3090b58eb4....
    99+
    2023-09-07
    openstack linux 运维 服务器
  • ActiveMQ平台搭建 python
    activemq介绍 ActiveMQ是Apache软件基金下的一个开源软件,是消息驱动中间件软件(MOM)。在分布式的各应用之间调度事件和消息,使之到达指定的接收者。它为企业消息传递提供高可用,出色性能,可扩展,稳定和安全保障 ...
    99+
    2023-01-31
    平台 ActiveMQ python
  • [平台建设] Spark任务的诊断调优
    本文主要根据平台用户平常提交的spark任务思考,调研引入Dr. Elephant, 通过阅读Dr 相关源码, 明白Dr 执行整体流程并对代码进行改造,适配我们的需求.最终转变为平台产品来对用户的Spar...
    99+
    2016-10-14
    [平台建设] Spark任务的诊断调优
  • Android平台搭建与简单应用设计
    一. 实验目的 搭建安卓应用开发平台 创建简单的Android应用程序 创建activity并利用Intent实现跳转 二.实验内容 下载并安装...
    99+
    2022-06-06
    Android
  • 如何为Linux ARM设备构建跨平台UI
    这篇文章给大家分享的是有关如何为Linux ARM设备构建跨平台UI的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。AndroidXML 和 TotalCross 的运用为树莓派和其他设备创建 UI 提供了更简单的...
    99+
    2023-06-15
  • 如何构建LAMP平台
    小编给大家分享一下如何构建LAMP平台,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!  一、搭建httpd。1编辑IP...
    99+
    2024-04-02
  • LEMP平台如何搭建
    这篇文章主要为大家展示了“LEMP平台如何搭建”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“LEMP平台如何搭建”这篇文章吧。说明:我这里用到的系统为cento...
    99+
    2024-04-02
  • PHP开发实践:创建一个电子商务平台
    PHP开发实践:创建一个电子商务平台随着互联网的快速发展和智能手机的普及,电子商务成为了当今最重要的经济活动之一。为了满足这一不断增长的需求,搭建一个强大的电子商务平台是至关重要的。本文将探讨如何使用PHP开发一个功能完备的电子商务平台。首...
    99+
    2023-10-27
    实践 电商平台 PHP开发
  • Flutter 实战:构建跨平台应用
    文章目录 一、简介二、开发环境搭建三、实战案例:开发一个简单的天气应用1. 项目创建2. 界面设计3. 数据获取4. 实现数据获取和处理5. 界面展示6. 添加动态效果和交互7. 添加网络错误处理8. 添加刷新功能9. 添加定位功能...
    99+
    2023-12-22
    flutter
  • ARM平台搭建Python环境
    ARM平台搭建Python环境 写在最前常见问题1. 主机(Ubuntu)安装Python3.8.101.1 安装前的准备1.2 Ubuntu安装Python3.8.101.3 Ubuntu配...
    99+
    2023-10-08
    python linux ubuntu
  • openstack云平台搭建教程
    搭建OpenStack云平台是一个复杂的过程,需要涉及到多个组件和步骤。以下是一个基本的搭建教程,供参考:1. 准备工作:- 硬件:...
    99+
    2023-10-11
    openstack
  • hadoop2.7.3平台怎么搭建spark2.1.1
    这篇文章主要讲解了“hadoop2.7.3平台怎么搭建spark2.1.1”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“hadoop2.7.3平台怎么搭建spark2.1.1”吧!hadoo...
    99+
    2023-06-03
  • 钉钉宜搭搭建平台
    一、需求分析 1.1 功能需求 钉钉宜搭的功能主要包括:消息、日历、工作流程管理、文档共享、云存储等。 1.2 技术需求 钉钉宜搭的技术需求主要包括:安全性、稳定性、可靠性、性能、可扩展性等。 1.3 用户需求 钉钉宜搭的用户需要满足以下...
    99+
    2023-10-28
    平台 钉钉宜搭
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作