Presentation is loading. Please wait.

Presentation is loading. Please wait.

HBase分布式存储系统应用 HBase介绍.

Similar presentations


Presentation on theme: "HBase分布式存储系统应用 HBase介绍."— Presentation transcript:

1 HBase分布式存储系统应用 HBase介绍

2 1 2 3 4 课程目标 CONTENTS HBase介绍 HBase模型和系统架构 HBase数据读写流程 HBase环境搭建 ITEMS

3 5 6 7 8 课程目标 CONTENTS HBase Shell HBase程序开发 MapReduce On HBase
ITEMS 5 HBase程序开发 ITEMS 6 HBase高级特性 ITEMS 7 MapReduce On HBase ITEMS 8

4 HBase介绍 HBase是一种构建在HDFS之上的分布式、面向列的存储系统。在需要实时读写、随机访问 超大规模数据集时,可以使用HBase。Apache HBase是Google BigTable的开源实现, 就像BigTable利用了GFS所提供的分布式数据存储一样,HBase在Hadoop之上提供了类 似于BigTable的能力。

5 HBase介绍-面向行和面向列存储对比 表1-1 行存储数据排列(User表)
面向行存储的数据库 表1-1 行存储数据排列(User表) User表中的列是固定的,比如Schema定义了id,name,age,sex和jobs等属性,User的属性是不能动态增加的。这个表存储在电脑的内 存和存储中,虽然内存和硬盘在机制上不同,电脑的操作系统是以同样的方式存储的。数据库必须把这个二维表存储在一系列一维的“字节”中, 由操作系统写到内存或硬盘中。没有索引的查询使用大量I/O,建立索引和视图需要花费大量时间和资源,面向查询的需求,数据库必须被大 量膨胀才能满足性能要求。 id name age sex jobs 1 张三 35 教师 2 李丹 18 学生 3 John 26 IT工程师

6 HBase介绍-面向行和面向列存储对比 面向列存储的数据库
列式数据库的代表包括:HBase,Sybase IQ,Infobright、InfiniDB、GBase 8a,ParAccel,Sand/DNA Analytics和Vertica。列 式数据库把一列中的数据值串在一起存储起来,然后再存储下一列的数据 表1-2 列存储数据排列(User表) 两种存储的数据都是从上至下,从左向右的排列。行是列的组合,行存储以一行记录为单位,列存储以列数据集合单位,或称列族(Column Family)。 行存储的读写过程是一致的,都是从第一列开始,到最后一列结束。列存储的读取是列数据集中的一段或者全部数据,写入时,一行记录被拆分为多列, 每一列数据追加到对应列的末尾处。 id 1 2 3 name 张三 李丹 John age sex 35 18 26 jobs 教师 学生 IT工程师

7 HBase介绍-面向行和面向列存储对比 表1-3 行/列存储对比 行存储 列存储 优点 写入效率高,提供数据完整性保证。
读取过程有冗余,适合数据定长的大数据计算。 缺点 数据读取有冗余现象,影响计算速度。 缺乏数据完整性保证,写入效率低。 改进 优化的存储格式,保证能够在内存快速删除冗余数据。 多磁盘多线程并行写入/读(需要增加运行成本和修改软件)。 应用环境 商业领域,互联网。 互联网。

8 HBase介绍-使用场景 HBase作为常用的大数据存放工具,基本解决以下三大类的场景

9 HBase介绍-使用场景 平台类 数据通常是细水长流,累加到已有数据库以备将来使用,例如分析,处理和服务。许多HBase使用场景属于这个类别--使 用HBase作为数据存储,捕获来自于各种数据源的增量数据。比如目前流行的Kylin,阿里内部的日志同步工具TT,图组件Titan, 日志收集系统Flume等。此类存放的往往是平台的数据,有时候甚至是无业务含义的,作为平台的底层存储使用。 内容服务类 此类主要是面向各个业务系统。这里的用户不仅仅指人,也包括物,比如购物收藏夹,交易数据,聊天记录等等。这里使用 比较直接,就直接存放HBase,再读取。难度就是需要支持千万级别的并发写访问及读取,需要解决服务质量的问题。这种应用场 景通常业务简单,不需要关系型数据库中很多特性(例如交叉列、交叉表,事务,连接等等)。 信息展示类 通过HBase的高存储,高吞吐等特性,可以将人们感兴趣的信息快速展现出来。比如阿里巴巴的天猫双十一大屏, Facebook的短信系统。

