基于Hadoop生态系统的大数据解决方案TP04_第1页
基于Hadoop生态系统的大数据解决方案TP04_第2页
基于Hadoop生态系统的大数据解决方案TP04_第3页
基于Hadoop生态系统的大数据解决方案TP04_第4页
基于Hadoop生态系统的大数据解决方案TP04_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第四章HBase数据库预习检查什么是NoSQL数据库?画出HBase的概念视图和物理视图HBaseShell有哪些常用操作?HBaseJavaAPI核心类是什么?集中测试2/48回顾与作业点评MapReduce的作用是什么?MapReduce程序通常包括哪三个部分?简述MapReduce的数据流如何运行MapReduce程序?简述YARN对MapReduceV1主要改进的地方点评作业的提交情况和共性问题回顾作业点评3/48本章任务安装HBase使用HBase存储数据4/48本章目标了解HBase体系结构理解HBase数据模型掌握HBase的安装会使用HBaseShell操纵HBase会使用HBaseJavaAPI操纵HBase5/48HBase简介为什么学习HBase?需要实时随机访问超大规模数据集的场景针对分布式计算而设计的NoSQL与Hadoop紧密结合特点基于Google的BigTable论文的理论基础基于列存储的NoSQL数据库基于HDFS的分布式存储本质上只有插入操作高可靠性、可扩展性6/48HBase体系结构Master/Slaves的主从服务器结构HMaster服务器+多个HRegionServer服务器告诉每个HRegionServer需要维护哪些HRegion维护HRegion,响应用户I/O请求,读写HDFS中数据对表的划分,保存表中一段连续的数据,其中每个Store保存一个列族监控各个机器的状态,协调各服务器运行7/48HBase数据模型3-1典型的关系表scores存在哪些问题?如果现在新加一门课程,能够在不修改表结构的情况下去保存新的课程成绩吗?如果某同学数学课程参加了补考,那么两次的考试成绩都能够保存下来吗?如果某同学只考试了一门课程而其它课程都没有成绩,是否我们可以只保存有成绩的课程而节省存储空间呢?问题namegrademathartjason25787tom189808/48HBase数据模型3-2scores表在HBase中的概念视图基本术语表:不存储NULL值的稀疏表行键:行的主键,标识一行数据列族:表的数据列,在创建表时必须被定义列键:唯一标识列族中的一个成员,格式为<family>:<qualifier>其中qualifier可取空值存储单元格:存储列键值的单元时间戳:插入单元格时的时间,默认作为单元格的版本号行键(name)时间戳列族(grade)列族(course)列健值列健值jasont6course:math57t5course:art87t4grade:2tomt3course:math89t2course:art80t1grade:19/48HBase数据模型3-3scores表在HBase中的物理视图存储列族:grade存储列族:course行键(name)时间戳列族(grade)列健值jasont4grade:2tomt1grade:1行键(name)时间戳列族(course)列健值jasont6course:math57t5course:art87tomt3course:math89t2course:art80忽略NULL值,并按列存储忽略NULL值,并按列存储10/48比较HBase与关系型数据库数据类型HBase只有字符串类型数据操作HBase没有修改操作,表和表之间相互分离存储模式HBase基于列存储,关系型数据库基于行存储数据维护HBase的更新实际是插入新的数据可伸缩性HBase很容易靠增加硬件满足系统需要11/48安装HBase3-1HBase目录bin:包含了所有可执行命令与脚本。conf:配置文件目录。hbase-webapps:存储Web应用的目录lib:jar文件目录,包括第三方依赖与Hadoop相关jar文件logs:日志目录运行模式单机伪分布式完全分布式12/48安装HBase3-2单机运行模式:配置hbase-site.xml伪分布式:配置hbase-site.xml<configuration> <property> <name>hbase.rootdir</name> <value>file:///home/hduser/hbase</value> </property></configuration><configuration> <property> <name>hbase.rootdir</name> <value>hdfs://node1:9000/hbase</value> </property></configuration>使用了分布式文件系统HDFS使用本地文件系统13/48安装HBase3-3完全分布式运行模式角色分配配置步骤同步各节点机的时钟配置hbase-site.xml配置hbase-env.sh配置regionservers将HBase复制到其它节点上主机名

