实验第四章熟悉常用的hbase操作答案厦门林子雨大数据技术原理与应用配套机房上机指南_第1页
实验第四章熟悉常用的hbase操作答案厦门林子雨大数据技术原理与应用配套机房上机指南_第2页
实验第四章熟悉常用的hbase操作答案厦门林子雨大数据技术原理与应用配套机房上机指南_第3页
实验第四章熟悉常用的hbase操作答案厦门林子雨大数据技术原理与应用配套机房上机指南_第4页
实验第四章熟悉常用的hbase操作答案厦门林子雨大数据技术原理与应用配套机房上机指南_第5页
已阅读5页,还剩7页未读, 继续免费阅读

付费下载

下载本文档

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

文档简介

1、厦门大学林子雨编著大数据技术原理与应用配套机房上机实验指南()实验 3熟悉常用的 HBase 操作(版本号:2016 年 5 月 14 日版本)第四章主讲教师:林子雨厦门大学数据库二零一六年五月目录实验目的11234实验.1实验内容和要求1实验8附录 1:任课教师介绍8附录 2:课程介绍9附录 3:中国高校大数据课程公共介绍10厦门大学林子雨编著大数据技术原理与应用配套机房上机实验指南()实验 3第四章 熟悉常用的 HBase 操作主讲教师:林子雨个人主页: HYPERLINK http:/w/linziyu http:/w/linziyu: z1实验目的1. 理解 HBase 在Hadoop

2、 体系结构中的角色;2. 熟练使用HBase 操作常用的S命令;3. 熟悉 HBase 操作常用的 Java API。实验操作系统:LinuxHadoop 版本:2.6.0 或以上版本 HBase 版本:1.1.2 或以上版本 JDK 版本:1.6 或以上版本 Java IDE:Eclipse实验内容和要求231. 编程实现以下指定功能,并用 Hadoop 提供的 HBase S执行代码见 代码/QuestionOne.java)(1) 列出 HBase 所有的表的相关信息,例如表名;命令完成相同任务:(完整可S:list编程:/(1)列出 HBase 所有的表的相关信息,例如表名、创建时间等

3、(2) 在终端打印出指定的表的所有数据;S:scan s1编程:close();/关闭连接System.out.prln(表名:+hTableDescriptetNameAsString();init();/建立连接HTableDescriptor hTableDescriptors = admin.listTables();for(HTableDescriptor hTableDescriptor :hTableDescriptors)public sic void listTables() throws IOException (3)向已经创建好的表添加和删除指定的列族或列;此题请先在S中

4、创建 s1 作为示例表: create s1,scorea) 在 s1 表,添加数据:S:put s1,zhangsan,score:Math,69编程:insertRow(s1,zhangsan,score,Math,69)b) 在 s1 表,删除指定的列:S:delete s1,zhangsan,score:Math编程:/向表添加数据public sic void insertRow(String tableName,String rowKey,String colFamily,String col,String val) throws IOException init();Table