10 HBase模型和系统架构 HBase相关概念 Table(表) Row(行) Column(列) Column Family(列族)
Column Qualifier(列标识符) Cell(单元格) Timestamp(时间戳) 1. Table(表) HBase会将数据组织进一张张的表里面,但需要注意的是表名必须是能用在文件路径里的合法名字,因为HBase的表是映射成HDFS上面的文件。一个HBase表由多行组成。 2. Row(行) 在表里面,每一行代表着一个数据对象,每一行都是以一个行键(Row Key)来进行唯一标识的。HBase中的行里面包含一个Key和一个或者多个包含值的列。行键并没有什么特定的数据类型,以二进制的字节来存储。Row Key只能有一个字段组成而不能由多个字段组合组成,HBase对所有行按照Row Key升续排序,在设计Row Key时将经常一起读取的行放到一起。因为这个原因,Row Key的设计就显得非常重要。数据的存储目标是相近的数据存储到一起,一种常用的行的Key的格式是网站域名。如果行的Key是域名,应该将域名进行反转(org.apache.www,org.apache.mail, org.apache.jira)再存储。这样的话,所有apache域名将会存储在一起,好过基于子域名的首字母分散在各处。 与NoSQL数据库一样,Row Key是用来检索记录的主键。访问HBase表中的行,只有三种方式:通过单个Row Key访问,通过Row Key的Range或全表扫描。Row Key可以是任意字符串(最大长度是64KB,实际应用中长度一般为10~100Bytes),在HBase内部,Row Key保存为字节数组。 注意:HBase中对Row Key采用了MD5加密处理,而Row Key是唯一索引,对索引加密之后如何做查询?实际使用中做索引的数值可能是有规律递增的,直接用这个做Row Key会使得新插入的大量数据很有可能被插入到同一个Region上,而其他Region空闲,这样读和写都产生了热点,影响读写效率。对Row Key使用MD5或者其他Hash做散列之后再和原来的Row Key组合作为实际的Row Key,这样在持续产生数据的时候Row Key会被散列到不同的Region上,有效避免热点问题,可见HBase使用MD5并不是为了加密。 3. Column(列) HBase中的列包含分隔开的列族和列的限定符。 4. Column Family(列族) 列族包含一个或者多个相关列,列族是表的Schema的一部分,必须在使用表之前定义。HBase表中的每个列都归属于某个列族,列都以列族作为前缀,如anchor:name,anchor:tel都属于anchor这个列族。每一个列族拥有一系列的存储属性,例如值是否缓存在内存中,数据是否要压缩或者他的行Key是否要加密等等。表格中的每一行拥有相同的列族,尽管一个给定的行可能没有存储任何数据在一个给定的列族中。 每个列族中可以存放很多列,而每列族中的列数量可以不同,每行都可以动态的增加和减少列。列是不需要静态定义的,HBase对列数没有限制,可以达到上百万个,但是列族的个数有限制,通常有几个。在具体实现上,一张表的不同列族是分开独立存放的。HBase的访问控制、磁盘和内存的使用统计等都是在列族层面进行的。 5. Column Qualifier(列标识符) 列的标识符是列族中数据的索引。例如给定了一个列族content,那么标识符可能是content:html,也可以是content:pdf。列族在创建表格时是确定的了,但是列的标识符是动态地并且行与行之间的差别也可能是非常大。列族中的数据通过列标识来进行映射,其实这里大家可以不用拘泥于“列”这个概念,也可以理解为一个键值对,Column Qualifier就是Key。列标识也没有特定的数据类型,以二进制字节来存储。 在定义HBase表的时候需要提前设置好列族,表中所有的列都需要组织在列族里面,列族一旦确定后,就不能轻易修改,因为它会影响到HBase真实的物理存储结构,但是列族中的列标识以及其对应的值可以动态增删。表中的每一行都有相同的列族,但是不需要每一行的列族里都有一致的列标识和值,所以说是一种稀疏的表结构,这样可以一定程度上避免数据的冗余。例如:{row1, userInfo: telephone -> 137XXXXX010},{row2, userInfo: address -> Beijing}行1和行2都有同一个列族userInfo,但是行1中的列族只有列标识--电话号码,而行2中的列族中只有列标识--地址。 6. Cell(单元格) 单元格是由行、列族、列标识符、值和代表值版本的时间戳组成的。每个Cell都保存着同一份数据的多个版本(默认是三个),并按照时间倒序排序,即最新的数据排在最前面。单元数据也没有特定的数据类型,以二进制字节来存储。 7. Timestamp(时间戳) 时间戳是写在值旁边的一个用于区分值的版本的数据。默认情况下,每一个单元中的数据插入时都会用时间戳来进行版本标识。读取单元数据时,如果时间戳没有被指定,则默认返回最新的数据,写入新的单元数据时,如果没有设置时间戳,默认使用当前时间。每一个列族的单元数据的版本数量都被HBase单独维护,默认情况下HBase保留三个版本数据。