IP地址所分配的角色node1192.168.70.130Master,NameNode,JobTracker,HMasternode2192.168.70.131Slave,DataNode,TaskTracker,HRegionServernode3192.168.70.132Slave,DataNode,TaskTracker,HRegionServer演示HBase完全分布式安装14/48学员操作——安装HBase需求说明安装HBase,要求在完全分布式模式下运行实现思路选择node1节点作为HMaster服务器,下载并解压HBase安装包到此节点上修改三个配置文件:hbase-site.xml、hbase-env.sh、regionservers使用“scp”命令将node1的HBase安装目录复制到其它节点在node1上启动HBase,进入HBaseShell查看运行状态提示完成时间:15分钟可以使用“jps”验证各节点必要进程是否正常启动。如未正常启动,应查看各节点HBase中“logs”目录下的文件,找出具体失败原因后尝试重新启动!练习15/48常见问题及解决办法代码规范问题调试技巧共性问题集中讲解共性问题集中讲解16/48操纵HBase的两种方式HBaseShellHBaseJavaAPI(数据存储管理部分)17/48HBaseShell9-1常用命令列表命令说明命令说明alter修改表的列族get获取行或单元的值count统计表中行的数量incr增加指定表、行或列的值create创建表list列出HBase中存在的所有表describe显示表的详细信息put向指定的表单元添加值delete删除指定对象的值tools列出HBase所支持的工具deleteall删除指定行的所有元素值scan通过对表的扫描来获取对应的值disable使表无效status返回HBase集群的状态信息drop删除表shutdown关闭HBase集群enable使表有效truncate重新创建指定表exists测试表是否存在version返回HBase版本信息exit退出HBaseShell18/48HBaseShell9-2创建表:create查看所有表:list语法create'表名称','列名称1','列名称2',…,'列名称N'示例create'scores','grade','course'演示命令:create、list19/48HBaseShell9-3查看指定表的列族详细信息:describe列族参数NAME:列族名称VERSIONS:最大版本数量MIN_VERSIONS:最小版本数量BLOCKSIZE:数据块大小……语法describe'表名'示例describe'scores'演示命令:describecreate'scores',{NAME=>'grade',VERSIONS=>5},{NAME=>'course',VERSIONS=>5}根据列族参数创建表的完整语法格式创建表时必须指定,因为其它参数均有默认值20/48HBaseShell9-4添加数据:put语法put'表名称','行键','列键','值'示例put'scores','tom','grade:','1'put'scores','tom','course:art','80'put'scores','tom','course:math','89'put'scores','jason','grade:','2'put'scores','jason','course:art','87'put'scores','jason','course:math','57'演示命令:put向scores表的行“tom”插入“grade:=1”,其中列族为“grade”,列修饰符为空向scores表的行“tom”插入“course:art=80”,其中列族为“course”,列修饰符为“art”21/48扫描表:scan语法scan'表名称',{COLUMNS=>['列族名1','列族名2',……],参数名=>参数值…}示例scan'scores'scan'scores',{COLUMNS=>'course'}语法scan'表名称',{COLUMN=>['列键1','列键2',……],参数名=>参数值…}示例scan'scores',{COLUMN=>'course:math',LIMIT=>1}指定列族指定列键演示命令:scan常用参数:TIMERANGELIMITSTARTROWSTOPROWTIMESTAMPVERSIONSHBaseShell9-522/48HBaseShell9-6获取数据:get获取行的所有单元或者某个指定的单元语法get'表名称','行键',{COLUMNS=>['列族名1','列族名2'…],参数名=>参数值…}get'表名称','行键',{COLUMN=>['列键1','列键2'…],参数名=>参数值…}示例get'scores','jason'get'scores','jason',{COLUMNS=>'course'}get'scores','jason',{COLUMN=>'course:math'}技巧get'scores','jason',{COLUMN=>['course:math','grade:']}get'scores','jason','course:math','grade:'演示命令:get查询jason的数学成绩和所在年级等价同scan的参数都必须指定表名和行键23/48HBaseShell9-7删除数据delete:删除一个单元deleteall:删除一行语法delete'表名称','行键','列键'deleteall'表名称','行键'示例delete'scores','jason','course:art'deleteall'scores','jason'演示命令:delete24/48HBaseShell9-8修改表:alter增加或修改表的列族,列族名存在则修改否则增加语法alter'表名称',参数名=>参数值,...alter'表名称',{参数名=>参数值,...},{参数名=>参数值,...}…示例alter'scores',NAME=>'course',VERSIONS=>'5'alter'scores',{NAME=>'grade',VERSIONS=>'5'},{NAME=>'course',VERSIONS=>'5'}列族的参数,其中必须提供NAME演示命令:alter25/48HBaseShell9-9删除表:drop删除前使用disable将表置为不可用示例disable'scores'drop'scores'演示命令:drop语法disable'表名'drop'表名'提示将表置为可用状态:enable'表名'!26/48小结HBaseShell操纵数据库表管理建表:create删表:drop、disable改表:alter查询:list、describe表数据管理增:put删:delete、deleteall改:put的同时保留历史版本查:scan、get27/48学员操作——创建music表需求说明使用create命令创建如下音乐播放记录表使用list命令查看数据库所有表使用describe命令查看表结构使用put命令增加数据使用scan、get命令查询表完成时间:30分钟练习行键时间戳列族(info)列健值1_song1_2016-1-1112:03:01t5info:namesong1t4info:singersinger1t3info:gendermant2info:rythmeslowt1info:terminalpc……music表的概念视图28/48常见问题及解决办法代码规范问题调试技巧共性问题集中讲解共性问题集中讲解29/48操纵HBase的两种方式HBaseShellHBaseJavaAPI(数据存储管理部分)30/48HBase数据存储管理API10-1开发第一个HBase应用在Eclipse中创建普通Java项目添加jar文件到构建路径添加hbase-site.xmlhbase.zookeeper.quorum编写代码创建连接操作:列出所有表关闭连接演示示例1:第一个HBase应用31/48HBase数据存储管理API10-2HBaseJavaAPI与HBase数据模型对应关系