5、table = connection.getTable(TableName.valueOf(tableName);Put put = new Put(rowKey.getBytes();put.addColumn(colFamily.getBytes(), col.getBytes(), val.getBytes();table.put(put);table.close();close();/(2)在终端打印出指定的表的所有数据public sic void getData(String tableName)throws IOExceptioninit();Table table = conn

6、ection.getTable(TableName.valueOf(tableName);Scan scan = new Scan();ResultScanner scanner = table.getScanner(scan);for (Result result:scanner)pRecoder(result);close();/打印一条的详情public sic void pr Recoder(Result result)throws IOException for(Cell cell:result.rawCells()System.out.pr (行健: +new String(Cel

7、lUtil.cloneRow(cell);System.out.pr (列簇: +new String(CellUtil.cloneFamily(cell); System.out.pr ( 列: +new String(CellUtil.cloneQualifier(cell); System.out.pr ( 值: +new String(CellUtil.cloneValue(cell); System.out.pr ln(时间戳: +cell.getTimest();(4)清空指定的表的所有数据;S:truncate s1编程:(5)统计表的行数。S:count s1编程:/(5)统计

8、表的行数System.out.prln(行数:+ num);for (Result result = scanner.next();result!=null;result=scanner.next()num+;num = 0;init();Table table = connection.getTable(TableName.valueOf(tableName);Scan scan = new Scan();ResultScanner scanner = table.getScanner(scan);public sic void countRows(String tableName)thro

9、ws IOException/(4)清空指定的表的所有数据public sic void clearRows(String tableName)throws IOExceptioninit();TableName tablename = TableName.valueOf(tableName);admin.disableTable(tablename);admin.deleteTable(tablename);HTableDescriptor hTableDescriptor = new HTableDescriptor(tableName);admin.createTable(hTableD

10、escriptor);close();/删除数据public sic void deleteRow(String tableName,String rowKey,String colFamily,String col) throws IOException init();Table table = connection.getTable(TableName.valueOf(tableName);Delete delete = new Delete(rowKey.getBytes();/删除指定列族delete.addFamily(Bytes.toBytes(colFamily);/删除指定列d

11、elete.addColumn(Bytes.toBytes(colFamily),Bytes.toBytes(col);table.delete(delete);table.close();close();deleteRow(s1,zhangsan,score,Math)2. 现有以下关系型数据库中的表和数据,要求将其转换为适合于 HBase据:学生表(Student)的表并数课程表(Course)选课表(SC)i.学生 Student 表主键的列名是随机分配的,因此无需创建主键列创建表:create Student,S_No,S_Name,S_Sex,S_Age数据:数据 s命令第一行数据p

12、ut Student,s001,S_No,2015001put Student,s001,S_Name,Zhangsan put Student,s001,S_Sex,maleput Student,s001,S_Age,23第二行数据put Student,s002,S_No,2015002put Student,s002,S_Name,Maryput Student,s002,S_Sex,femaleput Student,s002,S_Age,22第三行数据put Student,s003,S_No,2015003put Student,s003,S_Name,Lisiput Stude

13、nt,s003,S_Sex,maleput Student,s003,S_Age,24学号(SC_Sno)课程号(o)成绩(SC_Score)201500112300186201500112300369201500212300277201500212300399201500312300198201500312300295课程号(C_No)课程名(C_Name)学分(C_Credit)123001Math2.0123002Computer5.0123003English3.0学号(S_No)(S_Name)(S_Sex)(S_Age)2015001Zhangsanmale232015002Mar

14、yfemale222015003Lisimale24scanner.close();close();ii.课程 Course 表创建表:create Course,C_No,C_Name,C_Credit数据:iii.选课表创建表:create SC,SC_Sno,数据:o,SC_Score同时,请编程完成以下指定功能:(完整可执行代码见 代码/QuestionTwo.java)(1)createTable(String tableName, String fields)组。要求当HBase 已经存在名为tableName 的表的时候,先删除原有的表,然后再创建新的表。public sic v

15、oid createTable(String tableName,String fields) throws IOException 创建表,参数tableName 为表的名称,字符串数组fields 为各个称的数 数据 s命令第一行数据put SC,sc001,SC_Sno,2015001put SC,sc001,o,123001put SC,sc001,SC_Score,86第二行数据put SC,sc002,SC_Sno,2015001put SC,sc002,o,123003put SC,sc002,SC_Score,69第三行数据put SC,sc003,SC_Sno,2015002

16、put SC,sc003,o,123002put SC,sc003,SC_Score,77第四行数据put SC,sc004,SC_Sno,2015002put SC,sc004,o,123003put SC,sc004,SC_Score,99第五行数据put SC,sc005,SC_Sno,2015003put SC,sc005,o,123001put SC,sc005,SC_Score,98第六行数据put SC,sc006,SC_Sno,2015003put SC,sc006,o,123002put SC,sc006,SC_Score,95数据 s命令第一行数据put Course,c0

17、01,C_No,123001put Course,c001,C_Name,Mathput Course,c001,C_Credit,2.0第二行数据put Course,c002,C_No,123002put Course,c002,C_Name,Computer put Course,c002,C_Credit,5.0第三行数据put Course,c003,C_No,123003 put Course,c003,C_Name,Englishput Course,c003,C_Credit,3.0(2)addRecord(String tableName, String row, Strin

18、g fields, String values)(3)scanColumn(String tableName, String column)浏览表tableName 某一列的数据,如果某一行中该列数据不存在,则返回 null。要求当参数column 为某一列族名称时,如果有若干个列限定符,则要列出每个列限定符代表的列的数据;当参数column 为某一列具体名称(例如“Score:Math”)时,只需要列出该列的数据。向表tableName、行row(用S_Name 表示)和字符串数组 files 指定的单元格中添加对应的数据values。其中fields 中每个元素如果对应的列族下还有相应的列

19、限定符的话,用“columnFamily:column”表示。例如,同时向“Math”、“Computer Science”、“English”三列添加成绩时,字符串数组fields 为“Score:Math”,”Score;Computer Science”,”Score:English”,数组values这三门课的成绩。public sic void addRecord(String tableName,String row,String fields,String values) throws IOException init();Table table = connection.get

20、Table(TableName.valueOf(tableName); for(i = 0;i != fields.length;i+)Put put = new Put(row.getBytes();String cols = fieldsi.split(:);put.addColumn(cols0.getBytes(), cols1.getBytes(), valuesi.getBytes(); table.put(put);table.close();close();init();TableName tablename = TableName.valueOf(tableName);if(

21、admableExists(tablename) System.out.pr ln(table is exists!); admin.disableTable(tablename);admin.deleteTable(tablename);/删除原来的表HTableDescriptor hTableDescriptor = new HTableDescriptor(tablename);for(String str:fields)HColumnDescriptor hColumnDescriptor = new HColumnDescriptor(str);hTableDescriptor.a

22、ddFamily(hColumnDescriptor);admin.createTable(hTableDescriptor);close();(4)modifyData(String tableName, String row, String column)(5)deleteRow(String tableName, String row)删除表tableName 中row 指定的行的。public sic void deleteRow(String tableName,String row)throws IOExceptioninit();Table table = connection.

23、getTable(TableName.valueOf(tableName); Delete delete = new Delete(row.getBytes();/删除指定列族修改表tableName,行row(可以用学生S_Name 表示),列column 指定的单元格的数据。(在S中修改数据和添加数据都是用put)public sic void modifyData(String tableName,String row,String column,String val)throws IOExceptioninit();Table table = connection.getTable(T

24、ableName.valueOf(tableName); Put put = new Put(row.getBytes(); put.addColumn(column.getBytes(),null,val.getBytes();table.put(put); table.close(); close();public sic void scanColumn(String tableName,String column)throws IOExceptioninit();Table table = connection.getTable(TableName.valueOf(tableName);

25、 Scan scan = new Scan();scan.addFamily(Bytes.toBytes(column); ResultScanner scanner = table.getScanner(scan);for (Result result = scanner.next(); result != null; result = scanner.next()showCell(result);table.close();close();/格式化输出public sic void showCell(Result result) Cell cells = result.rawCells()

26、;for(Cell cell:cells)System.out.pr ln(RowName:+new String(CellUtil.cloneRow(cell)+ ); System.out.pr ln(Timet:+cell.getTimest()+ );System.out.pr ln(column Family:+new String(CellUtil.cloneFamily(cell)+ ); System.out.pr ln(row Name:+new String(CellUtil.cloneQualifier(cell)+ ); System.out.pr ln(value:+

27、new String(CellUtil.cloneValue(cell)+ );3. 利用 HBase 和 MapReduce 完成如下任务:假设 HBase 有 2,表的逻辑视图及部分数据如下所示:表 逻辑视图及部分数据要求:从 HBase 读出上述两的数据,对“price”的排序,并将结果到 HBase 中。(MapReduce 是后面的章节,考虑到不使用 MapReduce,Hbase 只能对 Rowkey 进行排序,此题的不用 Mapreduce 的方法只有把价格 price 作为第二操作方法如下:create book,bookNameput book,val_60$,bookNam

28、e:,Thinking in Javaput book,val_20$,bookName:,Database System Concept put book,val_30$,bookName:,Data Miningscan #此处查询所有的数据,就会把按照rowKey 自动排序4实验的 RowKey)附录 1:任课教师介绍林子雨(1978),男,博士,厦门大学计算机科学系助理教授,主要研究领域为数据库,实时主动数据仓库,数据挖掘.主讲课程:大数据技术基础园科研 2 号楼办公地点:厦门大学: z个人主页: HYPERLINK http:/w/ http:/w/linziyu数据库:http:/大数据技术原理与应用课程机房上机实验题目:日期实验环境:实验内容与完成情况:出现:解决方案(列出遇到和解决办法,列出没有解决):书名(bookName)价格(price)Database System Concept30$Thinking in Java60$Data Mining25$/delete.addFamily(Bytes.toBytes(colFamily);/删除指

温馨提示

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

评论

0/150

提交评论