1、项目五 HBaseHBase数据库部署与应用任务1 HBase部署任务2 HBase Shell任务3 HBase编程任务4 MapReduce与HBase集成【任务概述】HBase是运行在Hadoop的分布式数据库,需要在Hadoop集群环境上部署,需要配置Zookeeper,最后还需要对部署的HBase环境进行检验测试。【支撑知识支撑知识】一、HBase简介二、HBase基本概念三、HBase系统架构【任务实施任务实施】一、Master节点安装软件二、Master节点设置HBase参数三、Master节点设置Zookeeper参数四、Slave节点和sw-desktop客户端安装软件五、Z
2、ookeeper服务六、验证HBase服务【支撑知识】一、HBase简介HBase(Hadoop Database)是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在普通机器上搭建起大规模结构化存储集群。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库,另一个不同的是HBase基于列的而不是基于行的模式。HBase是Google Bigtable的开源实现,类似Google Bigtable利用GFS作为其文件存储系统,HBase利用Hadoop HDFS作为其文件存储系统;Google运行MapReduce来处理Bigtable中的海量数据
3、,HBase同样利用Hadoop MapReduce来处理HBase中的海量数据;Google Bigtable利用Chubby作为协同服务,HBase利用Zookeeper作为对应。uHBase具有以下特点:(1)面向列:面向列(族)的存储和权限控制,列(族)独立检索。(2)大表:表可以非常大,一个表可以有上亿行、上百列。(3)稀疏:列族中的列可以动态增加,一般情况下,列比较多,一行数据只有少数的列有值,而对于空值,HBase并不存储。因此,表可以设计的非常稀疏。(4)非结构化:HBase不是关系型数据库,适合存储非结构化的数据。(5)数据多版本:每个单元中的数据可以有多个版本,默认情况下版
4、本号自动分配,是单元格插入时的时间戳。(6)数据类型单一:HBase中的数据都是字符串,没有其他类型。(7)数据操作简单:HBase只有很简单的插入、查询、删除、清空等操作,表和表之间是分离的,没有复杂的表和表之间的关系。(8)线性扩展:当存储空间不足时,可以通过简单地增加节点的方式进行扩展。二、HBase基本概念(1)HBase逻辑视图、行键(RowKey)、列族(CF,ColumnFamily)、时间戳(TimeStamp)、单元格(Cell)、区域(Region)(2)概念视图(3)物理视图(4)HBase物理存储三、HBase系统架构HBase Client使用HBase的远程过程调用
5、协议(RPC,Remote Procedure Call Protocol)机制与HMaster和HRegionServer进行通信,对于管理类操作,Client与HMaster进行RPC;对于数据读写类操作,Client与HRegionServer进行RPC。(1)Zookeeper QuorumZookeeper Quorum中除了存储了-ROOT-表的地址和HMaster的地址,HRegionServer也会把自己以Ephemeral方式注册到Zookeeper中,使得HMaster可以随时感知到各个HRegionServer的健康状态。此外,Zookeeper也避免了HMaster的单
6、点问题。HMaster没有单点问题,HBase中可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个Master运行,HMaster在功能上主要负责Table和Region的管理工作:、管理用户对Table的增、删、改、查操作;、管理HRegionServer的负载均衡,调整Region分布;、在Region Split后,负责新Region的分配;、在HRegionServer停机后,负责失效HRegionServer上的Regions迁移。(2)HRegionServerHRegionServer主要负责响应用户I/O请求,向HDFS文件系统中
7、读写数据,是HBase中最核心的模块。HRegionServer内部管理了一系列HRegion对象,每个HRegion对应了Table中的一个Region,HRegion中由多个HStore组成。每个HStore对应了Table中的一个Column Family的存储,可以看出每个Column Family其实就是一个集中的存储单元,因此最好将具备共同IO特性的column放在一个Column Family中,这样最高效。(3)HStoreHStore存储是HBase存储的核心,由两部分组成,一部分是MemStore,一部分是StoreFiles。MemStore是Sorted Memory
8、Buffer,用户写入的数据首先会放入MemStore,当MemStore满了以后会刷新成一个StoreFile(底层实现是HFile),当StoreFile文件数量增长到一定阈值,会触发Compact合并操作,将多个StoreFiles合并成一个StoreFile,合并过程中会进行版本合并和数据删除,因此可以看出HBase其实只有增加数据,所有的更新和删除操作都是在后续的compact过程中进行的,这使得用户的写操作只要进入内存中就可以立即返回,保证了HBase I/O的高性能。当StoreFiles Compact后,会逐步形成越来越大的StoreFile,当单个StoreFile大小超过
9、一定阈值后,会触发Split操作,同时把当前Region Split成2个Region,父Region会下线,新Split出的2个孩子Region会被HMaster分配到相应的HRegionServer上,使得原先1个Region的压力得以分流到2个Region上。(4)Catalog TableHBase内部保留名为-ROOT-和.META.的特殊目录表(Catalog Tble),如图5-6所示。他们维护着当前集群上所有区域的列表、状态和位置。-ROOT-表包含.META.表的区域列表。.META.包含所有用户空间区域(user-space region)的列表。表中的项使用区域名作为键。
10、区域名由所属的表名、区域的启始行、区域的创建时间以及对其整理进行的MD5哈希值(即对表名、起始行、创建时间戳进行哈希后的结果)组成。四、Zookeeper(1)Zookeeper简介ZooKeeper是一个分布式的、开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和HBase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。它包含一个简单的原语集,分布式应用程序可以基于它实现同步服
11、务,配置维护和命名服务等。(2)Zookeeper的工作原理Zookeeper的核心是原子广播,这个机制保证了各个Server之间的同步。实现这个机制的协议叫做Zab协议。Zab协议有两种模式,它们分别是恢复模式(选主)和广播模式(同步)。当服务启动或者在领导者崩溃后,Zab就进入了恢复模式,当领导者被选举出来,且大多数Server完成了和Leader的状态同步以后,恢复模式就结束了。状态同步保证了Leader和Server具有相同的系统状态。为了保证事务的顺序一致性,zookeeper采用了递增的事务id号(zxid)来标识事务。所有的提议(proposal)都在被提出的时候加上了zxid。
12、实现中zxid是一个64位的数字,它高32位是epoch用来标识leader关系是否改变,每次一个Leader被选出来,它都会有一个新的epoch,标识当前属于那个Leader的统治时期。低32位用于递增计数。每个Server在工作过程中有三种状态:、LOOKING:当前Server不知道leader是谁,正在搜寻;、LEADING:当前Server即为选举出来的leader;、FOLLOWING:leader已经选举出来,当前Server与之同。当Leader崩溃或者leader失去大多数的Follower,这时候zk进入恢复模式,恢复模式需要重新选举出一个新的leader,让所有的Serv
13、er都恢复到一个正确的状态。Zk的选举算法有两种:一种是基于basic paxos实现的,另外一种是基于fast paxos算法实现的。系统默认的选举算法为fast paxos。Zookeeper中的角色主要有以下3类Zookeeper中的角色主要有以下3类:(1)领导者(Leader):领导者负责进行投票的发起和决议,更新系统状态。(2)学习者(Learner)包括跟随者和观察者。跟随者(Follower):Follower用于接收客户请求并向客户端返回结果,在选择Leader中参与投票。观察者(Observer):Observer可以接收端连接,将写请求转发给Leader节点,但Obser
14、ver不参与投票过程,只同步Leader的状态。Observer的目的是为了扩展系统,提高读取速度。(3)客户端(Client):请求发起方。(3)Zookeeper在HBase中的作用、通过选举,保证任何时候,集群中只有一个master,Master与RegionServers启动时会向ZooKeeper注册;、存贮所有Region的寻址入口;、实时监控Region server的上线和下线信息,并实时通知给Master;、存储HBase的schema和table元数据;、默认情况下,HBase管理ZooKeeper实例,比如,启动或者停止ZooKeeper;、Zookeeper的引入使得M
15、aster不再是单点故障。【任务实施】n一、Master节点安装软件(1)下载HBase和Zookeeper软件包到/home/hadoop目录下,下载网址如下:http:/ tar xvzf/home/hadoop/hbase-1.2.4-bin.tar.gzhadoopmaster:/opt$sudo tar xvzf/home/hadoop/zookeeper-3.4.9.tar.gzhadoopmaster:/opt$sudo chown-R hadoop:hadoop hbase-1.2.4 zookeeper-3.4.9【任务实施】n二、Master节点设置HBase参数(1)修改
16、hbase-env.sh文件hadoopmaster:/opt$cd/opt/hbase-1.2.4/confhadoopmaster:/opt/hbase-1.2.4/conf$vi hbase-env.sh(2)修改hbase-site.xml文件hadoopmaster:/opt/hbase-1.2.4/conf$vi hbase-site.xml(3)修改regionservershadoopmaster:/opt/hbase-1.2.4/conf$vi regionservers【任务实施】n三、Master节点设置Zookeeper参数(1)修改zoo.cfghadoopmaste
17、r:/opt/zookeeper-3.4.9/conf$cd/opt/zookeeper-3.4.9/confhadoopmaster:/opt/zookeeper-3.4.9/conf$vi zoo.cfg(2)在dataDir指定的目录下创建myid文件,并添加相应内容。hadoopmaster:$mkdir/opt/zookeeper-3.4.9/datahadoopmaster:$echo 0 /opt/zookeeper-3.4.9/data/myid(3)拷贝zookeeper的配置文件zoo.cfg到Hbasehadoopmaster:$cp/opt/zookeeper-3.4.
18、9/conf/zoo.cfg/opt/hbase-1.2.4/conf/【任务实施】n四、Slave节点和sw-desktop客户端安装软件(1)以用户hadoop登录slave1节点安装软件hadoopslave1:$sudo scp-r hadoopmaster:/opt/hbase-1.2.4/opthadoopslave1:$sudo scp-r hadoopmaster:/opt/zookeeper-3.4.9/opthadoopslave1:$sudo chown-R hadoop:hadoop/opt/hbase-1.2.4/opt/zookeeper-3.4.9hadoopsl
19、ave1:$echo 1 /opt/zookeeper-3.4.9/data/myid(2)以用户hadoop登录slave2节点安装软件方法同上(略)(3)以用户hadoop登录sw-desktop客户机安装软件hadoopsw-desktop:$sudo scp-r hadoopmaster:/opt/hbase-1.2.4/opthadoopsw-desktop:$sudo scp-r hadoopmaster:/opt/zookeeper-3.4.9/opthadoopsw-desktop:$sudo chown-R hadoop:hadoop/opt/hbase-1.2.4/opt/
20、zookeeper-3.4.9【任务实施】n五、添加环境变量(1)各集群节点和客户端添加环境变量hadoop.:$vi/home/hadoop/.profile添加内容如下:export HBASE_HOME=/opt/hbase-1.2.4export ZOOKEEPER_HOME=/opt/zookeeper-3.4.9export PATH=$PATH:$HBASE_HOME/bin:$ZOOKEEPER_HOME/bin(2)各集群节点和客户端环境变量生效hadoop.:$source/home/hadoop/.profile【任务实施】n六、Zookeeper服务(1)启动Zooke
21、eper服务hadoopmaster:$zkServer.sh starthadoopslave1:$zkServer.sh starthadoopslave2:$zkServer.sh start(2)验证Zookeeper服务hadoopmaster:$zkServer.sh statushadoopslave1:$zkServer.sh statushadoopslave2:$zkServer.sh status【任务实施】n七、验证HBase服务1、启动HBase服务hadoopmaster:$start-hbase.sh2、查看进程master节点:hadoopmaster:$jps
22、3633 ResourceManager3191 NameNode3448 SecondaryNameNode4568 HMaster4761 HRegionServer4075 QuorumPeerMain5084 Jps3932 JobHistoryServer【任务实施】slave1节点:hadoopslave1:$jps4072 Jps3880 HRegionServer3592 QuorumPeerMain3417 NodeManager3258 DataNodeslave2节点:hadoopslave2:$jps3641 QuorumPeerMain3466 NodeManager
23、3308 DataNode3917 HRegionServer4095 Jps【任务实施】(3)打开浏览器输入“http:/master:16010”,查看HBase Master状态。(4)打开浏览器输入“http:/master:16030”,查看RegionServer状态。【任务概述】HBase Shell提供操作HBase分布数据库的命令,本任务需要创建一个score表,并按照表5-1HBase逻辑视图内容,使用HBase Shell命令完成表数据的添加、读取、过滤扫描和删除等操作。【支撑知识支撑知识】一、HBase命令二、HBase Shell命令三、HBase过滤器【任务实施任务
24、实施】一、表的管理二、数据操作【支撑知识】一、HBase命令语法:hbase 选项:-config DIR#配置目录,DIR默认为./conf-hosts HOSTS#在regionservers文件重写列表命令:通过使用-h或没有参数可以获得命令参数语法二、HBase Shell命令如果有kerberos认证,需要事先使用相应的keytab进行一下认证(使用kinit命令),认证成功之后再使用hbase shell进入。HBase Shell的基本命令(略,详见教材)(1)表的管理、查看表、创建表、删除表、查看表结构、修改表结构(2)权限管理、分配权限、查看权限、收回权限(3)表数据的增删改
25、查、添加数据、查询数据A.查询某行记录B.扫描表C.查询表中的数据行数(3)表数据的增删改查、删除数据A.删除行中的某个列值B.删除行C.删除表中的所有数据(4)Region管理、移动region、开启/关闭region、手动split、手动触发major compaction三、HBase过滤器lHBase过滤器(Filter)提供非常强大的特性来帮助用户提高其处理表中数据的效率。用户不仅可以使用HBase中预定义好的过滤器,而且可以实现自定义的过滤器。所有的过滤器都在服务器端生效,叫做谓词下推或谓语前推(predicate pushdown),它属于逻辑优化,优化器可以将谓词过滤下推到数据
26、源,从而使物理执行跳过无关数据,这样可以保证被过滤掉的数据不会被传送到客户端。用户可以在客户端代码实现过滤的功能,但会影响系统性能。lHBase为筛选数据提供了一组过滤器,通过这个过滤器可以在HBase中的数据的多个维度(行、列、数据版本)上进行对数据的筛选操作,也就是说过滤器最终能够筛选的数据能够细化到具体的一个存储单元格上(由行键、列名、时间戳定位)。HBase常用的过滤器有:(1)行过滤器(RowFilter)(2)列族过滤器(FamilyFilter)(3)列名过滤器(QualifierFilter)(4)值过滤器(ValueFilter)(5)前缀过滤器(PrefixFilter)(
27、6)列前缀过滤器(ColumnPrefixFilter)(7)行键过滤器(KeyOnlyFilter)(8)首次行键过滤器(FirstKeyOnlyFilter)(9)单列值过滤器(SingleColumnValueFilter)(10)单列排除过滤器(SingleColumnValueExcludeFilter)(11)包含结束过滤器(InclusiveStopFilter)(12)列计数过滤器(ColumnCountGetFilter)(13)全匹配过滤器(WhileMatchFilter)【任务实施】n一、表的管理(1)sw-desktop客户端启动Hbase Shellhadoopsw
28、-desktop:$hbase shellhbase(main):001:0(2)创建score表hbase(main):001:0 create score,name,class,course(3)查看表hbase(main):002:0 list(4)查看表结构hbase(main):003:0 describe score【任务实施】n二、数据操作(1)添加纪录hbase(main):004:0 put score,610213,name:,Tomhbase(main):005:0 put score,610213,class:class,163Cloudhbase(main):007:
29、0 put score,610213,course:python,79hbase(main):008:0 put score,610215,name,Johnhbase(main):009:0 put score,610215,class:class,173BigDatahbase(main):010:0 put score,610215,course:java,70hbase(main):011:0 put score,610215,course:java,80hbase(main):012:0 put score,610215,course:python,86【任务实施】(2)读表纪录hb
30、ase(main):013:0 get score,610215hbase(main):014:0 get score,610215,coursehbase(main):015:0 get score,610215,course:java(3)扫描纪录hbase(main):016:0 scan scorehbase(main):017:0 scan score,COLUMNS=coursehbase(main):018:0 scan score,COLUMN=course:java【任务实施】(4)FILTER过滤扫描纪录(操作详见教材)、扫描值是John的纪录、扫描值包含To的纪录、扫描列
31、class的值包含Clou的纪录、扫描Rowkey为610开头的纪录、只拿出key中的第一个column的第一个version并且只要key的纪录、扫描从610213开始到610215结束的纪录、扫描列族name中含有To的纪录、扫描列族course中成绩大等于85的纪录(5)删除纪录(操作详见教材)【任务实施】n三、表的修改删除(1)增加列族hbase(main):031:0 alter score,NAME=address(2)删除列族hbase(main):032:0 alter score,NAME=address,METHOD=delete(3)删除表hbase(main):033:
32、0 disable score0 row(s)in 2.3880 secondshbase(main):034:0 drop score0 row(s)in 2.3370 seconds【任务概述】编写HBase查询程序,使用Get查找610215的班级(class),使用Scan查找610213所有列;编写数据操作程序,完成HBase表的创建、数据的插入、查询等。【任务实施】一、查询程序二、数据操作程序【支撑知识】pHBase数据操作访问可以通过HTableInterface或HTableInterface的HTable类来完成,两者都支持HBase的主要操作,HBase提供几个Java A
33、PI接口,方便编程调用。1.HbaseConfiguration2.HBaseAdmin3.HTableDescriptor4.HColumnDescriptor5.HTable6.Put7.Get8.Result9.ResultScanner【任务实施】n一、查询程序(1)运行Eclipse,单击“File”“New”“Java Project”,创建SearchScore项目。(2)右击“SearchScore”,选择“Build Path”“Configure Build Path”,单击“Libraries”后,单击“Add External JARs”按钮,添加“$HBASE_HOM
34、E/lib”下所有jar包。(3)右击“SearchScore”“src”,选择“New”“Class”,新建SearchScore类(SearchScore.java的代码略,详见教材或资源包)。(4)单击“run”按钮,运行。【任务实施】n二、数据操作程序(1)运行Eclipse,单击“File”“New”“Java Project”,创建HBaseDemo项目后,再创建HBaseDemo类,导入HBase的jar包(HBaseDemo.java的代码略,详见教材或资源包)。(2)单击“run”按钮,运行结果如图所示。【任务概述】编写MapReduce程序,将运行的单词计数结果直接写入HB
35、ase表中;编写MapReduce程序,读取HBase的score表中数据,计算每位同学课程总分数。【任务实施】一、单词计数写入HBase表二、读取HBase的score表,计算课程总分数【支撑知识】MapReduce的执行过程如下:HDFS数据-InputFormat-Mapper-(Shuffle)-Reducer-OutputFormatl其中:RecordReader:完成HDFS数据拆分=Split、Split、SplitNInputFormat:RecordReader=Mapper:=Reducer:=OutputFormat:=RecordWriterRecordWriter:
36、结果=HDFS【任务实施】n一、单词计数写入HBase表(1)运行Eclipse,选择“Map/Reduce Project”,新建WordIntoTable项目,添加Hadoop和HBase的jar包,创建WordIntoTable类(WordIntoTable.java的代码略,详见教材或资源包)。(2)编辑数据hadoopsw-desktop:$vi sw1.txtHello WorldGood Hadoophadoopsw-desktop:$vi sw2.txtHello HadoopBye Hadoop【任务实施】(3)清空目录后再上传测试数据hadoopsw-desktop:$hd
37、fs dfs-rm-r-f/inputhadoopsw-desktop:$hdfs dfs-mkdir/inputhadoopsw-desktop:$hdfs dfs-put sw*.txt/input(4)创建HBase数据表hadoopsw-desktop:$hbase shellhbase(main):001:0 create test,wordcount(5)单击Eclipse运行按钮,选“Run on Hadoop”运行。(6)查看运行结果hbase(main):002:0 scan test【任务实施】n二、读取HBase的score表,计算课程总分数(1)运行Eclipse,选择
38、“Map/Reduce Project”,新建ScoreFromTable项目,添加Hadoop和HBase的jar包,创建ScoreFromTable类(ScoreFromTable.java代码略,详见教材或资源包)。(2)单击运行按钮,运行结果如图。【同步训练】p一、简答题(1)HBase的特点是什么?(2)HBase是如何存储数据的?(3)HRegionServer的主要功能是什么?(4)Zookeeper的作用是什么?p二、操作题(1)创建Employee表,向Employee表插入数据,基本如下表所示。【同步训练】p二、操作题(1)创建Employee表,向Employee表插入数据,如下表所示。(2)计算Employee表纪录的数量,查看Employee表的全部纪录。(3)查看Xie的City和Town。(4)查看含有GuangDong的纪录。(5)查看列族为Info和列Province的信息(6)修改Empleyee表,插入列族What,查看Employee表结构。【同步训练】p三、编程题(1)编写程序,查看Employee表中Jie的City和Town。(2)编写程序,完成Company表的创建、数据的插入和查询所有纪录。Company的信息如下表所示。