HBaseJavaAPIHBase数据模型HBaseConfiguration数据库(HBase数据库)ConnectionAdminHTableDescriptor表(Table)TableNameTableHColumnDescriptor列族(ColumnFamily)Put添加数据(put命令)Get获取数据(get命令)ResultScanner、Scan扫描表(scan命令)Result存储Get或Scan操作后获取的表的单行值32/48HBase数据存储管理API10-3HBaseConfiguration:包括HBase的所有配置信息Connection:表示到HBase的连接获取Admin管理数据库获取Table管理表示例Configurationcfg=HBaseConfiguration.create();配置文件搜索顺序:1、hbase-site.xml2、hbase-default.xml示例Connectionconn=ConnectionFactory.createConnection(cfg);//创建连接

//获取管理HBase集群的管理实例Adminadmin=conn.getAdmin();//获取scores表的实例Tabletable=conn.getTable(TableName.valueOf(“scores”));conn.close();//关闭连接对表名的封装33/48Admin:管理HBase的接口返回值方法描述voidcreateTable(HTableDescriptordesc)创建一个新表HTableDescriptor[]listTables()列出所有表voiddeleteTable(TableNametableName)删除一个已存在的表voidenableTable(TableNametableName)使表有效voiddisableTable(TableNametableName)使表无效voidmodifyTable(TableNametableName,HTableDescriptorhtd)修改一个已存在的表booleantableExists(TableNametableName)检查表是否存在,存在则返回true演示示例2:使用Admin管理scores表包含了表的名字及其对应的列族HBase数据存储管理API10-434/48TableName封装表名的POJO完整的表名格式——<表命名空间>:<表修饰符>HColumnDescriptor:对列族的描述列族名称、版本号、……HTableDescriptor封装TableName和HColumnDescriptor示例TableNametn=TableName.valueOf(“scores”);HTableDescriptorhtd=admin.getTableDescriptor(tn);HColumnDescriptorcolumFamily=newHColumnDescriptor(“course”);columFamily.setValue(HConstants.VERSIONS,“5”);htd.addFamily(columnFamily);HConstants提供了大量常量HBase数据存储管理API10-535/48Table:对表进行数据存储操作的接口对表的操作被封装成相应对象Put、

