一、概述

1、概念

分布式、可扩展、海量数据存储的NoSQL数据库

2、模型结构

(1)逻辑结构

store相当于某张表中的某个列族

(2)存储结构

(3)模型介绍

Name Space:相当于数据库,包含很多张表

Region:类似于表,定义表时只需要声明列族,不需要声明具体的列。【字段可以动态、按需指定】

Row:每行数据按RowKey字典序存储,且只能根据RowKey检索

Column:由Column Family(列族)和Column Qualifier(列限定符,即列名,无需预先定义)进行限定,例如info:name,info:age。

Column Family:列族

Time Stamp:标识数据的不同版本

Cell:由{rowkey, column Family:column Qualifier, time Stamp} 唯一确定的单元/记录?

3、Hbase架构

(1)结构图

(2)架构角色

Region Server:Region的管理者,其实现类为HRegionServer,可以实现对数据的操作(get, put, delete)和对Region的操作(splitRegion、compactRegion)

Master:Region Server的管理者,实现类为HMaster,可以实现对表的操作(create, delete, alter)和对Region Server的操作(分配regions、监控ser的状态、负载均衡和故障转移)

Zookeeper:Master的高可用、RegionServer的监控、元数据的入口以及集群配置的维护

HDFS:底层数据存储、HBase的高可用

二、操作及进阶

1、入门操作

(1)启动

分别启动:bin/hbase-daemon.sh start master及regionserver

共同启动:bin/start-hbase.sh,查看页面:http://hadoop102:16010

配置HMaster的HA高可用:backup-masters文件并同步scp

(2)常见操作

进入命令行:bin/hbase shell

表的操作:create、put、scan、describe、count、delete、truncate清空表、get 'student','1001'指定行,'info:name'指定列族: 列、drop删除表、

2、架构原理

StoreFile:实际保存的物理文件,以HFile的形式存储在HDFS上,数据有序

MemStore:写缓存,先存储在MemStore中,排好序再刷写到StoreFile

WAL:写内存容易数据丢失,先写在一个叫做Write-Ahead logfile的文件中,然后再写入MemStore中;系统出现故障的时候,数据可以通过这个日志文件重建

3、写数据流程

Client通过zk获取Region Server地址

(追加)到WAL,写入对应的MemStore

向client发送ack,等到刷写时机后,将数据刷写到HFile

4、MemStore Flush数据刷写

memstore的总大小达到java_heapsize

到达自动刷写的时间,也会触发memstore flush

5、StoreFile Compaction

memstore每次刷写都会生成一个新的HFile,且同一个字段的不同版本(timestamp)和不同类型(Put/Delete)有可能会分布在不同的HFile中,因此查询时需要遍历所有的HFile

为了减少HFile的个数,以及清理掉过期和删除的数据,会进行StoreFile Compaction。

Minor Compaction:临近的HFile合并,但不会清理删除

Major Compaction:Store下的所有HFile合并,同时会清理和删除

6、Region Split拆分

每个Table起初只有一个Region,随着数据的不断写入,Region会自动进行拆分

由于负载均衡,可能会将当前table的region转移到其他region server上

7、读数据流程

访问zk,获取hbase:meta表位于哪个Region Server

根据读请求的namespace:table/rowkey获取region并缓存到meta cache

查询目标数据并合并

8、RowKey设计

(1)设计原则

1)rowkey长度原则

2)rowkey散列原则

3)rowkey唯一原则

(2)设计方式

1)生成随机数、hash、散列值

2)字符串反转

三、集成

1、集成Phoenix

(1)Phoenix介绍

使用标准JDBC API代替HBase客户端API

特点:容易集成、操作简单、支持二级索引

(2)常见操作

安装:server和client拷贝

显示所有表:!tables

建表:表名等会自动转换为大写,加双引号可以指定小写

插入数据:upsert into student values

退出命令行:!quit

