HBase文档

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

HBase是Bigtable的开源山寨版本。是建立的HDFS之上,提供高可靠性、高性能、列存储、可伸缩、实时读写的数据库系统。它介于NoSQL和RDBMS之间,仅能通过主键(rowkey)和主键的range来检索数据,仅支持单行事务。主要用来存储非结构化和半结构化的松散数据。与Hadoop一样,HBase目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加计算和存储能力。HBase的特点HBase中的表一般有这样的特点:1大:一个表可以有上亿行,上百万列2面向列:面向列(族)的存储和权限控制,列(族)独立检索。3稀疏:对于为空(null)的列,并不占用存储空间,因此,表可以设计的非常稀疏。HBase的存储结构1.目录表(CatalogTables):目录表-ROOT-和.META.作为HBase表存在。他们被HBaseshell的list命令过滤掉了,但他们和其他表一样存在。-ROOT-保存.META.表存在哪里的踪迹。.META.保存系统中所有region列表。2.Client:包含访问HBase的接口,client维护着一些cache来加快对hbase的访问,比如regione的位置信息。HBase客户端的HTable类负责寻找相应的RegionServers来处理行。他是先查询.META.和-ROOT-目录表。然后再确定region的位置。定位到所需要的区域后,客户端会直接去访问相应的region(不经过master),发起读写请求。这些信息会缓存在客户端,这样就不用每发起一个请求就去查一下。如果一个region已经废弃(原因可能是masterloadbalance或者RegionServer死了),客户端就会重新进行这个步骤,决定要去访问的新的地址。3.ZooKeeper:保证任何时候,集群中只有一个master;存贮所有Region的寻址入口;实时监控RegionServer的状态;将Regionserver的上线和下线信息实时通知给Master;存储Hbase的schema,包括有哪些table,每个table有哪些columnfamily。4.HMaster:为Regionserver分配region;负责regionserver的负载均衡;发现失效的regionserver并重新分配其上的region;HDFS上的垃圾文件回收;处理schema更新请求。总之就是负责监控集群中所有的RegionServer实例,也是所有metadata改变的接口,在一个分布式环境中Hmaster通常是运行在一个NameNode上的。5.HRegionServer:Regionserver维护Master分配给它的region,处理对这些region的IO请求;Regionserver负责切分在运行过程中变得过大的region。在分布式环境中,RegionServer运行在DataNode下。6.Region:Region是表获取和分布的基本元素,由每个列族的一个库(Store)组成。对象层级图如下:Table(HBasetable)Region(Regionsforthetable)Store(StoreperColumnFamilyforeachRegionforthetable)MemStore(MemStoreforeachStoreforeachRegionforthetable)StoreFile(StoreFilesforeachStoreforeachRegionforthetable)Block(BlockswithinaStoreFilewithinaStoreforeachRegionforthetable)可以看到,client访问HBase上数据的过程并不需要master参与(寻址访问zookeeper和regionserver,数据读写访问regioneserver),master仅仅维护者table和region的元数据信息,负载很低。-ROOT-保存.META.表存在哪里的踪迹,.META.保存系统中所有用户表的region列表。这些信息保存在ZooKeeper中,Client在连接HBase后会将这些信息缓存起来,以减少网络通信的压力。逻辑视图RowKeycolumn-family1column-family2column-family3addresscompanynameagegendertelkey1google18female10086key2beijingzhangsanmalekey3applelisi100101.RowKey与NoSQL数据库们一样,rowkey是用来检索记录的主键。访问HBasetable中的行,只有三种方式:1)通过单个rowkey访问2)通过rowkey的range3)全表扫描Rowkey行键(Rowkey)可以是任意字符串(最大长度是64KB,实际应用中长度一般为10-100bytes),在hbase内部,rowkey保存为字节数组。存储时,数据按照Rowkey的字典序(byteorder)排序存储。设计key时,要充分排序存储这个特性,将经常一起读取的行存储放到一起。行的一次读写是原子操作(不论一次读写多少列)。这个设计决策能够使用户很容易的理解程序在对同一个行进行并发更新操作时的行为。2.列族在HBase是列族一些列的集合。一个列族所有列成员是有着相同的前缀。比如,列courses:history和courses:math都是列族courses的成员.冒号(:)是列族的分隔符,用来区分前缀和列名。column前缀必须是可打印的字符,剩下的部分(称为qualify),可以又任意字节数组组成。列族必须在表建立的时候声明。column就不需要了,随时可以新建。在物理上,一个的列族成员在文件系统上都是存储在一起。因为存储优化都是针对列族级别的,这就意味着,一个colimnfamily的所有成员的是用相同的方式访问的。访问控制、磁盘和内存的使用统计都是在列族层面进行的。实际应用中,列族上的控制权限能帮助我们管理不同类型的应用:我们允许一些应用可以添加新的基本数据、一些应用可以读取基本数据并创建继承的列族、一些应用则只允许浏览数据(甚至可能因为隐私的原因不能浏览所有数据)。3.时间戳HBase中通过row和columns确定的为一个存贮单元称为cell。每个cell都保存着同一份数据的多个版本。版本通过时间戳来索引。时间戳的类型是64位整型。时间戳可以由hbase(在数据写入时自动)赋值,此时时间戳是精确到毫秒的当前系统时间。时间戳也可以由客户显式赋值。如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳。每个cell中,不同版本的数据按照时间倒序排序,即最新的数据排在最前面。为了避免数据存在过多版本造成的的管理(包括存贮和索引)负担,hbase提供了两种数据版本回收方式。一是保存数据的最后n个版本,二是保存最近一段时间内的版本(比如最近七天)。用户可以针对每个列族进行设置。时间戳针对的不是一行,而是对一个cell,一个cell的修改就会产生一个时间戳。4.Cell{row,column,version}元组就是一个HBase中的一个cell。Cell的内容是不可分割的字节数组。5.版本一个{row,column,version}元组是HBase中的一个单元(cell)。但是有可能会有很多的单元的行和列是相同的,可以使用版本来区分不同的单元。rows和columnkey是用字节数组表示的,version则是用一个长整型表示。这个long的值使用java.util.Date.getTime()或者System.currentTimeMillis()产生的。这就意味着他的含义是“当前时间和1970-01-01UTC的时间差,单位毫秒。”在HBase中,版本是按倒序排列的,因此当读取这个文件的时候,最先找到的是最近的版本。Gets实在Scan的基础上实现的。默认情况下,如果你没有指定版本,当你使用Get操作的时候,会返回最近版本的Cell(该Cell可能是最新写入的,但不能保证)。一个Put操作会给一个cell,创建一个版本,默认使用当前时间戳,当然你也可以自己设置时间戳。这就意味着你可以把时间设置在过去或者未来,或者随意使用一个Long值。要想覆盖一个现有的值,就意味着你的row,column和版本必须完全相等。有三种不同类型的内部删除标记:1)Delete:删除列的指定版本。2)Deletecolumn:删除列的所有版本。3)Deletefamily:删除特定列族所有列。当删除一行,HBase将内部对每个列族创建墓碑(非每个单独列)。删除操作的实现是创建一个墓碑标记。例如,我们想要删除一个版本,或者默认是currentTimeMillis。就意味着“删除比这个版本更早的所有版本”。HBase不会去改那些数据,数据不会立即从文件中删除。他使用删除标记来屏蔽掉这些值。若你知道的版本比数据中的版本晚,就意味着这一行中的所有数据都会被删除。Hbase安装Hbase需要在Hadoop环境运行,因此安装Hbase的前提是必须安装Hadoop环境。1.解压hbase-0.94.20.tar.gz到指定的目录下(这里是在/home/hadoop/java/),代码如下:tar–zxvfhbase-0.94.20.tar.gz2.配置Hbase的环境变量到/etc/profile文件中:3.修改conf/hbase-env.sh:1)去掉JAVA_HOME前的’#’,并将其修改成自己安装的Java路径。2)去掉HBASE_MANAGES_ZK前的’#’,并设置其值为true。修改后的代码如下:4.打开conf/hbase-site.xml,添加如下内容:注意:用javaclient操作hbase时,需要将该文件拷贝到src目录下,并在代码的宿主机的hosts中映射ubuntu1。5.复制hadoop下的hadoop-core-1.0.3.jar到hbase/lib目录下/6.启动Hbase:①先启动hdoop:使hadoop离开安全模式②启动hbase:7.若出现下图所示的信息,说明Hbase运行成功。通过Hbase的WebUI查看Hbase是否安装成功。的Shell操作2.一般操作1)查看Hbase服务器状态:2)查看Hbase版本:3.DDL操作1)创建一个表school:create‘tablename’,‘列族1’,‘列族2’,‘列族3’create'school','student','course','teacher2)查看所有的表:3)查看表结构:4)删除一个列族。删除列族有两步,首先disable表,最后enable表。create'member','member_id','address','info'5)删除表:Disabledrop6)查询表是否存在:7)判断表是否enable:8)判断表是否disable:4.DML操作1)向school插入几条记录,命令如下(使用put只能插入一个cell的值):格式:put‘tablename’,’key’,’列族:列名’,’值’2)获取一条数据:3)更新一条记录:4)通过timestamp获取两个版本的数据:5)全表扫描:6)删除ID为’1’的值的’student:sex’字段:7)查询表中有多少行:8)将整张表清空:Hbase的常见错误(VIP)在HBase安装完成后,在虚拟机的不稳定环境中,时常会出现一些错误。这里就这些错误提供一些解决方法。1.错误信息:ERROR:org.apache.hadoop.hbase.MasterNotRunningException:Retried7times.这种情况下,退出hbaseshell后先使用jps命令查看HMaster进程是否存在。如果不存在,则将相关HBase进程杀死后重启HBa

1 / 13
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功