大数据之HBase

HBase介绍

  • Apache的三篇论文,GFS谷歌文件系统->HDFS;MR -> MR ; BigTable ->HBase;
  • HBase是hadoop数据库,一种分布式、可扩展的大数据NoSQL数据库之一。
  • 适合对于大量数据进行随机、实时的读写操作

HBase数据模型

  1. Bigtable是一个稀疏的(如果某个列没有值,那么这个列直接不维护,传统的关系型数据库会维护一个null值)、分布式的、持久的多维(维度信息主要保存在key中,value一般是单纯的值)排序map
  2. 改映射由行键、列键和时间戳索引组成;映射的每个值都是一个字节数组。
  3. 用户将数据行存储在带标签的表中,数据行具有可排序的键和任意数量的列。
  4. 数据模型的关键在于稀疏、分布式、多维、排序的映射

HBase逻辑结构

  • row_key按照字典序排序,数据存储整体有序,存储的数据都是字节数据
  • 所有列必须在列族的内部,没有单独的列
  • 没有数据的部分,对于该行数据来说,直接没有该列,也不存储null值。
  • 划分列族的好处是为了方便存储,将同一列族的数据存储到一起
  • 每个region每个列族划分的区域称为一个store

HBase物理存储结构

  • 同一row_key,同一列族,同一列的数据根据时间戳排序
  • 根据时间戳来区分数据的版本,一般保留最新版本

数据模型术语

  • NameSpace命名空间
    • hbase
    • default
  • Table: 定义表时只需要声明列族即可,具体的列可以动态、按需指定
  • Row: 由一个RowKey和多个Column组成,数据是按照rowkey的字典序存储的,查询数据只能根据rowkey检索,所以rowkey的设计十分重要。
  • Column: 列族:列
  • Time Stamp: 用于标识数据的不同版本
  • Cell = rowkey + column family + column qualifier + timestamp 唯一确定的单元

HBase基础架构

  • Master
    • master通过监控region server是否正常运行
    • master负责所有元数据的变化
    • 监控执行region的故障转移和拆分线程
  • RegionServer
    • 负责数据Cell的处理
    • 在执行区域的拆分和合并时,由RegionServer来实际执行
  • HDFS: 保证数据存储的可靠

HBase的安装

  1. 配置环境变量
  2. vim hbase-env.sh, 126行,改为用外置的zookeeper。
  3. vim hbase-site.xml文件,改为分布式集群,告诉集群zookeeper的地址,数据存储位置,wal(写前日志)
  4. 端口号默认为16010

时间同步问题

  1. 如果RegionServer和Master的时间超过30s,就会触发ClockOutOfSyncException

HBase Shell基本操作

  1. hbase shell, 启动一个hbase shell
  2. help 命令名/ 组名 查看所有命令
  3. ddl命令
    • 查看所有的表:list
    • 建表:create 'mydb:t1', {name=>'cf1', version=>3}
      • 简写:create t2, 'col1', 'col2'
    • 查看表的详情: describe 'mydb:t1' , 可以简写为desc
    • 修改表:
      • alter 't2' , {name=>'cf1',version=>3}, 'cf4'
      • alter 't2' 'delete' => 'cf2'
    • 删除表: drop 't2',删除前需要先禁用表disable 't2', 之后再删除
    • 是否存在exists 't1'
    • 查看表的region信息:list_regions 't1'
  4. namespace命令
    • 查看所有的namespace: list_namespace
    • 查看指定namespace下面的表:list_namespace_tables 'hbase'; 里面有meta和namespace两张表
    • 创建一个数据库:create_namespace 'mydb'
    • 查看数据库详情:descrbe_namespace 'mydb'
    • 修改namespace: alter_namespace 'mydb1' , {method = 'set', 'author'=>'wyh'}
    • 删除namespace属性: alter_namespace 'mydb1' ,{method='unset', name=>'author'}
  5. dml命令(数据的增删改查 )
    • 插入数据:put 't1' '1001', 'cf1:name', 'zhangsan'
    • 查询数据:get 't1' '1001'
    • 扫描数据:san 't1' 扫描表中所有的数据
    • 修改数据: put 't1' '1001' 'cf1:name', 'zhangxiaosan'
    • 删除数据:delete 't1' , '1001', 'cf1:name'; truncate命令是直接删除文件,不是打标记
相关推荐
sunshine-sm13 分钟前
CentOS Steam 9安装 MySQL 8
linux·运维·服务器·数据库·mysql·centos·centos stream
请提交用户昵称17 分钟前
大数据各组件flume,datax,presto,DolphinScheduler,findBI在大数据数仓架构中的作用和功能。
大数据·flume·datax·dolphin·presto·findbi·大数据组件
IT果果日记24 分钟前
详解DataX开发达梦数据库插件
大数据·数据库·后端
烧冻鸡翅QAQ44 分钟前
redis的数据类型:List
数据库·redis·list
蒋士峰DBA修行之路1 小时前
实验五 静态剪枝
数据库·算法·剪枝
蒋士峰DBA修行之路1 小时前
实验六 动态剪枝
数据库·算法·剪枝
用户Taobaoapi20141 小时前
微店API秘籍!轻松获取商品详情数据
大数据·数据挖掘·数据分析
kimble_xia@oracle1 小时前
SQL 笔记
java·数据库·oracle
chimchim662 小时前
StarRocks导入数据-使用 Broker Load 进行异步导入
大数据·sql
树谷-胡老师3 小时前
公元前3400年至公元2024年全球国家地理边界演变数据集
数据库·arcgis·信息可视化