Get、Scan、Delete返回值方法描述voidput(Putput)向表添加值,Put表示添加操作Resultget(Getget)获取单元值,Get表示获取操作voiddelete(Deletedelete)删除指定的单元/行,Delete代表删除操作ResultScannergetScanner(Scan)获取当前表给定列族的scanner实例,ResultScanner代表结果列表getScanner(byte[]family,byte[]qualifier)getScanner(byte[]family)booleanexists(Getget)测试Get实例所指定的值是否存在Table中HTableDescriptorgetTableDescriptor()获取表的HTableDescriptor实例TableNamegetName()获取表名HBase数据存储管理API10-636/48Put:为指定行键添加列键和值示例Connectionconn=ConnectionFactory.createConnection(cfg);Tabletb=conn.getTable(TableName.valueOf("scores"));Putp=newPut(Bytes.toBytes("jason"));p.addColumn(Bytes.toBytes("grade"),Bytes.toBytes(""),Bytes.toBytes("2"));p.addColumn(Bytes.toBytes("course"),Bytes.toBytes("math"), Bytes.toBytes("57"));p.addColumn(Bytes.toBytes("course"),Bytes.toBytes("art"), Bytes.toBytes("87"));tb.put(p);必须转为字节类型演示示例3:向scores表插入数据必须指定行键HBase数据存储管理API10-737/48Get:获取单行Result:代表单行数据,单行数据可有多个列键值对Cell:数据单元格示例Connectionconn=ConnectionFactory.createConnection(cfg);Tabletb=conn.getTable(TableName.valueOf(“scores”));Getg=newGet(Bytes.toBytes(“jason”));Resultresult=tb.get(g);for(Cellcell:result.listCells()){

System.out.println("Rowkey:"+Bytes.toString(result.getRow())

+" Familiy:"+Bytes.toString(CellUtil.cloneFamily(cell))

+" Quilifier:"+Bytes.toString(CellUtil.cloneQualifier(cell))

+" Value:"+Bytes.toString(CellUtil.cloneValue(cell)));} conn.close();必须指定行键辅助类,获取Cell对象中的属性:列族、列修饰符和列值等演示示例4:使用Get查询scores表HBase数据存储管理API10-838/48Scan:多行扫描操作ResultScanner:接收Scan的结果示例Connectionconn=ConnectionFactory.createConnection(cfg);Tabletb=conn.getTable(TableName.valueOf(“scores”));

ResultScannerscanner=tb.getScanner(newScan());//全表扫描for(Resultrow:scanner){

for(Cellcell:row.listCells()){

System.out.println("Rowkey:"+Bytes.toString(row.getRow())

+" Familiy:"+Bytes.toString(CellUtil.cloneFamily(cell))

+" Quilifier:"+Bytes.toString(CellUtil.cloneQualifier(cell))

+" Value:"+Bytes.toString(CellUtil.cloneValue(cell))); }}conn.close();可指定列族、列键,但不能有行键演示示例5:使用Scan查询scores表多个Result的集合HBase数据存储管理API10-939/48Delete:删除行、列族、列键指定行键,删除整行指定行键和列族,删除该行该列族所有数据指定行键和列键,删除该行该列键的数据示例Connectionconn=ConnectionFactory.createConnection(cfg);Tabletb=conn.getTable(TableName.valueOf(“scores”));

Deletedelete=newDelete(Bytes.toBytes(“jason”));delete.deleteColumn(Bytes.toBytes(“course”),Bytes.toBytes(“math”));tb.delete(delete);conn.close();或者

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论