[关闭]
@zhangyy 2020-06-02T09:06:16.000000Z 字数 5679 阅读 192

hbase 数据库管理

hbase的部分


  • 一:hbase 简介与架构功能
  • 二:hbase 安装与配置
  • 三:hbase 常见shell 命令操作

一:hbase 简介与架构功能

1.1 为什么要使用hbase 数据库

  1. 传统的RDBMS关系型数据库(例如SQL)存储一定量数据时进行数据检索没
  2. 有问题,可当数据量上升到非常巨大规模的数据(TBPB)级别时,传统的
  3. RDBMS已无法支撑,这时候就需要一种新型的数据库系统更好更快的处理这
  4. 些数据。我们可以选择HBase

1.2 hbase 简介:

  1. 1.2.1 HBase技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数
  2. 据的分布式存储系统”。
  3. 1.2.2 HBaseApacheHadoop项目的子项目。HBase不同于一般的关系数据库,它
  4. 是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不
  5. 是基于行的模式。
  6. 1.2.3 HBase Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布
  7. 式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。
  8. 1.2.4 HBase实际上是一个Hadoop的数据库系统,它的主要作用和传统数据库系统一样
  9. 存储数据和检索数据。不同的是,HBase可以存储海量数据及海量数据的检索。

1.3 HBase与Hadoop的对比

image_1akkscmh51ghr1qb31lj612jmh0u9.png-59.1kB

1.4 HBase与关系型数据库的功能对比

image_1akksdsmg4io1m411a31n8j16q0m.png-75.9kB

1.5 HBase架构设计及表的存储设计

  1. 1.5.1 HBase是水平扩展的、分布式的、开源有序映射数据库。
  2. 1.5.2 Hbase运行在Hadoop文件系统HDFS上。它不要求有预定义的模式,可以被看做
  3. 弹性扩展的多维表格,通过动态添加列,在数据插入或查询之前修改列结构,
  4. 以支持任意的数据结构。
  5. 1.5.3 HBase是一个建立在HDFS上的列存储数据库,具有至此线性扩展(横向扩
  6. 展)、自动故障转移、自动分区及模式自由等特性。

1.6 HBase架构设计

image_1akksk8611g7s7qntjpj8bfah13.png-207.4kB

  1. Master
  2. HBase的主节点,用来协调客户端应用程序和RegionServer的关系,同时用来监控和记录
  3. 元数据的变化和管理。
  4. RegionServer
  5. 是从节点,用region的形式处理实际的表。regionHBase表的基础单元组件,它存储了分
  6. 布式表。所以HBase表和HBase集群利用MasterRegionServer来协同工作。
  7. ZooKeeper
  8. 是一个高性能、集中化、分布式应用程序协调服务,它为HBase提供了分布式同步和组服务。
  9. HBase中,它用来选举集群主节点Master,以便跟踪可用的在线服务器,同时维护集群的
  10. 元数据。一般安装多个,用于提供Master的高可用性。
  11. 通常,MasterHadoopNameNode进程运行在同一台主机上,与DataNode通信
  12. 以读写HDFS的数据。RegionServerHadoopDataNode运行在同一台主机上。

1.7 HBase数据存储模型

  1. HBase不是以关系设计为中心,它是根据用户需求更灵活的开放设计。它提
  2. 供了在行键上的单一索引,这在关系世界里称为主键。我们可以通过把行划
  3. 分为列族和列来避免大的读取和写入操作,并且这种方式支持水平切分和垂
  4. 直切分。
  5. 一个HBase表由以下几部分组成:

image_1akkt1foi1gvb1oqg25kcv26c11g.png-48.4kB

  1. 行键:
  2. 这是HBase表中每个记录的唯一键,无论选择什么类型数据作为行健,它在 内部、
  3. 磁盘或内存里,都将转换为字节数组进行存储。
  4. 表中的每条数据有唯一的标识符,即rowkey,类似于关系型数据库的主键。
  5. 列族:
  6. 一张HBase表由表的不同列集合在一起。将相同功能或类型的列分类组合在 一起,
  7. 这样做的好处是可以更快的分开存储在HBase磁盘上的列族中检索出所需的列。
  8. 列:
  9. 列属于某一个column family列族。
  10. 版本:
  11. HBase能够为一个单元格元组(行、列族和列)保存多个值,每个单元格被 称为一个记录的
  12. 版本。版本制定为基于时间戳的长整形。默认情况下,HBase保留3个版本 的记录。当然,我
  13. 们也可以改变保留版本的数量,我们也可以通过指定来获取某个特定的版 本。
  14. 时间戳:
  15. 对于每个插入的数据,当前的时间戳与值是相关的,它表示了数值插入到表中的时间。
  16. 单元格
  17. 最小或基本的存储单元,在内部是一个列的实际值存储。故插单元格数 据时必须包含
  18. rowkey+ columnfamily(列族名)+columnname(列名)+timestampval ue

