Hbase学习笔记复习过程
- 格式:doc
- 大小:312.00 KB
- 文档页数:11
HBASE学习笔记(⼀)⼀、数据库OLAP和OLTP简单的介绍⽐较 1.OLTP:on-line transaction processing在线事务处理,应⽤在传统关系型数据库⽐较多,执⾏⽇常基本的事务处理,⽐如数据库记录的增删改查,如银⾏的⼀笔交易记录,就是⼀个典型的事务处理,强调数据库内存效率,强调内存各种指标的命令率,强调绑定变量,强调并发操作;OLTP 有以这⼏个特点:实时性要求⾼;数据量不是很⼤;交易⼀般是确定的;⾼并发;满⾜ACID 对于OLTP来说⼀般都是⾼可⽤的在线系统,以⼩的事务以及⼩的查询为主,评估其系统的时候,⼀般看其每秒执⾏的 Transaction 以及Execute SQL 的数量。
在这样的系统中,单个数据库每秒处理的 Transaction 往往超过⼏百个,或者是⼏千个, Select 语句的执⾏量每秒⼏千甚⾄⼏万个。
典型的 OLTP 系统有电⼦商务系统、银⾏、证券等,如美国 eBay 的业务数据库,就是很典型的 OLTP 数据库。
OLTP 系统最容易出现瓶颈的地⽅就是 CPU 与磁盘⼦系统。
(1) CPU 出现瓶颈常表现在逻辑读总量与计算性函数或者是过程上,逻辑读总量等于单个语句的逻辑读乘以执⾏次数,如果单个语句执⾏速度虽然很快,但是执⾏次数⾮常多,那么,也可能会导致很⼤的逻辑读总量。
设计的⽅法与优化的⽅法就是减少单个语句的逻辑读,或者是减少它们的执⾏次数。
另外,⼀些计算型的函数,如⾃定义函数、 decode 等的频繁使⽤,也会消耗⼤量的 CPU 时间,造成系统的负载升⾼,正确的设计⽅法或者是优化⽅法,需要尽量避免计算过程,如保存计算结果到统计表就是⼀个好的⽅法。
(2)磁盘⼦系统在 OLTP 环境中,它的承载能⼒⼀般取决于它的 IOPS 处理能⼒. 因为在 OLTP 环境中,磁盘物理读⼀般都是 db file sequential read,也就是单块读,但是这个读的次数⾮常频繁。
Hbase记录-HBase基本操作(⼀)HBase创建表可以使⽤命令创建⼀个表,在这⾥必须指定表名和列族名。
在HBase shell中创建表的语法如下所⽰。
create ‘<table name>’,’<column family>’⽰例下⾯给出的是⼀个表名为emp的样本模式。
它有两个列族:“personal data”和“professional data”。
Row key personal data professional data在HBase shell创建该表如下所⽰。
hbase(main):002:0> create 'emp', 'personal data', ’professional data’它会给下⾯的输出。
0 row(s) in 1.1300 seconds=> Hbase::Table - emp验证创建可以验证是否已经创建,使⽤ list 命令如下所⽰。
在这⾥,可以看到创建的emp表。
hbase(main):002:0> listTABLEemp2 row(s) in 0.0340 seconds使⽤Java API创建⼀个表可以使⽤HBaseAdmin类的createTable()⽅法创建表在HBase中。
这个类属于org.apache.hadoop.hbase.client 包。
下⾯给出的步骤是来使⽤Java API创建表在HBase中。
第1步:实例化HBaseAdmin这个类需要配置对象作为参数,因此初始实例配置类传递此实例给HBaseAdmin。
Configuration conf = HBaseConfiguration.create();HBaseAdmin admin = new HBaseAdmin(conf);第2步:创建TableDescriptorHTableDescriptor类是属于org.apache.hadoop.hbase。
一、HBase性能调优我们经常看到一些文章吹嘘某产品如何如何快,如何如何强,而自己测试时却不如描述的一些数据。
其实原因可能在于你还不是真正理解其内部结构,对于其性能调优方法不够了解。
本文转自TaoBao的Ken Wu同学的博客,是目前看到比较完整的HBase调优文章。
原文链接:HBase性能调优因官方Book Performance Tuning部分章节没有按配置项进行索引,不能达到快速查阅的效果。
所以我以配置项驱动,重新整理了原文,并补充一些自己的理解,如有错误,欢迎指正。
配置优化zookeeper.session.timeout默认值:3分钟(180000ms)说明:RegionServer与Zookeeper间的连接超时时间。
当超时时间到后,ReigonServer会被Zookeeper从RS集群清单中移除,HMaster收到移除通知后,会对这台server负责的regions重新balance,让其他存活的RegionServer接管.调优:这个timeout决定了RegionServer是否能够及时的failover。
设置成1分钟或更低,可以减少因等待超时而被延长的failover时间。
不过需要注意的是,对于一些Online应用,RegionServer从宕机到恢复时间本身就很短的(网络闪断,crash等故障,运维可快速介入),如果调低timeout 时间,反而会得不偿失。
因为当ReigonServer被正式从RS集群中移除时,HMaster 就开始做balance了(让其他RS根据故障机器记录的WAL日志进行恢复)。
当故障的RS在人工介入恢复后,这个balance动作是毫无意义的,反而会使负载不均匀,给RS带来更多负担。
特别是那些固定分配regions的场景。
hbase.regionserver.handler.count默认值:10说明:RegionServer的请求处理IO线程数。
Hbase存储模式行式存储维护索引随机读存储成本高使用环境:表关联特性强,数据量不大,千万量级,OLTP列式存储压缩效率高并行查询使用环境:获取单列,多列大数据环境,读取场景不高,事务性不高OLAPHbase列族式存储列族概念多列数据组合,列名以列族作为前缀,hbase是列族数据库hbase表数据结构是key-value模式:列数据版本一列数据可保存三个版本:时间版本Hbase数据存储原型例子HBase数据表解析语句解析name列族version 时间版本默认是3reolication_scope: 复制机制为了远程复制compression: 压缩类型snappy:压缩率数据存储目录解析hbase-site.xml 保存Hbase的各种设置系统目录:.tmp 临时交换表临时存储数据结果WALs 存储操作日志archive 存储归档和快照分割和合并操作维护管理数据corrupt 存储损坏的日志文件一般是空data 核心目录hbase.id 标识hbase进程hbase.version: 集群文件格式的版本信息oldWALs : 持久化日志用户目录:dataHbase元信息表其属于Hbase的系统表Row key:包含table key timevalue:对应region 指向region server的地址value中最主要的列族是infoinfo包括三个属性列:region_info :region基本信息的存储server:存储region_server的服务器地址和端口server_start_code:存储region_server的shtart_timemeta table是hbase的第一级索引,Hbase的存储设计Hbase中的LSM存储思想什么是LSMLSM树:有C0和C1两个树状结构C0数据存储在内存中C1数据存储在磁盘上存储数据先插入到内存,内存满了后会插入到C1第一级数据插入C0,即内存中第二层数据刷写到硬盘第三层对第二层数据进行聚合合并LSM如何应用到Hbase中Hbase数据存储模块简介分层次设计思想regionserverregion:存储数据的最小单元,一个regionserver包含多个region,每个region中包含的数据都是互斥的store:region中包含了多个store,一个store对应Hbase中的列族,一个Hbase有多少列族则每个region里就有多少个storememStore:每个store都包含一个memStore,内存式数据结构,数据会先刷写到memstore 里,store的内存缓冲storeFile:memStore里的数据满了后,数据会刷写到storeFile中,Hfile的简单封装Hfile:将storeFile中的数据封装成Hfile,一种存储格式,所有数据最终都存储到Hfile中HDFS:将Hfile中的数据刷写成正真的Hfile文件HLog WAL:一个regionserver只有一个HLog实例Hlog:预写日志,用户存储的数据会最先保存在这里,目的高可用,宕机时可以回放回复Level0:快速写入,降低延迟,实时交互level1:实现不可靠数据的持久化,(不可靠数据:存储在level0中的数据)Hbase region解析数据——》region server——》region什么是region?一个region对应一个regionserver 一个regionserver有多个region每个表的一行对应一个region,所以region是Hbase中分布式存储的最小单元当数据行不断插入,到达列族的阈值,region会被水平拆分成两个regionregion在regionserver中可能会出现移动——》master的附带均衡策略当宕机或者挂掉时,regionserver上的region会被master转移到其他regionserver上每个region会有3个信息标识自己身份:table_name start_row_key create_time region的特点是负载单元和分布式存储的最小单元,但不是存储的最小单元(存储的最小单元是Hfile)region数量太多会造成数量下降region数目太少会妨碍可扩展性降低并行能力不能做到覆盖均衡region的数量不能低于集群中节点的数量region的拆分策略不可见master不参与分割操作Hbase Hfile解析store:和列族一对一store也就代表列族有region对其进行管理memstore:和store一对一其是内存处理结构storefile:一个store包含0个或者多个storefile 是文件系统级别的处理结构是memstore中的内存数据刷写到内存中Hbase被称为列族式数据库的原因:因为在region中有几个列族就有几个store,会将要访问的数据放在一个store里,而且Hbase会根据store的大小来判断是否要去切分regionHfile是hadoop的二进制文件key-value类型用户数据存储在scanned block section 更具体一点是 data block 中Hfile 是数据存储的最小单元,更具体一点,Hfile 内的data block 是存储的最基本单元 是实际存储用户的结构 存储的key-value 数据 hbase 中每个数据都是以key-value 形式进行存储 data block 结构keytype的作用:hbase主要是插入性能高,但是hbase在删除时,并没有真正删除数据,hfile一旦刷写数据成功,将不可做修改,但如果真的需要删除数据怎么办呢?靠keytype,实际上打上删除标志Hbase WAL解析什么时WAL?日志机制---灾难恢复服务器崩溃—重放log---恢复远程备份如何实现:修改操作封装在key-value实例中---rpc调用发送给regionserver---写log---写region写入regionserver时也必须写入Wal 否则被认为写入失败什么是Hlog一个regionserver对应一个Hlog实例一台服务器只有一个hlog什么是Hlogkey:WAL:序列号文件记录是key-value 形式value:put delete等操作记录key:就是Hlog 的keyHlogkey包含的内容什么是HlogSyncer:日志同步刷写类写入WAL是默认直接写入到文件系统,有时候为了性能也会暂时保存在内存中此时需要hlogsyncer,这个异步线程实现数据刷写到文件系统中什么是Hlogroller?每经过60分钟会打开一个新的日志文件一段时间后会有很多文件需要维护Hlogroller则是负责这个在特定时间滚动日志,避免单个文件过大同时删除旧的不需要的日志Hbase Compaction解析与LSM的第三层有关合并Hfile文件:读key-value---由大到小写入新文件---新文件取代旧文件对外提供服务数据刷写导致存储目录保存了过多文件导致维护困难查找困难需要compaction将文件由多变少打开关闭文件十分消耗资源小合并:minorCompaction 合并成多个storefile大合并:majorCompaction 合并成一个storefile 同时删除三类无意义数据:delete数据过期数据版本号超过列族设定的数据时间持续长,消耗时间长三种触发因素:1.memstore flash出发就是内存中的数据往硬盘中刷写时触发 2. 后台线程周期性检查后台定期检查是否需要执行compaction3. 手动触发为了执行minorCompaction 因为majorCompaction 会影响性能Hbase 数据存储解析Hbase 数据存取的流程1. 数据存储2.数据获取客户端的流程和存入的流程一致不同点再服务器端的操作Hbase数据存取优化1.存储优化使用memstore和WAL机制进行存储优化实现了数据顺序快速的插入,极大降低了数据存取的延迟这实际上是利用的LSM的多级存储原理2.检索(获取)优化主要用BloomFilter优化什么是BloomFilter?BloomFilter实际上是一个很长的二进制矢量和一系列随机的映射函数其作用是检索一个元素是否在一个集合中其优点在于空间效率和查询时间都远远高于其他算法,缺点是有一定的误识别率和删除困难是一种多哈希函数快速查找算法,通常用于快速判断某个元素是否属于某个集合,但是并不要求100%确定Hbase通过bloomfilter实现随机读的优化Bloomfilter是一个列族级别的属性:如果在表中涉及了bloomfilter,那么Hbase会在生成storefile的过程中,包含一份bloomfilter的数据来作为数据的索引,所以当开启bloomfilter属性时,会有一定的内存开销在bloomfilter中有两种类型Hbase数据存取api介绍总结。
参考书籍:Hadoop in action, 吴超沉思录1.Hbase简介1.面向列的分布式数据库2. 以HDFS作为文件系统3. 利用MapReduce处理Hbase中海量数据4. ZookKeeper作为协调工具5. sqoop提供Hbase到关系型数据库中数据导入功能6. Hive和pig提供高层语言支持如HSQL2. 伪分布式安装准备:安装Hadoop 详细见上一篇日志:hadoop分布式安装hbase版本: hbase-0.94.7-security.tar.gz安装目录/usr/local步骤:1. 安装tar -zxvf hbase-0.94.7-security.tar.gz2. 重命名:mv hbase-0.94.7-security hbase3. 配置环境变量hbase_home (vi /etc/profile)4. 修改配置文件1.hbase_home/conf/hbase_env.sh修改java_home exportJAVA_HOME=/usr/local/jdk/修改zookeeper(最后一行)export HBASE_MANAGES_ZK=true(使用Hbase托管的ZooKeeper)2.hbase_home/conf/hbase-site.xml文件configuration 中加入:<property><name>hbase.rootdir</name><value>hdfs://hadoop0:9000/hbase</value></property><property> <name>hbase.cluster.distributed</name><value>true</value></property><property><name>hbase.zookeeper.quorum</name><value>hadoop0</value></property><property><name>dfs.replication</name><value>1</value></property>5. 启动hbase先启动hadoop(start-all.sh)启用hbase (start-hbase.sh)jps查看进程(HMaster,HRegionServer, HQuorumPeer)http://hadoop0:60010可以查看管理界面,如下:6. 进程说明:HMaster: 管理Hbase table的DDL操作给region分配工作HResionServer:原则上每个slave对应一个HRegionServer HQuorumPeer:ZooKeeper的守护进程,此处我们使用的是Hbase内置的ZooKeeper(在hbase-env.sh中有配置)3. 分布式安装准备条件:hadoop分布式环境已安装,查看hadoop分布式安装hadoop0主机上hbase伪分布已安装完成安装:1. scp -rp /usr/local/hbase hadoop1:/usr/local2. 在hadoop0上更改hbase_home/conf/regionservers 将localhost更改为hadoop13. 在hadoop0上启动hbase4. jps查看,如下:hadoop0上进程:hadoop1上进程:同理可通过hostname:60010访问hbase管理界面,同分布式安装部分4. 数据模型1. Hbase数据库采用了和Bigtable非常类似的数据类型,表格是稀疏的;1. row key 行键,table的主键2. timestamp 时间戳,数据操作时对应的时间戳,可以看成数据的version number3. Column Family 列簇,每个family可以由任意多个column组成,列名是<族名>:<标签>形式;一个表格的族名时固定的,除非使用管理员权限来改变表格的族名;不过可以在任何时候添加新的标签;eg:course对于表来说是一个有两个列的列族(该列族由两个列组成math 和art);4.两张特殊的表 -ROOT- 和 .META.作用如下:(即-ROOT-记录.META.的region信息,.META.记录用户表的region信息)关系如下:基本操作(注意操作后不要加分号,习惯了sql,总是在后面加分号,然后发现执行语句后都一直没有反应,去掉分号后成功)(表名和列名都需要加引号,不区分单双引号)Hbase shell,是Hbase的命令行工具,命令行中执行hbase shell即可进入hbase shell命令行1)list 查看hbase中所有表2)创建表:create '表名','列簇1','列簇2'....create'student', 'name','grade','course'在管理界面中查看student3)describe 查看表结构describe '表名'eg: describe 'student'hbase(main):003:0>describe "student"DESCRIPTION ENABLED 'student', {NAME =>'course', DATA_BLOCK_ENCODING =true >'NONE', BLOOMFILTER =>'NONE', REPLICATION_SCOPE =>'0', VERSIONS =>'3', COMPRESSION =>'NONE', MIN_VERSIONS =>'0', TTL =>'2147483647', KEEP_DELETED_CELLS =>'false', BLOCKSIZE =>'65536', IN_MEMORY=>'false', ENCODE_ON_DISK =>'true', BLOCKCACHE =>'true'}, {NAME =>'grade', DATA_BLOCK_ENCODING =>'NONE', BLOOMFILTER =>'NONE', REPLICATION_SCOPE =>'0', VERSIONS =>'3', COMPRESSION =>'NONE', MIN_VERSIONS =>'0', TTL =>'2147483647', KEEP_DELETED_CELLS =>'false', BLOCKSIZE =>'65536', IN_MEMORY =>'false', ENCODE_ON_DISK =>'true', BLOCKCACHE =>'true'}, {NAME =>'name', DATA_BLOCK_ENCODING =>'NONE', BLOOMFILTER =>'NONE', REPLICATION_SCOPE =>'0', VERSIONS =>'3', COMPRESSION =>'NONE', MIN_VERSIONS =>'0', TTL =>'2147483647', KEEP_DELETED_CELLS =>'false', BLOCKSIZE =>'65536', IN_MEMORY =>'false', ENCODE_ON_DISK =>'true', BLOCKCACHE =>'true'}4)插入数据和查看数据put '表名','行键名','列名','value','列名2','value2','family:列名1','value3'....... put 'student','wish','name:','wish'查询数据:get '表名','行名'get'student','wish'插入更多数据hbase(main):004:0>put 'student','wish','course:English','100'hbase(main):005:0>put 'student','wish','course:Chinese','60'hbase(main):006:0>put 'student','rain','course:Chinese','100'hbase(main):007:0>put 'student','rain','course:English','200'查看表中数据:scan 'student'其他get例子:get'student','wish','course'get'student','wish',['course']get'student','wish',['course','name']5)删除数据delete'student','wish','course:Math'6)删除表需停止表的可用性,再删除表disable 'student'drop'student' 7) 统计行数count'student'。
HBase学习报告0 引言随着互联网的发展,用户的使用量和使用范围变得越来越广,因此会产生大量的数据,对于这些数据的储存、处理,传统的数据库表现出越来越多的问题,从目前发展情况看,关系数据库已经不适应这种巨大的存储量和计算要求,查询效率随着数据量的增长变得越来越低。
面对这些问题,一些新型的数据库应运而生,对海量数据的存储和处理提出了解决方案,HBase就是其中之一。
1 HBase简介Hbase是Apache Hadoop的数据库,能够对大数据提供随机、实时的读写访问,具有开源、分布式、可扩展及面向列存储的特点。
HBase的目标是处理大型的数据,具体来说就是使用普通的硬件配置即可处理成千上万行的列和行组成的大数据。
HBase是一个分布式的,多版本的,面向列的存储模型。
它可以使用本地文件系统。
也可以使用HDFS文件存储系统,但是,为了提高系统的健壮性和可靠性,并充分发挥HBase的大数据处理能力,使用HDFS作为文件存储系统更合适,使用MapReduce来处理海量数据,利用Zookeeper作为协同服务。
另外,HBase的存储结构是松散性数据,它使用简单的key和value的映射关系,但又不是简单的映射关系,这种关系为超大规模的高并发的海量数据实时响应系统提供了一个很好的解决方案。
HBase的存储的数据从逻辑上来看就像是一张很大的表,并且,它的数据可以根据需求动态地增加。
HBase还具有这样的特点:它向下提供了存储,向上提供了运算。
这样的特点使它将数据存储和并行计算完美地结合在了一起。
2 HBase体系结构HBase的服务器体系结构遵从简单的主从服务器架构,它由HRegion服务器群和HBase Master服务器构成。
HBase Master服务器负责管理所有的HRegion服务器,而HBase中的所有服务器都是通过ZooKeeper来进行协调并处理HBase服务器运行期间可能遇到的错误。
HBase Master本身并不储存HBase中的任何数据。
HBase核⼼知识点总结⼀、HBase介绍1、基本概念HBase是⼀种Hadoop数据库,经常被描述为⼀种稀疏的,分布式的,持久化的,多维有序映射,它基于⾏键、列键和时间戳建⽴索引,是⼀个可以随机访问的存储和检索数据的平台。
HBase不限制存储的数据的种类,允许动态的、灵活的数据模型,不⽤SQL语⾔,也不强调数据之间的关系。
HBase被设计成在⼀个服务器集群上运⾏,可以相应地横向扩展。
2、HBase使⽤场景和成功案例互联⽹搜索问题:爬⾍收集⽹页,存储到BigTable⾥,MapReduce计算作业扫描全表⽣成搜索索引,从BigTable中查询搜索结果,展⽰给⽤户。
抓取增量数据:例如,抓取监控指标,抓取⽤户交互数据,遥测技术,定向投放⼴告等内容服务信息交互3、HBase Shell命令⾏交互:启动Shell $ hbase shell列出所有的表 hbase > list创建名为mytable的表,含有⼀个列族hb hbase > create ' mytable' , 'hb'在‘mytable’表的'first'⾏中的‘hb:data’列对应的数据单元中插⼊字节数组‘hello HBase’hbase > put 'mytable' , 'first' , 'hb:data' , 'hello HBase'读取mytable表 ‘first’⾏的内容 hbase > get 'mytable' , 'first'读取mytable表所有的内容 hbase > scan ‘mytable'⼆、⼊门1、API和数据操作有关的HBase API有5个,分别是 Get(读),Put(写),Delete(删),Scan(扫描)和Increment(列值递增)2、操作表⾸先要创建⼀个configuration对象 Configuration conf = HBaseConfiguration.create();使⽤eclipse时的话还必须将配置⽂件添加进来。
Had oop学习文档Hbase学习总结(一)Hbase的安装与运行1.下载并解压hbase-0.94.6.1.tar.gztar xfz hbase-0.94.6.1.tar.gz2.编辑conf/hbase-site.xml在configuration标签中添加:<property><name>hbase.rootdir</name><value>file:///var/lib/tcommsvr/Hbase_lin/hbase</value></property>说明:该项配置了数据写入的目录,默认 hbase.rootdir 是指向 /tmp/hbase-${} ,也就说你会在重启后丢失数据(重启的时候操作系统会清理/tmp目录)。
3.编辑conf/hbase-env.sh修改JAVA_HOME路径export JAVA_HOME=/usr/java/jdk1.6.0_29说明:该项默认是注释掉的,需要放开并修改4.进入bin目录,运行start-hbase.sh进入logs目录下查看hbase-root-master-slave2.log日志,查看运行情况5.查看hbase文件夹,可以看到如上图所示的内容生成。
Hbase的shell操作1.进入bin目录,运行sh hbase shell进入shell命令输入help可查看常用命令下面测试建立一个表并添加几条数据,并查询,然后删除该表create 'test_lin' ,'cf'然后执行list,可以看到该表已创建,该表名称为test_lin , 这个表只有一个column family 为 cf,注意:表名称和column family 都必须加上单引号下面插入一些记录:put 'test_lin','lucy','cf:name_lucy','New York_lucy'put 'test_lin','lily','cf:name_lily','London_Lily'put 'test_lin','Jack','cf:name_Jack','Beijing_Jack'查看该表:scan 'test_lin'获取一行(行为Jack的)数据get 'test_lin', 'Jack'清除该表(删掉)disable 'test_lin'然后drop 'test_lin'关闭shell:exit停止HbaseBin目录中有相应的脚本:stop-hbase.sh(二)Hbase的存储结构数据在Hbase中是以表的方式存储的,所有的表(由行和列构成)从属于某一个column family。
hbase~基础知识梳理HBase的组成在这⾥,让我们了解下 HBase 都有哪些模块,以及⼤致的⼯作流程。
前⾯我们提到过 HBase 也是构建于 HDFS 之上,这是正确的,但也不是完全正确。
HBase 其实也⽀持直接在本地⽂件系统之上运⾏,不过这样的 HBase 只能运⾏在⼀台机器上,那么对于分布式⼤数据的环境是没有意义的(这也是所谓的HBase 的单机模式)。
⼀般只⽤于测试或者验证某⼀个 HBase 的功能,后⾯我们在详细的介绍 HBase 的⼏种运⾏模式。
这⾥我们只要记得在分布式的⽣产环境中,HBase 需要运⾏在 HDFS 之上,以 HDFS 作为其基础的存储设施。
HBase 上层提供了访问的数据的 Java API 层,供应⽤访问存储在 HBase 的数据。
在 HBase 的集群中主要由 Master 和 Region Server 组成,以及 Zookeeper,具体模块如下图所⽰。
MasterHBase Master ⽤于协调多个 Region Server,侦测各个 Region Server 之间的状态,并平衡 Region Server 之间的负载。
HBase Master 还有⼀个职责就是负责分配 Region 给 Region Server。
HBase 允许多个 Master 节点共存,但是这需要 Zookeeper 的帮助。
不过当多个 Master 节点共存时,只有⼀个 Master 是提供服务的,其他的 Master 节点处于待命的状态。
当正在⼯作的 Master 节点宕机时,其他的 Master 则会接管 HBase 的集群。
Region Server对于⼀个 Region Server ⽽⾔,其包括了多个 Region。
Region Server 的作⽤只是管理表格,以及实现读写操作。
Client 直接连接 Region Server,并通信获取HBase 中的数据。
H b a s e学习笔记参考书籍: Hadoop in action, 吴超沉思录1.Hbase简介1.面向列的分布式数据库2. 以HDFS作为文件系统3. 利用MapReduce处理Hbase中海量数据4. ZookKeeper作为协调工具5. sqoop提供Hbase到关系型数据库中数据导入功能6. Hive和pig提供高层语言支持如HSQL2. 伪分布式安装准备:安装Hadoop 详细见上一篇日志:hadoop分布式安装hbase版本: hbase-0.94.7-security.tar.gz安装目录 /usr/local步骤:1. 安装 tar -zxvf hbase-0.94.7-security.tar.gz2. 重命名: mv hbase-0.94.7-security hbase3. 配置环境变量hbase_home (vi /etc/profile)4. 修改配置文件1. hbase_home/conf/hbase_env.sh修改java_home exportJAVA_HOME=/usr/local/jdk/修改zookeeper(最后一行)export HBASE_MANAGES_ZK=true(使用Hbase托管的ZooKeeper)2. hbase_home/conf/hbase-site.xml文件configuration 中加入:<property><name>hbase.rootdir</name><value>hdfs://hadoop0:9000/hbase</value></property><property> <name>hbase.cluster.distributed</name><value>true</value></property><property><name>hbase.zookeeper.quorum</name><value>hadoop0</value></property><property><name>dfs.replication</name><value>1</value></property>5. 启动hbase先启动hadoop(start-all.sh)启用hbase (start-hbase.sh)jps查看进程(HMaster,HRegionServer, HQuorumPeer)http://hadoop0:60010可以查看管理界面,如下:6. 进程说明:HMaster: 管理Hbase table的DDL操作给region分配工作HResionServer:原则上每个slave对应一个HRegionServer HQuorumPeer: ZooKeeper的守护进程,此处我们使用的是Hbase内置的ZooKeeper(在hbase-env.sh中有配置)3. 分布式安装准备条件: hadoop分布式环境已安装,查看hadoop分布式安装hadoop0主机上hbase伪分布已安装完成安装:1. scp -rp /usr/local/hbase hadoop1:/usr/local2. 在hadoop0上更改hbase_home/conf/regionservers 将localhost更改为hadoop13. 在hadoop0上启动hbase4. jps查看,如下:hadoop0上进程:hadoop1上进程:同理可通过 hostname:60010访问hbase管理界面,同分布式安装部分4. 数据模型1. Hbase数据库采用了和Bigtable非常类似的数据类型,表格是稀疏的;1. row key 行键,table的主键2. timestamp 时间戳,数据操作时对应的时间戳,可以看成数据的version number3. Column Family 列簇,每个family可以由任意多个column组成,列名是<族名>:<标签>形式;一个表格的族名时固定的,除非使用管理员权限来改变表格的族名;不过可以在任何时候添加新的标签;eg:course对于表来说是一个有两个列的列族(该列族由两个列组成math 和art);4.两张特殊的表 -ROOT- 和 .META.作用如下:(即-ROOT-记录.META.的region信息,.META.记录用户表的region信息)关系如下:基本操作(注意操作后不要加分号,习惯了sql,总是在后面加分号,然后发现执行语句后都一直没有反应,去掉分号后成功)(表名和列名都需要加引号,不区分单双引号)Hbase shell,是Hbase的命令行工具,命令行中执行hbase shell即可进入hbase shell命令行1) list 查看hbase中所有表2)创建表:create '表名','列簇1','列簇2'....create'student', 'name','grade','course'在管理界面中查看student3)describe 查看表结构describe '表名'eg: describe 'student'hbase(main):003:0> describe "student"DESCRIPTION ENABLED'student', {NAME =>'course', DATA_BLOCK_ENCODING =true >'NONE', BLOOMFILTER =>'NONE', REPLICATION_SCOPE =>'0', VERSIONS =>'3', COMPRESSION =>'NONE', MIN_VERSIONS =>'0', TTL =>'2147483647', KEEP_DELETED_CELLS =>'false', BLOCKSIZE =>'65536', IN_MEMORY=>'false', ENCODE_ON_DISK =>'true', BLOCKCACHE =>'true'}, {NAME =>'grade', DATA_BLOCK_ENCODING =>'NONE', BLOOMFILTER =>'NONE', REPLICATION_SCOPE => '0', VERSIONS =>'3', COMPRESSION =>'NONE', MIN_VERSIONS =>'0', TTL =>'2147483647', KEEP_DELETED_CELLS =>'false', BLOCKSIZE =>'65536', IN_MEMORY =>'false', ENCODE_ON_DISK =>'true', BLOCKCACHE =>'true'}, {NAME =>'name', DATA_BLOCK_ENCODING =>'NONE', BLOOMFILTER =>'NONE', REPLICATION_SCOPE =>'0', VERSIONS =>'3', COMPRESSION =>'NONE', MIN_VERSIONS =>'0', TTL =>'2147483647', KEEP_DELETED_CELLS =>'false', BLOCKSIZE =>'65536', IN_MEMORY =>'false', ENCODE_ON_DISK =>'true', BLOCKCACHE =>'true'}4)插入数据和查看数据put '表名','行键名','列名','value','列名2','value2','family:列名1','value3'....... put 'student','wish','name:','wish'查询数据:get '表名','行名'get'student','wish'插入更多数据hbase(main):004:0> put 'student','wish','course:English','100'hbase(main):005:0> put 'student','wish','course:Chinese','60'hbase(main):006:0> put 'student','rain','course:Chinese','100'hbase(main):007:0> put 'student','rain','course:English','200'查看表中数据: scan 'student'其他get例子:get'student','wish','course'get'student','wish',['course']get'student','wish',['course','name']5)删除数据delete'student','wish','course:Math'6)删除表需停止表的可用性,再删除表disable 'student'drop'student'7) 统计行数count'student'精品文档收集于网络,如有侵权请联系管理员删除。