11 info:address="BeiJing"
HBase模型和系统架构 HBase逻辑模型 HBase是一个类似BigTable的分布式数据库,它是一个稀疏的长期存储的(存储在硬盘 上)、多维度的、排序的映射表,这张表的索引是行关键字、列关键字和时间戳,HBase中的 数据都是字符串,没有类型。 表2-1 HBase的逻辑模型 行健 时间戳 列族anchor 列族info "database.software.www" t4 anchor:tel=" " info:PC="100000" t3 anchor:name="James" t2 info:address="BeiJing" t1 anchor:name="John" "c.software.www"

12 HBase模型和系统架构 HBase物理模型 虽然从逻辑模型来看每个表格是由很多行组成的,但是在物理存储上面,它是按照列来保存的
需要注意的是,在逻辑模型上面有些列是空白的,这样的列实际上并不会被存储,当请求这些空白的单元格时,会返回null值。如果在 查询的时候不提供时间戳,那么会返回距离现在最近的那一个版本的数据,因为在存储的时候,数据会按照时间戳来排序 表2-2 HBase的物理模型 行健 时间戳 单元格(值) "database.software.www" t1 anchor:name John t2 info:address BeiJing t3 James t4 anchor:tel info:PC 100000 "c.software.www"

13 HBase模型和系统架构 HBase的特点 容量巨大 面向列 稀疏性 数据多版本 可扩展性 高可靠性 高性能 数据类型单一

14 HBase模型和系统架构 HBase系统架构容量巨大
HBase同样是主从分布式架构,它隶属于Hadoop生态系统,由以下组件组成:Client, ZooKeeper,HMaster,HRegionServer和HRegion;在底层,它将数据存储于HDFS中

15 HBase数据读写流程 HRegionServer详解
HRegionServer一般和DataNode在同一台机器上运行,实现数据的本地性。 HRegionServer架构如图所示,HRegionServer包含多个HRegion,由WAL, BlockCache,MemStore和HFile组成。

16 HBase数据读写流程 HRegion 在HBase中,一个表的表行的多少决定了HRegion的大小,表的列族个数又决定了 Store的多少,一个Store对应一个MemStore和多个StoreFile,StoreFile则对应一个 HFile。

17 HBase数据读写流程 HMaster上线 HMaster启动进行以下步骤:
(1)从ZooKeeper上获取唯一一个代表HMaster的锁,用来阻止其它HMaster成为Master。 (2)扫描ZooKeeper上的Server目录,获得当前可用的HRegionServer列表。 (3)和2中的每个HRegionServer通信,获得当前已分配的HRegion和HRegionServer的对应关系。 (4)扫描.META. Region的集合,计算得到当前还未分配的HRegion,将他们放入待分配HRegion列表。