1.8 hbase 的特点:

  1. 1.8.1 HBase中没有花哨的数据类型,它所有都是字节数组。它是一种字节进字节
  2. 出的数据库,其特征在于,当插入一个值时,HBase隐式地通过序列号框架
  3. 将数据转换成字节数组,然后存储进单元格,或者给出字节数组。
  4. 1.8.2 当添加或者获取数值时,它隐式地转换成等价的数据展示出来。
  5. 1.8.3 HBase的单元格只能容纳字节数组。任何可以转换成字节的数据都可以存储
  6. HBase中。
  7. 1.8.4 可以存储10-15MB的值到HBase的单元格中,但如果值太大,可以将文件存
  8. 储到HDFS中,然后在HBase中存储文件的路径。
  9. 1.8.5 不建议将一个巨大的文件或值转换成字节数组存储在HBase中;但是HDFS
  10. 到的主机文件和文件元数据可以存储到HBase中。

二:hbase 安装与配置

2.1 安装hbase

  1. 下载:
  2. hbase-0.98.6-cdh5.3.6.tar.gz
  3. tar -zxvf hbase-0.98.6-cdh5.3.6.tar.gz
  4. mv hbase-0.98.6-cdh5.3.6 yangyang/hbase

2.2 更改hbase 的配置文件

  1. cd /home/hadoop/yangyang/hbase/conf
  2. vim hbase-env.sh
  3. jdk 目录:
  4. export JAVA_HOME=/home/hadoop/yangyang/jdk
  5. 关闭 hbase 自身的zookeeper
  6. export HBASE_MANAGES_ZK=false
  1. vim hbase-site.xml
  2. 增加 如下内容
  3. <configuration>
  4. <property>
  5. <name>hbase.rootdir</name>
  6. <value>hdfs://namenode01.hadoop.com:8020/hbase</value>
  7. </property>
  8. <property>
  9. <name>hbase.cluster.distributed</name>
  10. <value>true</value>
  11. </property>
  12. <property>
  13. <name>hbase.zookeeper.property.dataDir</name>
  14. <value>/home/hadoop/yangyang/hbase/zookeeper</value>
  15. </property>
  16. <property>
  17. <name>hbase.zookeeper.quorum</name>
  18. <value>namenode01.hadoop.com</value>
  19. </property>
  20. <!-- hbase 的权限 设定-->
  21. <property>
  22. <name>hbase.superuser</name>
  23. <value>hadoop</value>
  24. </property>
  25. <property>
  26. <name>hbase.coprocessor.region.classes</name>
  27. <value>org.apache.hadoop.hbase.security.access.AccessController</value>
  28. </property>
  29. <property>
  30. <name>hbase.coprocessor.master.classes</name>
  31. <value>org.apache.hadoop.hbase.security.access.AccessController </value>
  32. </property>
  33. <property>
  34. <name>hbase.rpc.engine</name>
  35. <value>org.apache.hadoop.hbase.ipc.SecureRpcEngine</value>
  36. </property>
  37. <property>
  38. <name>hbase.security.authorization</name>
  39. <value>true</value>
  40. </property>
  41. </configuration>

2.3 更改 regionservers 的配置

  1. 单机hbase 配置
  2. echo "namenode01.hadoop.com " > regionservers

2.4 启动hbase

  1. bin/start-hbase.sh

image_1akl12hfv1714lnl11hq1pq61a811t.png-15.5kB

2.5 web ui 页面

image_1b890uluut6ujm71agmtce11ef9.png-199.1kB

2.6 进入hbase 的 shell

  1. bin/hbase shell

image_1akl1792h9cn19u01pa413uc1k5q2a.png-27.5kB

三:hbase 常见shell 命令操作

3.1 查看表:

  1. hbase(main)> list

image_1akn9j3pb1fcb1uuupvmurd1srf9.png-12.2kB

3.2 创建表:

  1. # 语法:create <table>, {NAME => <family>, VERSIONS => <VERSIONS>}
  2. # 例如:创建表zaofans, 列簇为info
  3. hbase(main)> create 'user','info';

image_1akl2pvjd1es41gjico07rvk4q34.png-8.2kB

3.3 查看表结构:

  1. # 语法:describe <table>
  2. # 例如:查看表user的结构
  3. hbase(main)> describe 'user'

image_1akn9upoo171f2qk8g1lvtgre13.png-21.1kB

3.4 删除表:

  1. 分两步:首先disable,然后drop
  2. 例如:删除表zaofans
  3. hbase(main)> disable 'zaofans'
  4. hbase(main)> drop 'zaofans'

image_1akn9rt3dru41jc717pfu5t1eo0m.png-17.3kB

3.5 表的权限:

3.5.1 表的附权限

  1. # 语法 : grant <user> <permissions> <table> <column family> <column qualifier> 参数后面用逗号分隔
  2. # 权限用五个字母表示: "RWXCA".
  3. # READ('R'), WRITE('W'), EXEC('X'), CREATE('C'), ADMIN('A')
  4. # 例如,给用户‘test'分配对表user有读写的权限,
  5. grant 'test','RW','user'

image_1akna3aom109d1ma518sttpr1k6b1g.png-8.8kB

3.5.2 表权限的查看:

  1. # 语法:user_permission <table>
  2. # 例如,查看表user的权限列表
  3. hbase(main)> user_permission 'user'

image_1akna7hfqse11qdd70eq5rs401t.png-12.3kB

3.5.3 表权限的的收回

  1. # 与分配权限类似,语法:revoke <user> <table> <column family> <column qualifier>
  2. # 例如,收回test用户在表t1上的权限
  3. hbase(main)> revoke 'test','user'

image_1aknaad0q1ksm1tutrsp3fftb62a.png-7.2kB


3.6 表的增删改查

3.6.1 增加数据:

  1. # 语法:put <table>,<rowkey>,<family:column>,<value>,<timestamp>
  2. # 例如:给表user的添加一行记录:rowkey是1001,family name:info,column name:name,value:tom,timestamp:系统默认
  3. hbase(main)> put 'user','1001','info:name','tom'

image_1aknamhfp1do61g3f10jp18as1puq2n.png-19.2kB

3.6.2 查询数据:

  1. hbase 查询数据分三种:
  2. 1. 根据表的rowkey 进行的查询 这种情况主要的是get 查询
  3. 2. scan range 范围扫描
  4. 3. scan 全表扫描
  5. ---
  6. 4. 统计行数
  1. 1. get 查询:
  2. hbase(main)> get 'user','1001'

image_1aknds0a11hgo1of6se11p8k1f334.png-19.5kB

  1. 2. scan range 范围查询:
  2. hbase(main)> scan 'user', { STARTROW => '1002' , ENDROW => '1003' }
  3. 范围查询包头不包尾

image_1akne1f802l7qbu4c018g5hr43h.png-17.8kB

  1. 3. scan 全表扫描
  2. hbase(main)> scan 'user'
  3. 注: 因现实情况下数据量比较大 一般不用全表扫描

image_1aknet0ua16l6bgc10h1gq7tif3u.png-36.6kB

3.6.3 hbase 统计表的rowkey个数

  1. 统计数据表的行数
  2. hbase(main)> count 'user'

image_1aknfcl6e18sde4f153g1fgs1hqb4b.png-7.2kB


3.6.4 hbase 删除数据记录

  1. 删除行中的某个列值
  2. # 语法:delete <table>, <rowkey>, <family:column> , <timestamp>,必须指定列名
  3. # 例如:删除表user,1000中的info:sex的数据
  4. hbase(main)> delete 'user','1000','info:sex'

image_1akngi6h911196bs1vt31drqu604o.png-9kB

  1. # 语法:deleteall <table>, <rowkey>, <family:column> , <timestamp>,可以不指定列名,删除整行数据
  2. # 例如:删除表user,1003的数据
  3. hbase(main)> deleteall 'user','1003'

image_1akngl84o1kqs8fe1oj9jn11a7n55.png-4.2kB

  1. 删除表中的所有数据
  2. # 语法: truncate <table>
  3. # 其具体过程是:disable table -> drop table -> create table
  4. # 例如:删除表user的所有数据
  5. hbase(main)> truncate 'user'

image_1akngu08bd36t8s23i1r9j9la5i.png-21.9kB

3.7 创建命名空间:

  1. create namespace ns1:
  2. 在命名空间上建立表:
  3. create 'ns1:student1','info'
  4. 查找命名空间上的表
  5. list_namespace_tables 'ns1'

image_1al3pu1dv1m7ucq1uvn221u7j9.png-28.3kB

image_1al3q2hv81vtl1mc1i1l1g4s1haim.png-8.4kB

3.8 创建rowkey 的范围region 区域:

  1. 方式一:
  2. create 't1', 'f1', SPLITS => ['10', '20', '30', '40']
  3. ti(rowkey) Start Key End Key
  4. region1 10
  5. region2 10 20
  6. region3 20 30
  7. region4 30 40
  8. region5 40
  9. ----
  10. 方式二:
  11. cd /home/hadoop/
  12. vim region.txt
  13. 20160601
  14. 20160602
  15. 20160603
  16. 20160604
  17. create 't2', 'f1', SPLITS_FILE => '/home/hadoop/region.txt', OWNER => 'johndoe'
  18. ---
  19. 方式三: 采用十六进制的这种方式创建
  20. create 't3', 'f1', {NUMREGIONS => 15, SPLITALGO => 'HexStringSplit'}

image_1al3qlpclct914ms15pb9af1is813.png-7.7kB

image_1al3qq41m1lav70g1acjnag9o71g.png-14.2kB

image_1al3v6442no1dgd1odo18irad11t.png-9.3kB

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注