版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实训4.3HBase的API实战1.实训目的认识HBaseJavaAPI并且学会简单的使用,编程实现Java连接HBase,编程实现Java操作HBase表,进行数据的增删改查。2.实训内容(1)Java编程实现连接HBase(2)Java编程实现对HBase表的基本操作3.实训要求以小组为单元进行实训,每小组5人,小组自协商选一位组长,由组长安排和分配实训任务,具体参考实训操作环节。需要确保HDFS、ZooKeeper与HBase等环境安装正确。4.准备知识(1)HBase的API说明①HBase采用Java实现,原生客户端也是Java实现,其他语言需要通过thrift接口服务间接访问HBase的数据。②HBase作为大数据存储数据库,其写能力非常强,加上HBase本身就脱胎于Hadoop,所以和Hadoop的兼容性极好。(2)HBaseJavaAPI介绍几个主要HBaseAPI类和数据模型之间的对应关系如表4-7所示。表4-7API类和数据模型之间的关系java类HBase数据模型HBaseAdmin数据库(DataBase)HBaseConfigurationHTable表(Table)HTableDescriptor列族(ColumnFamily)Put列修饰符(ColumnQualifier)GetScanner①HBaseAdmin关系:org.apache.hadoop.HBase.client.HBaseAdmin作用:提供了一个接口来管理HBase数据库的表信息。它提供的方法包括:创建表,删除表,列出表项,使表有效或无效,以及添加或删除表列族成员等。它的返回值、函数和描述信息如表4-8所示。表4-8返回值、函数和描述信息返回值函数描述voidaddColumn(StringtableName,HColumnDescriptorcolumn)向一个已经存在的表添加列checkHBaseAvailable(HBaseConfigurationconf)静态函数,查看HBase是否处于运行状态createTable(HTableDescriptordesc)创建一个表,同步操作deleteTable(byte[]tableName)删除一个已经存在的表enableTable(byte[]tableName)使表处于有效状态disableTable(byte[]tableName)使表处于无效状态HTableDescriptor[]listTables()列出所有用户控件表项voidmodifyTable(byte[]tableName,HTableDescriptorhtd)修改表的模式,是异步的操作,可能需要花费一定的时间booleantableExists(StringtableName)检查表是否存在用法用例:HBaseAdminadmin=newHBaseAdmin(config);admin.disableTable("tablename")②HBaseConfiguration关系:org.apache.hadoop.HBase.HBaseConfiguration作用:对HBase进行配置。它的返回值、函数和描述信息如表4-9所示。表4-9返回值、函数和描述信息返回值函数描述voidaddResource(Pathfile)通过给定的路径所指的文件来添加资源voidclear()清空所有已设置的属性stringget(Stringname)获取属性名对应的值StringgetBoolean(Stringname,boolean获取为boolean类型的属性值,如果其属性值类型部位boolean,则返回默认属性值voidset(Stringname,Stringvalue)通过属性名来设置值voidsetBoolean(Stringname,boolean设置boolean类型的属性值用法用例:HBaseConfigurationhconfig=newHBaseConfiguration();hconfig.set("perty.clientPort","2181");该方法设置了"perty.clientPort"的端口号为2181。一般情况下,HBaseConfiguration会使用构造函数进行初始化,然后在使用其他方法。③HTableDescriptor关系:org.apache.hadoop.HBase.HTableDescriptor作用:包含了表的名字极其对应表的列族。它的返回值、函数和描述信息如表4-10所示。表4-10返回值、函数和描述信息返回值函数描述voidaddFamily(HColumnDescriptor)添加一个列族HColumnDescriptorremoveFamily(byte[]column)移除一个列族byte[]getName()获取表的名字byte[]getvalue(byte[]key)获取属性的值voidsetValue(Stringkey,Stringvalue)设置属性的值用法用例:HTableDescriptorhtd=newHTableDescriptor(table);htd.addFamily(newHcolumnDescriptor("family"));在上述例子中,通过一个HColumnDescriptor实例,为HTableDescriptor添加了一个列族:family,该方法设置了"perty.clientPort"的端口号为2181。一般情况下,HBaseConfiguration会使用构造函数进行初始化,然后在使用其他方法。④HColumnDescriptor关系:org.apache.hadoop.HBase.HColumnDescriptor作用:维护着关于列族的信息,例如版本号,压缩设置等。它通常在创建表或者为表添加列族的时候使用。列族被创建后不能直接修改,只能通过删除然后重新创建的方式。列族被删除的时候,列族里面的数据也会同时被删除。它的返回值、函数和描述信息如表4-11所示。表4-11返回值、函数和描述信息返回值函数描述byte[]getName()获取列族的名字byte[]getValue(byte[]key)获取对应的属性的值voidsetvalue(Stringkey,Stringvalue)设置对应属性的值用法用例:HTableDescriptorhtd=newHTableDescriptor(tablename);HColumnDescriptorcol=newHColumnDescriptor("content:");htd.addFamily(col);此例添加了一个content的列族。⑤HTable关系:org.apache.hadoop.HBase.client.HTable作用:可以用来和HBase的表直接通信。此方法对于更新操作来说是非线程安全的。它的返回值、函数和描述信息如表4-12所示。表4-12返回值、函数和描述信息返回值函数描述voidcheckAdnPut(byte[]row,byte[]family,自动的检查row/family/qualifier是否与给定的值匹配voidclose()释放所有的资源或挂起内部缓冲区中的更新Booleanexists(Getget)检查Get实例所指定的值是否存在于HTable的列中Resultget(Getget)获取指定行的某些单元格所对应的值byte[][]getEndKeys()获取当前一打开的表每个区域的结束键值ResultScannergetScanner(byte[]family)获取当前给定列族的scanner实例HTableDescriptogetTableDescriptor()获取当前表的HTableDescriptor实例byte[]getTableName()获取表名staticbooleanisTableEnabled(HBaseConfigurationconf,StringtableName)检查表是否有效voidput(Putput)向表中添加值用法用例:HTabletable=newHTable(conf,Bytes.toBytes(tablename));ResultScannerscanner=table.getScanner(family);⑥Put关系:org.apache.hadoop.HBase.client.Put作用:用来对单个行执行添加操作它的返回值、函数和描述信息如表4-13所示。图表4-13返回值、函数和描述信息返回值函数描述Putadd(byte[]family,byte[]qualifier,byte[]value)将指定的列和对应的值添加到Put实例中Putadd(byte[]family,byte[]qualifier,longts,byte[]value)将制定的列和对应的值及时间戳添加到Put实例中byte[]getRow()获取Put实例的行RowLockgetRowLock()获取Put实例的行锁longgetTimeStamp()获取Put实例的时间戳booleanisEmpty()检查familyMap是否为空PutsetTimeStamp(longtimeStamp)设置Put实例的时间戳用法用例:HTabletable=newHTable(conf,Bytes.toBytes(tablename));Putp=newPut(brow);//为指定行创建一个Put操作p.add(family,qualifier,value);table.put(p);⑦Get关系:org.apache.hadoop.HBase.client.Get作用:用来获取单个行的相关信息它的返回值、函数和描述信息如图表4-14所示。表4-14返回值、函数和描述信息返回值函数描述GetaddColumn(byte[]family,byte[]qualifier)获取指定列族和列修饰符对应的列GetaddFamily(byte[]family)通过指定的列族获取其对应列的所有列GetsetTimeRange(longminStamp,longmaxStamp)获取指定取件的列的版本号GetsetFilter(Filterfilter)当执行Get操作时设置服务器端的过滤器用法用例:HTabletable=newHTable(conf,Bytes.toBytes(tablename));Getg=newGet(Bytes.toBytes(row));⑧Result关系:org.apache.hadoop.HBase.client.Result。作用:存储Get或者Scan操作后获取表的单行值。使用此类提供的方法可以直接获取值
或者各种Map结构(Key-value对)。它的返回值、函数和描述信息如表4-15所示。表4-15返回值、函数和描述信息返回值函数描述booleancontainsColumn(byte[]family,bytequalifier)检查指定的列是否存在NavigableMap<byte[],byte[]>getFamilyMap(byte[]family)获取对应列族所包含的修饰符与值的键值对byte[]getValue(byte[]family,byte[]qualifier)获取对应列的最新值5.实训步骤(1)准备工作①依次启动HDFS、ZooKeeper、HBase,查看进程如图4-51所示。②导入依赖本次编程环境继续使用实训2.3的环境,但编写HBase程序需要引入相关的jar包,所以需要先解压HBase的安装包到Windows本地,然后再导入hbase-shaded-client-2.5.0.jar包。操作如图4-52所示。图4-52导入HBase的依赖(2)编写代码新建一个HBaseDemo类,完整代码如下:packagecom.bigdata;
importorg.apache.hadoop.conf.Configuration;
importorg.apache.hadoop.hbase.*;
importorg.apache.hadoop.hbase.client.*;
importorg.apache.hadoop.hbase.filter.Filter;
importorg.apache.hadoop.hbase.filter.FilterList;
importorg.apache.hadoop.hbase.filter.SingleColumnValueFilter;
importorg.apache.hadoop.hbase.util.Bytes;
importjava.io.IOException;
importjava.util.ArrayList;
importjava.util.List;
publicclassHBaseDemo{
publicstaticvoidmain(String[]args){
Configurationconfiguration=HBaseConfiguration.create();
Connectionconnection=null;
configuration.set("HBase.zookeeper.quorum","master:2181,slave1:2181,slave2:2181");
configuration.set("zookeeper.znode.parent","/hbase");
try{
connection=ConnectionFactory.createConnection(configuration);
//获得Admin对象
Adminadmin=connection.getAdmin();
Stringtbl="hbase";
TableNametableName=TableName.valueOf(tbl);
//一、表不存在时创建表
if(!admin.tableExists(tableName)){
//创建表描述对象
TableDescriptorBuildertableDescriptor=TableDescriptorBuilder.newBuilder(tableName);
//列簇1
ColumnFamilyDescriptorfamilyColumn1=ColumnFamilyDescriptorBuilder.newBuilder("c1".getBytes()).build();
//列簇2
ColumnFamilyDescriptorfamilyColumn2=ColumnFamilyDescriptorBuilder.newBuilder("c2".getBytes()).build();
tableDescriptor.setColumnFamily(familyColumn1);
tableDescriptor.setColumnFamily(familyColumn2);
//用Admin对象创建表
admin.createTable(tableDescriptor.build());
}
//关闭Admin对象
admin.close();
//二、向表put数据
//获得table接口
Tabletable=connection.getTable(tableName);
//添加的数据对象集合
List<Put>putList=newArrayList<Put>();
//添加10行数据
for(inti=0;i<10;i++){
//put对象(rowKey)
StringrowKey="myKey"+i;
Putput=newPut(rowKey.getBytes());
//添加列簇,列名,值
put.addColumn("c1".getBytes(),"c1tofamily1".getBytes(),("100"+i).getBytes());
put.addColumn("c1".getBytes(),"c2tofamily1".getBytes(),("200"+i).getBytes());
put.addColumn("c2".getBytes(),"c1tofamily2".getBytes(),("300"+i).getBytes());
putList.add(put);
}
table.put(putList);
table.close();
//查看对象
Scanscan=newScan();
//限定rowKey查询范围
scan.withStartRow("myKey0".getBytes());
scan.withStopRow("myKey9".getBytes());
//只查询c1:c1tofamily1列
scan.addColumn("c1".getBytes(),"c1tofamily1".getBytes());
//过滤器集合
FilterListfilterList=newFilterList();
//查询符合条件c1:c1tofamily1==1007的记录
Filterfilter1=newSingleColumnValueFilter("c1".getBytes(),"c1tofamily1".getBytes(),CompareOperator.EQUAL,"1007".getBytes());
filterList.addFilter(filter1);
scan.setFilter(filterList);
ResultScannerresults=table.getScanner(scan);
for(Resultresult:results){
System.out.println("获得到rowKey:"+newString(result.getRow()));
for(Cellcell:result.rawCells()){
System.out.println("列簇:"+
Bytes.toString(cell.getFamilyArray(),cell.getFam
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年福建信息职业技术学院辅导员考试笔试真题汇编附答案
- 2024年苏州健雄职业技术学院辅导员招聘考试真题汇编附答案
- 2024年西安电力高等专科学校辅导员考试参考题库附答案
- 2024年遂宁职业学院辅导员招聘备考题库附答案
- 2024年重庆对外经贸学院辅导员考试笔试真题汇编附答案
- 2024年黑龙江工程学院昆仑旅游学院辅导员招聘备考题库附答案
- 2025年安徽三联学院辅导员招聘备考题库附答案
- 2025年榆林市住房公积金管理中心招聘(19人)参考题库及答案1套
- 2025年福建厦门市公安局思明分局招聘警务辅助人员30人备考题库附答案
- 2025广东深圳市龙岗区司法局招聘特聘岗聘员拟聘人员备考题库含答案
- 总裁思维培训课件
- 骨科患者围手术期静脉血栓栓塞症预防指南(2025年)
- 2025年信息化运行维护工作年度总结报告
- 电梯更换配件协议书
- 中海大海洋地质学课件第12章海底矿产资源-1第二十二讲
- 胆囊癌教学课件
- 人教版七年级上册道德与法治期末模拟综合测试题
- NBT 11508-2024 配电自动化工程可行性研究报告内容深度规定
- (新交际英语2024版)英语一年级上册全册单元测试(含听力音频+解析)
- 运输公司安全生产培训计划
- 狼和鸭子儿童故事课件
评论
0/150
提交评论