18 HBase数据读写流程 数据读流程 具体数据访问流程如下:
(1)Client会通过内部缓存的相关-ROOT-中的信息和.META.中的信息直接连接与请求数据匹配的HRegionServer(0.98.8版本是在系统表.META.中)。 (2)直接定位到该服务器上与客户请求对应的HRegion,客户请求首先会查询该HRegion在内存中的缓存--MemStore(MemStore是一个按Key排序的树形结构的缓冲区)。 如果在MemStore中查到结果则直接将结果返回给Client;如果在MemStore中没有查到匹配的数据,接下来会读已持久化到StoreFile文件(HFile)中的数据。StoreFile也是按Key排序的树形结构的文件,并且是特别为范围查询或Block查询优化过的;另外HBase读取磁盘文件是按其基本I/O单元(即HBase Block)读数据的。 (3)如果在BlockCache中能查到要找的数据则直接返回结果,否则就读去相应的StoreFile文件中读取一个Block的数据,如果还没有读到要查的数据,就将该数据Block放到HRegion Server的BlockCache中,然后接着读下一个Block块的数据,一直循环到找到要请求的数据并返回结果。如果该HRegion中的数据都没有查到要找的数据,最后接直接返回null,表示没有找到匹配的数据。当然BlockCache会在其大于一阀值(heapsize hfile.block.cache.size 0.85)后启动基于LRU算法的淘汰机制,将最老最不常用的Block删除。

19 HBase数据读写流程 数据写流程 当客户端发起Put等请求时,HBase会执行数据写流程。 (1)客户端首先访问ZooKeeper查找-ROOT-表,然后获取.META.表信息。-ROOT-表永远只会占用一个HRegion,但.META. 表可能会比较大,占用多个HRegion,所以要通过-ROOT-查找.META.表。 (2).META.表记录了每个HRegionServer包含HRegion的Row Key范围,根据Row Key找到对应的HRegionServer地址, HRegionServer会将请求匹配到某个具体的HRegion上面。 (3)HRegion首先把数据写入WAL。所有写操作都会先将数据写入这个Log文件后,才会真正更新MemStore。一旦集群崩溃, 通过重放Log,系统可以恢复到崩溃之前的状态,不会丢失数据。 (4)WAL写入成功后,把数据写入缓存MemStore,写完后检查所有MemStore大小的总和是否达到Flush阀值,如果达到, HRegionServer处理Flush请求,将数据写入StoreFile并以HFile的形式存到HDFS上。

20 HBase数据读写流程 删除数据流程 HBase删除操作不会立即删除HFile,会先将数据打一个删除标签,当开启一个大的合 并,才会将打标记的数据删除,这个大合并消耗比较大的性能,只有在晚上或者资源使用 少时才使用。 由于所有的存储文件都是不可变的,从这些文件中删除一个特定的值是做不到的,通过 重写存储文件将已经被删除的单元格移除也是毫无意义的,墓碑标记就是用于此类情况的, 它标记着“已删除”信息,这个标记可以是单独一个单元格、多个单元格或一整行。

21 HBase环境搭建 ZooKeeper的安装 解压 修改配置文件 修改三个节点的环境变量 测试 1. 解压
将下载好的ZooKeeper文件上传到Hadoop集群中的master节点,使用命令"tar -zxvf zookeeper tar.gz -C /hadoop/"将其解压。 2. 修改配置文件 (1)创建文件夹 mkdir /hadoop/zookeeper-3.4.5/data /hadoop/zookeeper-3.4.5/log (2)修改zoo.cfg 进入zookeeper的conf目录修改zoo.cfg。 cp zoo_sample.cfg zoo.cfg 修改zoo.cfg的内容为: dataDir=/hadoop/zookeeper-3.4.5/data dataLogDir=/hadoop/zookeeper-3.4.5/log server.0= :2888:3888 server.1= :2888:3888 server.2= :2888:3888 除了dataDir的内容为修改外,其他配置信息均为新增。 (3)创建myid文件 在/hadoop/zookeeper-3.4.5/data文件夹下创建myid文件,将其值修改为0。需要注意的是,zoo.cfg中server.后面的数值必须和“=”后面IP中的myid值保持一致,即IP为 的节点中myid的值必须为1,IP为 的节点中myid的值必须为2。 (4)分发到slave1和slave2节点 scp -r /hadoop/zookeeper-3.4.5/ slave1:/hadoop/ scp -r /hadoop/zookeeper-3.4.5/ slave2:/hadoop/ 同时按照第三步要求修改myid文件对应的值。 2. 修改三个节点的环境变量 在/etc/profile文件末尾添加export PATH=$PATH:/hadoop/zookeeper-3.4.5/bin,并执行命令"source /etc/profile"使配置的环境变量生效。 3. 测试 在三个节点上分别运行命令"zkServer.sh start",启动后可以通过命令"zkServer.sh status"查看ZooKeeper的运行状态,其中只能有一个节点充当leader,其余所有节点均为follower。ZooKeeper的进程名叫QuorumPeerMain,