(3)视图&表映射

创建关联test表的视图:create view "test"(id varchar primary key,"info1"."name" varchar, "info2"."address" varchar);

删除视图:drop view "test";

(4)二级索引

二级索引配置文件

全局二级索引:创建新表,适用于多读少写的业务场景

本地二级索引:Local Index适用于写操作频繁

2、集成Hive

(1)HBase与Hive的对比

(2)Hive插入数据后影响Hbase

Hive中创建临时中间表,用于load文件中的数据

insert命令将中间表中的数据导入到Hive关联Hbase的那张表中

(3)借助Hive分析HBase表

Hive中创建外部表

使用Hive函数进行分析操作

四、优化

1、region预分区

提前规划region分区,提高性能

create 'staff1','info','partition1',SPLITS => ['1000','2000','3000','4000']

方式:手工设定、生成16进制序列、按文件规则、使用java api

2、基础优化,配置hbase-site.xml

允许在HDFS的文件中追加内容

优化DataNode允许的最大文件打开

优化延迟高的数据操作的等待时间

优化数据的写入效率

设置RPC监听数量

优化HStore文件大小

指定scan.next扫描HBase所获取的行数

flush、compact、split机制

【大数据面试】Hbase:数据、模型结构、操作、读写数据流程、集成、优化的更多相关文章

  1. 随想:目标识别中,自适应样本均衡设计,自适应模型结构(参数可变自适应,模型结构自适应,数据类别or分布自适应)

    在现在的机器学习中,很多人都在研究自适应的参数,不需要人工调参,但是仅仅是自动调参就不能根本上解决 ai识别准确度达不到实际生产的要求和落地困难的问题吗?结论可想而知.如果不改变参数,那就得从算法的结 ...

  2. mysql数据表的基本操作:表结构操作,字段操作

    本节介绍: 表结构操作 创建数据表. 查看数据表和查看字段. 修改数据表结构 删除数据表 字段操作 新增字段. 修改字段数据类型.位置或属性. 重命名字段 删除字段 首发时间:2018-02-18  ...

  3. 第六章 Odoo 12开发之模型 - 结构化应用数据

    在本系列文章第三篇Odoo 12 开发之创建第一个 Odoo 应用中,我们概览了创建 Odoo 应用所需的所有组件.本文及接下来的一篇我们将深入到组成应用的每一层:模型层.视图层和业务逻辑层. 本文中 ...

  4. osg fbx 模型结构操作

    osg::Node* TeslaManage::findOsgNodeByName(QString &nodeNme) { osg::Node* findNode = NULL; std::v ...

  5. 大数据(10) - HBase的安装与使用

    HBaes介绍 HBase是什么? 数据库 非关系型数据库(Not-Only-SQL) NoSQL 强依赖于HDFS(基于HDFS) 按照BigTable论文思想开发而来 面向列来存储 可以用来存储: ...

  6. 大数据学习day34---spark14------1 redis的事务(pipeline)测试 ,2. 利用redis的pipeline实现数据统计的exactlyonce ,3 SparkStreaming中数据写入Hbase实现ExactlyOnce, 4.Spark StandAlone的执行模式,5 spark on yarn

    1 redis的事务(pipeline)测试 Redis本身对数据进行操作,单条命令是原子性的,但事务不保证原子性,且没有回滚.事务中任何命令执行失败,其余的命令仍会被执行,将Redis的多个操作放到 ...

  7. Sqoop将mysql数据导入hbase的血与泪

    Sqoop将mysql数据导入hbase的血与泪(整整搞了大半天)  版权声明:本文为yunshuxueyuan原创文章.如需转载请标明出处: https://my.oschina.net/yunsh ...

  8. Hbase单机安装及使用hbase shell进行简单操作

    一,配置环境变量 在etc/prifile中加入java环境变量及hbase环境变量: #set java environment JAVA_HOME=/usr/local/lhc/jdk1.8.0_ ...

  9. 大数据入门第十四天——Hbase详解(三)hbase基本原理与MR操作Hbase

    一.基本原理 1.hbase的位置 上图描述了Hadoop 2.0生态系统中的各层结构.其中HBase位于结构化存储层,HDFS为HBase提供了高可靠性的底层存储支持, MapReduce为HBas ...

  10. 大数据查询——HBase读写设计与实践

    导语:本文介绍的项目主要解决 check 和 opinion2 张历史数据表(历史数据是指当业务发生过程中的完整中间流程和结果数据)的在线查询.原实现基于 Oracle 提供存储查询服务,随着数据量的 ...

随机推荐

  1. 关于Elasticsearch使用java的说明

    从Elastic 7.0开始,我们可以不安装JAVA.安装包包含一个相匹配的JAVA版本在里面. Elasticsearch包含来自JDK维护者(GPLv2 + CE)的捆绑版OpenJDK. 要使用 ...

  2. 记录一次Bitbucket鉴权的坑

    目录 发生了什么 什么原因 如何解决 总结 发生了什么 今天首次在Fedora上使用git,因为没有小王八(TortoiseGit)帮助,其过程异常焦灼-- 反正经过一系列折腾,我在本地新建了一个项目 ...

  3. 一文读懂 MySQL 索引

    1 索引简介 1.1 什么是 MySQL 的索引 官方定义:索引是帮助 MySQL 高效获取数据的数据结构 从上面定义中我们可以分析出索引本质是一个数据结构,他的作用是帮助我们高效获取数据,在正式介绍 ...

  4. 从源码分析 MGR 的流控机制

    Group Replication 是一种 Shared-Nothing 的架构,每个节点都会保留一份数据. 虽然支持多点写入,但实际上系统的吞吐量是由处理能力最弱的那个节点决定的. 如果各个节点的处 ...

  5. 【题解】CF1720C

    题意简述 给你一个 01 矩阵,每一次你可以在这个矩阵中找到一个 \(L\) 型,将它全部变成 0.\(L\) 型的定义是在一个 \(2\times2\) 矩阵中,除开一个角之外的图形,其中必须包含至 ...

  6. 在某网站的登录页面登录时如果选择“记住用户名”,登录成功后会跳转到一个中间层(页面代码将登录的用户名和密码存在cookie),中间页面中存在一个超链接,单击超链接可以链接到第三个页面查看信息。若选择“

    Response实现登录并记录用户名和密码信息 在某网站的登录页面登录时如果选择"记住用户名",登录成功后会跳转到一个中间层(页面代码将登录的用户名和密码存在cookie),中间页 ...

  7. 动词时态=>2.动作的时间状态结合

    动作和时间结合 现在的四种时态 现在进行时态 对于 现在这个时间点,这个 动作 还在进行当中 例如:我现在正在喝水 现在完成时态 对于 现在这个时间点,这个 动作 已然完成 例子:我现在已经喝完了水 ...

  8. vue 祖先组件操作后代组件方法

    前言:最近写代码遇到一问题:祖先级别的组件怎么操作孙子的儿子的组件方法(是不是已经绕晕了),在网上搜了半天都是父子传参,父子操作,晕晕乎乎的想起了bus(事件总线), 原理就是:是在vue原型上挂载( ...

  9. 文盘Rust -- 把程序作为守护进程启动

    当我们写完一个服务端程序,需要上线部署的时候,或多或少都会和操作系统的守护进程打交道,毕竟谁也不希望shell关闭既停服.今天我们就来聊聊这个事儿. 最早大家部署应用的通常操作是 "nohu ...

  10. 三、Ocelot请求聚合与负载均衡

    上一篇文章介绍了在.Net Core中如何使用Ocelot:https://www.cnblogs.com/yangleiyu/p/16847439.html 本文介绍在ocelot的请求聚合与负载均 ...