wordpress说说,搜索引擎优化代理,wordpress rss 插件,助农网站策划书一 Hbase简介
1 HBase定义
Apache HBase™ 是以hdfs为数据存储的#xff0c;一种分布式、可扩展的NoSQL数据库。
2 HBase数据模型 HBase的设计理念依据Google的BigTable论文#xff0c;论文中对于数据模型的首句介绍。Bigtable 是一个稀疏的、分布式的、持久的多维排序map…一 Hbase简介
1 HBase定义
Apache HBase™ 是以hdfs为数据存储的一种分布式、可扩展的NoSQL数据库。
2 HBase数据模型 HBase的设计理念依据Google的BigTable论文论文中对于数据模型的首句介绍。Bigtable 是一个稀疏的、分布式的、持久的多维排序map。 之后对于映射的解释如下该映射由行键、列键和时间戳索引映射中的每个值都是一个未解释的字节数组。 最终HBase关于数据模型和BigTable的对应关系如下HBase 使用与 Bigtable 非常相似的数据模型。用户将数据行存储在带标签的表中。数据行具有可排序的键和任意数量的列。该表存储稀疏因此如果用户喜欢同一表中的行可以具有疯狂变化的列。 最终理解HBase数据模型的关键在于稀疏、分布式、多维、排序的映射。其中映射map指代非关系型数据库的key-Value结构。
3 HBase逻辑结构 HBase可以用于存储多种结构的数据以JSON为例存储的数据原貌为
row_key1:{personal_info:{name:zhangsan,city:北京,phone:131********},office_info:{tel:010-1111111,address:五环}},row_key11:{personal_info:{city:上海,phone:132********},office_info:{tel:010-1111111}},row_key2:{......
} 4 HBase物理存储结构
物理存储结构即为数据映射关系而在概念视图的空单元格底层实际根本不存储
5 数据模型
1Name Space
命名空间类似于关系型数据库的database概念每个命名空间下有多个表。HBase两个自带的命名空间分别是hbase和defaulthbase中存放的是HBase内置的表default表是用户默认使用的命名空间。
2Table 类似于关系型数据库的表概念。不同的是HBase定义表时只需要声明列族即可不需要声明具体的列。因为数据存储时稀疏的所有往HBase写入数据时字段可以动态、按需指定。因此和关系型数据库相比HBase能够轻松应对字段变更的场景。
3Row HBase表中的每行数据都由一个RowKey和多个Column列组成数据是按照RowKey的字典顺序存储的并且查询数据时只能根据RowKey进行检索所以RowKey的设计十分重要。
4Column HBase中的每个列都由Column Family(列族)和Column Qualifier列限定符进行限定例如infonameinfoage。建表时只需指明列族而列限定符无需预先定义。
5Time Stamp 用于标识数据的不同版本version每条数据写入时系统会自动为其加上该字段其值为写入HBase的时间。
6Cell 由{rowkey, column Familycolumn Qualifier, timestamp} 唯一确定的单元。cell中的数据全部是字节码形式存贮。
6 HBase基本架构 架构角色
1Master 实现类为HMaster负责监控集群中所有的 RegionServer 实例。主要作用如下
管理元数据表格hbase:meta接收用户对表格创建修改删除的命令并执行监控region是否需要进行负载均衡故障转移和region的拆分。 通过启动多个后台线程监控实现上述功能
LoadBalancer负载均衡器周期性监控region分布在regionServer上面是否均衡由参数hbase.balancer.period控制周期时间默认5分钟。CatalogJanitor元数据管理器定期检查和清理hbase:meta中的数据。meta表内容在进阶中介绍。MasterProcWAL master预写日志处理器把master需要执行的任务记录到预写日志WAL中如果master宕机让backupMaster读取日志继续干。
2Region Server Region Server实现类为HRegionServer主要作用如下:
负责数据cell的处理例如写入数据put查询数据get等拆分合并region的实际执行者有master监控有regionServer执行。
3Zookeeper HBase通过Zookeeper来做master的高可用、记录RegionServer的部署信息、并且存储有meta表的位置信息。 HBase对于数据的读写操作是直接访问Zookeeper的在2.3版本推出Master Registry模式客户端可以直接访问master。使用此功能会加大对master的压力减轻对Zookeeper的压力。
4HDFS HDFS为Hbase提供最终的底层数据存储服务同时为HBase提供高容错的支持。
二 Hbase安装
1 依赖环境 需要正常部署zookeeper和hadoop集群
2 HBase的解压
1解压Hbase到指定目录
[mayxhadoop201 module]$ tar -zxvf hbase-2.4.11-bin.tar.gz -C /opt/module/
[mayxhadoop201 module]$ mv /opt/module/hbase-2.4.11 /opt/module/hbase2配置环境变量
[mayxhadoop201 module]$ sudo vim /etc/profile.d/my_env.sh#HBASE_HOME
export HBASE_HOME/opt/module/hbase
export PATH$PATH:$HBASE_HOME/bin3使用source让配置的环境变量生效
[mayxhadoop201 module]$ source /etc/profile.d/my_env.sh3 HBase的配置文件
1hbase-env.sh修改内容可以添加到最后
export HBASE_MANAGES_ZKfalse2hbase-site.xml修改内容
?xml version1.0?
?xml-stylesheet typetext/xsl hrefconfiguration.xsl?configurationpropertynamehbase.zookeeper.quorum/namevaluehadoop201,hadoop202,hadoop203/valuedescriptionThe directory shared by RegionServers./description/propertypropertynamehbase.rootdir/namevaluehdfs://hadoop201:8020/hbase/valuedescriptionThe directory shared by RegionServers./description/propertypropertynamehbase.cluster.distributed/namevaluetrue/value/propertypropertynamehbase.wal.provider/namevaluefilesystem/value/property/configuration3regionservers
hadoop201
hadoop202
hadoop2034解决HBase和Hadoop的log4j兼容性问题 修改HBase的jar包使用Hadoop的jar包
[mayxhadoop201 module]$ mv /opt/module/hbase/lib/client-facing-thirdparty/slf4j-reload4j-1.7.33.jar /opt/module/hbase/lib/client-facing-thirdparty/slf4j-reload4j-1.7.33.jar.bak5 HBase远程发送到其他集群
[mayxhadoop201 module]$ xsync hbase/xsync命令如下
#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
thenecho Not Enough Arguement!exit;
fi#2. 遍历集群所有机器
for host in hadoop201 hadoop202 hadoop203
doecho $host #3. 遍历所有目录挨个发送for file in $do#4. 判断文件是否存在if [ -e $file ]then#5. 获取父目录pdir$(cd -P $(dirname $file); pwd)#6. 获取当前文件的名称fname$(basename $file)ssh $host mkdir -p $pdirrsync -av $pdir/$fname $host:$pdirelseecho $file does not exists!fidone
done
4 HBase服务的启动和关闭
1群启服务
[mayxhadoop201 module]$ bin/start-hbase.sh查看HBase页面http://hadoop201:16010
2停止服务
[mayxhadoop201 module]$ bin/stop-hbase.sh三 HBase Shell操作
1 基本操作
1进入HBase客户端命令行
[mayxhadoop201 hbase]$ bin/hbase shell2查看帮助命令 能够展示HBase中所有能使用的命令主要使用的命令有namespace命令空间相关DDL创建修改表格DML写入读取数据
hbase:001:0 help2 namespace
1创建命名空间 使用特定的help语法能够查看命令如何使用
hbase:002:0 help create_namespace2创建命名空间bigdata
hbase:003:0 create_namespace bigdata3查看所有的命名空间
hbase:004:0 list_namespace3 DDL
1创建表 在bigdata命名空间中创建表格student两个列族。info列族数据维护的版本数为5个如果不写默认版本数为1
hbase:005:0 create bigdata:student, {NAME info, VERSIONS 5}, {NAME msg}如果创建表格只有一个列族没有列族属性可以简写。 如果不写命名空间使用默认的命名空间default。
hbase:009:0 create student1,info2查看表 list查看所有的表名
hbase:013:0 listdescribe查看一个表的详情
hbase:014:0 describe student13修改表 表名创建时写的所有和列族相关的信息都可以后续通过alter修改包括增加删除列族。 增加列族和修改信息都使用覆盖的方法
hbase:015:0 alter student1, {NAME f1, VERSIONS 3}删除信息使用特殊的语法
hbase:015:0 alter student1, NAME f1, METHOD delete
hbase:016:0 alter student1, delete f1
4删除表 shell中删除表格,需要先将表格状态设置为不可用。
hbase:017:0 disable student1
hbase:018:0 drop student14 DML
1写入数据 在HBase中如果想要写入数据只能添加结构中最底层的cell。可以手动写入时间戳指定cell的版本推荐不写默认使用当前的系统时间。如果重复写入相同rowKey相同列的数据会写入多个版本进行覆盖。
hbase:019:0 put bigdata:student,1001,info:name,zhangsan
hbase:020:0 put bigdata:student,1001,info:name,lisi
hbase:021:0 put bigdata:student,1001,info:age,182读取数据 读取数据的方法有两个get和scan。 get最大范围是一行数据也可以进行列的过滤读取数据的结果为多行cell。
hbase:022:0 get bigdata:student,1001
hbase:023:0 get bigdata:student,1001 , {COLUMN info:name}也可以修改读取cell的版本数默认读取一个。最多能够读取当前列族设置的维护版本数。
hbase:024:0get bigdata:student,1001 , {COLUMN info:name, VERSIONS 6}scan是扫描数据能够读取多行数据不建议扫描过多的数据推荐使用startRow和stopRow来控制读取的数据默认范围左闭右开。
hbase:025:0 scan bigdata:student,{STARTROW 1001,STOPROW 1002}3删除数据 删除数据的方法有两个delete和deleteall。 delete表示删除一个版本的数据即为1个cell不填写版本默认删除最新的一个版本。
hbase:026:0 delete bigdata:student,1001,info:namedeleteall表示删除所有版本的数据即为当前行当前列的多个cell。执行命令会标记数据为要删除不会直接将数据彻底删除删除数据只在特定时期清理磁盘时进行
hbase:027:0 deleteall bigdata:student,1001,info:name