22 HBase数据读写流程 HBase的安装 解压 修改HBase的配置文件 修改三个节点的环境变量 测试 1. 解压
将下载好的HBase文件上传到Hadoop集群中的master节点,使用命令"tar -zxvf hbase bin.tar.gz -C /hadoop/"将其解压。 2. 修改HBase的配置文件 (1)修改hbase-env.sh文件 新增四项配置 export HBASE_CLASSPATH=/hadoop/hadoop-2.6.5/etc/hadoop export HBASE_PID_DIR=/var/hadoop/pids export JAVA_HOME=/Java/jdk1.8.0_144/ export HBASE_MANAGES_ZK=false 其中HBASE_CLASSPATH是Hadoop的配置文件路径,配置HBASE_PID_DIR时先创建目录/var/hadoop/pids。 一个分布式运行的HBase依赖一个Zookeeper集群,所有的节点和客户端都必须能够访问Zookeeper。默认的情况下HBase会管理一个Zookeep集群,即HBase默认自带一个Zookeep集群,这个集群会随着HBase的启动而启动。而在实际的商业项目中通常自己管理一个Zookeeper集群更便于优化配置提高集群工作效率,但需要配置HBase。需要修改conf/hbase-env.sh里面的HBASE_MANAGES_ZK来切换,这个值默认是true,作用是让HBase启动的时候同时也启动Zookeeper。在安装过程中,采用独立运行Zookeeper集群的方式,故将其属性值改为false。 (2)修改regionservers文件 regionservers文件负责配置HBase集群中哪台节点做RegionServer服务器,本书的规划是所有slave节点均可当RegionServer服务器,故其配置内容为: slave1 slave2 (3)修改hbase-site.xml文件 hbase-site.xml文件内容修改为: <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>hbase.rootdir</name> <value>hdfs:// :9000/hbase</value> </property> <name>hbase.master</name> <value>hdfs:// :60000</value> <name>hbase.zookeeper.property.dataDir</name> <value>/hadoop/zookeeper-3.4.5/data</value> <name>hbase.cluster.distributed</name> <value>true</value> <name>hbase.zookeeper.quorum</name> <value>master,slave1,slave2</value> <name>hbase.zookeeper.property.clientPort</name> <value>2181</value> <name>hbase.master.info.port</name> <value>60010</value> </configuration> 注意:hbase.zookeeper.quorum用来设置HBase集群中哪些节点安装了ZooKeeper,只能设置为主机名而不是IP地址。HBase1.0 以后的版本,需要手动配置Web访问端口号60010。 (4)分发到slave1和slave2节点 scp -r /hadoop/hbase-1.3.1/ slave1:/hadoop/ scp -r /hadoop/hbase-1.3.1/ slave2:/hadoop/ 3. 修改三个节点的环境变量 在/etc/profile文件末尾添加export PATH=$PATH:/hadoop/zookeeper-3.4.5/bin: /hadoophbase bin.tar.gz/bin,并执行命令"source /etc/profile"使配置的环境变量生效。 4. 测试 在master节点运行start-hbase.sh,将HBase集群启动,可以通过jps或查看运行状况。master节点存在HMaster进程,

23 HBase Shell 在实际应用中,需要经常通过Shell命令操作HBase数据库。HBase Shell是HBase的命令行工具;通过 HBase Shell,用户不仅可以方便地创建、删除及修改表,还可以向表中添加数据、列出表中的相关信息等

