资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,HBase,简介,数据部:桂宇,目录,HBase,简介,HBase,体系结构,HBase,数据模型,HBase,提供的接口,HBase,优化,HBase,用途,HBase,简介,Hadoop,生态系统,成员名,用途,Hadoop Common,Hadoop,体系最底层的一个模块,为,Hadoop,各子项目提供各种工具,如:配置文件和日志操作等。,Avro,Avro,是,doug cutting,主持的,RPC,项目,有点类似,Google,的,protobuf,和,Facebook,的,thrift,。,avro,用来做以后,hadoop,的,RPC,,使,hadoop,的,RPC,模块通信速度更快、数据结构更紧凑。,Chukwa,Chukwa,是基于,Hadoop,的大集群监控系统,由,yahoo,贡献。,HBase,基于,Hadoop Distributed File System,,是一个开源的,基于列存储模型的分布式数据库。,HDFS,分布式文件系统,Hive,hive,是基于,hadoop,分布式计算平台上的提供,data warehouse,的,sql,功能的一套软件。使得存储在,hadoop,里面的海量数据的汇总,即席查询简单化。,hive,提供了一套,QL,的查询语言,以,sql,为基础,使用起来很方便。,MapReduce,实现了,MapReduce,编程框架,Pig,Pig,是,SQL-like,语言,是在,MapReduce,上构建的一种高级查询语言,把一些运算编译进,MapReduce,模型的,Map,和,Reduce,中,并且用户可以定义自己的功能。,ZooKeeper,Zookeeper,是,Google,的,Chubby,一个开源的实现。它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。,ZooKeeper,的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。,HBase,简介,HBase,是一个分布式的、多版本的、面向列的开源数据库,利用,Hadoop HDFS,作为其文件存储系统,提供高可靠性、高性能、列存储、可伸缩、实时读写的数据库系统。,利用,Hadoop MapReduce,来处理,HBase,中的海量数据,利用,Zookeeper,作为协同服务。,HBase,简介,HBase,中表的特点,大:一个表可以有上亿行,上百万列(列多时,插入变慢),面向列:面向列,(,族,),的存储和权限控制,列,(,族,),独立检索。,稀疏:对于为空,(null),的列,并不占用存储空间,因此,表可以设计的非常稀疏。,每个,cell,中的数据可以有多个版本,默认情况下版本号自动分配,是单元格插入时的时间戳;,HBase,中的数据都是字符串,没有类型;,HBase,特点,强一致性,同一行数据的读写只在同一台,Region Server,上进行,水平伸缩,Region,的自动分裂以及,Master,的,balance,;,只用增加,Datanode,机器即可增加容量;,只用增加,Region Server,机器即可增加读写吞吐量,HBase,特点,行事务,同一行的列的写入是原子的;,Column Oriented+,三维有序,SortedMap(RowKey,,,List(SortedMap(Column,,,List(Value,,,Timestamp),),),rowKey(ASC)+columnLabel(ASC)+Version(DESC)-value,HBase,特点,支持有限查询方式和一级索引,仅支持单行事务,仅支持三种查询方式(,single row key,、,range row key,、,scan all rows of table,),【,可通过,hive,等实现多表关联查询,】,仅基于,row key,的索引,高性能随机写,WAL(Write Ahead Log),HBase,特点,和,Hadoop,无缝集成,Hadoop,分析后的结果可直接写入,HBase,;,存放在,HBase,的数据可直接通过,Hadoop,来进行分析。,HBase,与,RDBMS,对比,HBase,RDBMS,数据类型,只有字符串,丰富的数据类型,数据操作,简单的增删改查,各种各样的函数,表连接,存储模式,基于列存储,基于表格结构和行存储,数据保护,更新后旧版本仍然会保留,替换,可伸缩性,轻易的进行增加节点,兼容性高,需要中间层,牺牲功能,目录,HBase,简介,HBase,体系结构,HBase,数据模型,HBase,提供的接口,HBase,优化,HBase,用途,HBase,体系结构,HBase,体系结构,Client,包含访问,HBase,的接口并维护,cache,来加快对,HBase,的访问,Zookeeper,保证任何时候,集群中只有一个,master,存贮所有,Region,的寻址入口。,实时监控,Region server,的上线和下线信息。并实时通知给,Master,存储,HBase,的,schema,和,table,元数据,Master,为,Region server,分配,region,负责,Region server,的负载均衡,发现失效的,Region server,并重新分配其上的,region,管理用户对,table,的增删改查操作,Region Server,Region server,维护,region,,处理对这些,region,的,IO,请求,Region server,负责切分在运行过程中变得过大的,region,-ROOT-,与,.META.,表,-ROOT-,表包含,.META.,表所在的区域列表,该表只会有一个,HRegion,;,Zookeeper,中记录了,-ROOT-,表的,location,.META.,表包含所有的用户空间区域列表,以及,RegionServer,的服务器地址;,Region,定位,16,.META.,表的一行在内存中大约占用,1KB,。并且每个,region,限制为,128MB,。,那么此三层结构可以保存的,region,数目为:,(128MB/1KB)*(128MB/1KB)=2(34),个,region,目录,HBase,简介,HBase,体系结构,HBase,数据模型,HBase,提供的接口,HBase,优化,HBase,用途,逻辑视图、物理视图,18,HBase,以表的形式存储数据。表由行和列组成。列划分为若干个列族,(row family),Row Key,Time Stamp,CF,contents:,CF,anchor:,CF,mime:,“,“,t9,“fashion.360buy,t8,“tuan.360buy,t6,.,text/html,t5,.,t3,.,Row Key,Time Stamp,Column“contents:,t6,.,t5,.,t3,.,逻辑视图,物理视图,Row Key,Time Stamp,Column anchor:,t9,anchor:,“fashion.360buy,t8,anchor:,“tuan.360buy,Row Key,Time Stamp,Column mime:,t6,text/html,HBase,每个列族存储为一个,Store,HBase,数据表中一些关键概念,Row key,键,Column Family,列族,Cell qualifier,列族修饰符(列),Timestamp,时间戳,Region,区域,键,Row key,表中行的键是字节数组,(,最大长度是,64KB),任何字符串都可以作为键;,表中的行根据行的键值进行排序,数据按照,Row key,的字节序,(byte order),排序存储;,字典序对,int,排序的结果是,1,10,100,11,12,13,14,15,16,17,18,19,2,20,21,9,91,92,93,94,95,96,97,98,99,。要保持整形的自然序,行键必须用,0,作左填充,所有对表的访问都要通过键,通过单个,row key,访问,通过,row key,的,range,全表扫描,列族,Column Family,HBase,表中的每个列都归属于某个列族,列族必须作为表模式,(schema),定义的一部分预先给出。如,create test,course,;,列名以列族作为前缀,每个“列族”都可以有多个列成员,(column),;如,course:math,course:english,新的列族成员可以随后按需、动态加入;,权限控制、存储以及调优都是在列族层面进行的;,同一列族成员最好有相同的访问模式和大小特征;,HBase,把同一列族里面的数据存储在同一目录下,由几个文件保存。,单元格修饰符,Cell qualifier,通过,列族,:,单元格修饰符,,可以具体到某个列;,可以把单元格修饰符认为是实际的列名;,在列族存在,客户端随时可以把列添加到列族;,HTable table=new HTable(conf,tableName);,Get get=new Get(rowKey.getBytes();,Result rs=table.get(get);,for(KeyValue kv:rs.raw(),System.out.print(new String(kv.getRow()+);,System.out.print(new String(kv.getFamily()+:);,System.out.print(new String(kv.getQualifier()+);,System.out.print(kv.getTimestamp()+);,System.out.println(new String(kv.getValue();,时间戳,Timestamp,在,HBase,每个,cell,存储单元对同一份数据有多个版本,根据唯一的时间戳来区分每个版本之间的差异,不同版本的数据按照时间倒序排序,最新的数据版本排在最前面。,时间戳的类型是,64,位整型。,时间戳可以由,HBase(,在数据写入时自动,),赋值,此时时间戳是精确到毫秒的当前系统时间。,时间戳也可以由客户显式赋值,如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳。,区域,Region,HBase,自动把表水平划分成多个区域,(region),,每个,region,会保存一个表里面某段连续的数据;,每个表一开始只有一个,region,,随着数据不断插入表,,region,不断增大,当增大到一个阀值的时候,,region,就会等分会两个新的,region,;,当,table,中的行不断增多,就会有越来越多的,region,。这样一张完整的表被保存在多个,Region,上。,Cell,单元格,由行和列的坐标交叉决定;,单元格是有版本的;,单元格的内容是未解析的字节数组;,由,row key,,,column(,=+,),,,version,唯一确定的单元。,cell,中的数据是没有类型的,全部是字节码形式存贮。,锁,HBase,的写操作是锁行的,每一行都是一个原子元素,无论对行进行访问的事务设计多少列,对行的更新都是原子的。都可以加锁。这使得加锁模型简单化。,HBase,中数据表的物理存储方式,物理存储,28,1,、,Table,中的所有行都按照,row key,的字典序排列。,2,、,Table,在行的方向上分割为多个,HRegion,。,物理存储,29,3,、,Region,按大小分割的,每个表一开始只有一个,region,,随着数据不断插入表,,region,不断
展开阅读全文