24 HBase Shell 在实际应用中,需要经常通过Shell命令操作HBase数据库。HBase Shell是HBase的命令行工具;通过 HBase Shell,用户不仅可以方便地创建、删除及修改表,还可以向表中添加数据、列出表中的相关信息等

25 HBase Shell HBase Shell启动
在任意一个HBase节点运行命令:hbase shell,即可进入HBase的Shell命令行模式, HBase Shell基本命令 操作 命令表达式 说明 创建表 create 'table_name, 'family1','family2','familyN' 创建表和列族。 添加记录 put 'table_name', 'rowkey', 'family:column', 'value' 向列插入一条数据。 查看记录 get 'table_name', 'rowkey' 查询单条记录,也是HBase最常用的命令。 查看表中的记录总数 count 'table_name' 这个命令并不快,且目前没有找到更快的方式统计行数。 删除记录 delete 'table_name' ,'rowkey','family_name:column'deleteall 'table_name','rowkey' 第一种方式删除一条记录单列的数据;第二种方式删除整条记录。 删除一张表 1. disable 'table_name' 先停用,再删除表。 2. drop 'table_name' 查看所有记录 scan "table_name" ,{LIMIT=>10} LIMIT=>10表示只返回10条记录,否则将全部显示。

26 HBase Shell 表的管理 list命令 查看HBase中有哪些表 create命令 创建表 describe命令 查看表结构
disable命令 删除表 exists 查看一个表是否存在 is_enabled 判断表是否enable is_disabled 判断表是否disable alter命令 修改表结构 whoami 查看当前访问HBase的用户 version 查看当前HBase的版本信息

27 HBase Shell 表数据的增删改查 put命令 向表中插入数据。语法格式:put <table>, <rowKey>, <family:column>, <value>, <timestamp> get命令 查询数据。语法格式:get <table>,<rowKey>,[<family:column>,....] can命令 扫描表。语法格式:scan <table>, {COLUMNS => [ <family:column>,.... ], LIMIT => num} delete命令 删除数据。语法格式:delete <table>, <rowKey>, <family:column> , <timestamp> deleteall命令 删除行。语法格式:deleteall <table>, <rowKey>, <family:column> , <timestamp> count 查询表中总共有多少行数据。语法格式:count <table> truncate 清空表。语法格式:truncate <table>

28 HBase Shell HBase数据迁移的importsv的使用
HBase数据来源于日志文件或者RDBMS,把数据迁移到HBase表中。常见的有三种方法:使用HBase Put API;使用HBase批量加载工具;自定义MapReduce实现。 importtsv是HBase官方提供的基于MapReduce的批量数据导入工具,同时也是HBase提供的一个命 令行工具,可以将存储在HDFS上的自定义分隔符(默认是\t)的数据文件,通过一条命令方便的导入到 HBase中

29 HBase程序开发 HBase提供了丰富的Java API接口供用户使用,可以通过HBase Java API完成和 HBase Shell相同的功能

30 HBase程序开发 表的相关操作 HBase Java API核心类主要有HBaseConfiguration,HBaseAdmin,HTable和数据操作类组成 HBase Java类 HBase数据模型 HBaseAdmin 数据库(DataBase) HBaseConfiguration HTable 表(Table) HTableDescriptor 列族(Column Family) Put 列标识符(Column Qualifier) Get Scanner

31 HBase程序开发 开发环境配置 导入开发所需要的jar包
修改C:\Windows\System32\drivers\etc下的host文件 设置配置信息

32 HBase程序开发 创建表 import java.io.IOException;
import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.HColumnDescriptor; import org.apache.hadoop.hbase.HTableDescriptor; import org.apache.hadoop.hbase.MasterNotRunningException; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.ZooKeeperConnectionException; import org.apache.hadoop.hbase.client.HBaseAdmin; public class CreateTableDemo { static Configuration conf = null; static{ conf = HBaseConfiguration.create(); conf.set("hbase.rootdir", " hdfs:// :9000/hbase "); conf.set("hbase.master", "hdfs:// :60000"); conf.set("hbase.zookeeper.property.clientPort", "2181"); conf.set("hbase.zookeeper.quorum", "master,slave1,slave2"); } public static int createTable(String tableName, String[] family) throws MasterNotRunningException, ZooKeeperConnectionException, IOException{ HBaseAdmin admin = new HBaseAdmin(conf); HTableDescriptor table = new HTableDescriptor(TableName.valueOf(tableName)); // HTableDescriptor table = new HTableDescriptor(tableName); //HColumnDescriptor列的相关信息 for(String str : family){ HColumnDescriptor cloumn = new HColumnDescriptor(str); // cloumn.setMaxVersions(3); table.addFamily(cloumn); if(admin.tableExists(tableName)){ System.out.println(tableName + "已经存在"); return -1; admin.createTable(table); admin.close(); System.out.println("create success"); return 1; public static void main(String[] args) throws MasterNotRunningException, ZooKeeperConnectionException, IOException { createTable("stu", new String[]{"info", "grade"});

33 HBase程序开发 数据插入 数据查询 数据删除 Scan查询 Filter 行数统计 NameSpace开发 计数器 协处理器

34 HBase高级特性 HBase是一个庞大的体系,涉及到很多方面,很多因素都会影响到系统性能和系统资源使 用率,根据场景对这些配置进行优化会很大程度上提升系统的性能。总结至少有如下几个 方面:HBase表设计,列族设计优化,读写优化和客户端优化等

35 HBase高级特性 HBase表设计 预先分区 Row Key 列族设计

36 HBase高级特性 列族设计优化 用户平均读取数据的大小 数据平均键值对规模

37 HBase程序开发 写性能优化策略 HBase写数据流程:数据先顺序写入WAL,再写入对应的缓存MemStore,当MemStore中数据大小达到 一定阈值(128M)之后,系统会异步将MemStore中数据Flush到HDFS形成小文件。 HBase数据写入通常会遇到两类问题,一类是写性能较差,另一类是数据根本写不进去,这两类问题的 切入点也不尽相同 是否需要写WAL,WAL是否需要同步写入 Put是否可以同步批量提交 Put是否可以异步批量提交 Region是否太少 写入请求是否不均衡 写入KeyValue数据是否太大

38 HBase程序开发 读性能优化策略 读性能优化主要分为四个方面:客户端优化、服务器端优化以及HDFS相关优化
HBase客户端优化: 1)Scan缓存是否设置合理 2)Get请求是否可以使用批量请求 3)请求是否 可以显式指定列族或者列 4)离线批量读取请求是否设置禁止缓存 HBase服务器端优化:1)读请求是否均衡 2)BlockCache是否设置合理 3)HFile文件是否太多 4) Compaction是否消耗系统资源过多 HDFS相关优化: 1)Short-Circuit Local Read功能是否开启 2)Hedged Read功能是否开启 3)数据本地率是否太低

39 HBase程序开发 HBase集群规划 集群业务规划:1)硬盘容量敏感型业务 2)带宽敏感型业务 3) I/O敏感型业务 集群容量规划
Region规划:1)Region个数规划 2)单Region大小规划 内存规划:1)写多读少型 + LRUBlockCache 2)读多写少型 + BucketCache

40 MapReduce On HBase HBase本身并没有提供很好的二级索引方式,如果直接使用HBase提供的Scan扫描方式, 在数据量很大的情况下就会非常慢,常用方法是使用MapReduce操作HBase数据库。 MapReduce提供了相关API接口,可以与HBase无缝连接

41 MapReduce On HBase HBase集成了MapReduce框架,对表中大量的数据进行并行处理,HBase为MapReduce 每个阶段提供了相应的类用来处理表数据。HBase与Hadoop的API对比如表:

42 MapReduce On HBase 编程实例 使用MapReduce操作HBase 从HBase获取数据上传至HDFS
MapReduce生成HFile入库到HBase 同时写入多张表 从多个表读取数据 通过读取HBase表删除HBase数据 通过读取HBase表数据复制到另外一张表 建立HBase表索引 将MapReduce输出结果到MySQL 利用MapReduce完成MySQL数据读写

43


Download ppt "HBase分布式存储系统应用 HBase介绍."

Similar presentations


Ads by Google