版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上实验4熟悉常用的HBase操作姓名:包生友 专业年级:软件143 学号:1. 实验目的1. 理解HBase在Hadoop体系结构中的角色;2. 熟练使用HBase操作常用的Shell命令;3. 熟悉HBase操作常用的Java API。2. 实验环境操作系统:LinuxHadoop版本:2.6.0或以上版本HBase版本:1.1.2或以上版本JDK版本:1.6或以上版本Java IDE:Eclipse3. 实验内容和完成情况1. 编程实现以下指定功能,并用Hadoop提供的HBase Shell命令完成相同任务:(完整可执行代码见 代码/QuestionOne.jav
2、a)(1)列出HBase所有的表的相关信息,例如表名;Shell:List图1 列出HBase所有表的相关信息编程:/(1)列出HBase所有的表的相关信息,例如表名、创建时间等public static void listTables() throws IOException init();/建立连接 HTableDescriptor hTableDescriptors = admin.listTables(); for(HTableDescriptor hTableDescriptor :hTableDescriptors) System.out.println("表名:&quo
3、t;+hTableDescriptor.getNameAsString(); close();/关闭连接(2)在终端打印出指定的表的所有记录数据;Shell:scan 's1'图2 打印指定表的所有记录数据编程:/(2)在终端打印出指定的表的所有记录数据public static void getData(String tableName)throws IOException init(); Table table = connection.getTable(TableName.valueOf(tableName); Scan scan = new Scan(); Result
4、Scanner scanner = table.getScanner(scan); for (Result result:scanner) printRecoder(result); close();/打印一条记录的详情public static void printRecoder(Result result)throws IOException for(Cell cell:result.rawCells() System.out.print("行健: "+new String(CellUtil.cloneRow(cell); System.out.print("
5、列簇: "+new String(CellUtil.cloneFamily(cell); System.out.print(" 列: "+new String(CellUtil.cloneQualifier(cell); System.out.print(" 值: "+new String(CellUtil.cloneValue(cell); System.out.println("时间戳: "+cell.getTimestamp(); (3)向已经创建好的表添加和删除指定的列族或列;p.s:此题请先在Shell中创建s1作
6、为示例表: create 's1','score'a)在s1表,添加数据:Shell: put 's1','zhangsan','score:Math','69'图3 给s1添加数据编程:/向表添加数据public static void insertRow(String tableName,String rowKey,String colFamily,String col,String val) throws IOException init(); Table table = connection
7、.getTable(TableName.valueOf(tableName); Put put = new Put(rowKey.getBytes(); put.addColumn(colFamily.getBytes(), col.getBytes(), val.getBytes(); table.put(put); table.close(); close();insertRow("s1",'zhangsan','score','Math','69')b)在s1表,删除指定的列:Shell:delete &
8、#39;s1','zhangsan','score:Math'图4 删除数据编程:/删除数据public static 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(); /删除指定列族
9、delete.addFamily(Bytes.toBytes(colFamily); /删除指定列 delete.addColumn(Bytes.toBytes(colFamily),Bytes.toBytes(col); table.delete(delete); table.close(); close();deleteRow("s1",'zhangsan','score','Math')(4)清空指定的表的所有记录数据;Shell:truncate 's1'图5 清空指定表的所有记录数据编程:/(4)清空
10、指定的表的所有记录数据public static void clearRows(String tableName)throws IOException init(); TableName tablename = TableName.valueOf(tableName); admin.disableTable(tablename); admin.deleteTable(tablename); HTableDescriptor hTableDescriptor = new HTableDescriptor(tableName); admin.createTable(hTableDescriptor
11、); close();(5)统计表的行数。Shell:count 's1'图6 统计表的行数编程:/(5)统计表的行数public static void countRows(String tableName)throws IOException init(); Table table = connection.getTable(TableName.valueOf(tableName); Scan scan = new Scan(); ResultScanner scanner = table.getScanner(scan); int num = 0; for (Result
12、 result = scanner.next();result!=null;result=scanner.next() num+; System.out.println("行数:"+ num); scanner.close(); close();2. 现有以下关系型数据库中的表和数据,要求将其转换为适合于HBase存储的表并插入数据:学生表(Student)学号(S_No)姓名(S_Name)性别(S_Sex)年龄(S_Age)Zhangsanmale23Maryfemale22Lisimale24课程表(Course)课程号(C_No)课程名(C_Name)学分(C_Cr
13、edit)Math2.0Computer Science5.0English3.0 选课表(SC)学号(SC_Sno)课程号(SC_Cno)成绩(SC_Score)866977999895 学生Student表p.s:主键的列名是随机分配的,因此无需创建主键列创建表:create 'Student','S_No','S_Name','S_Sex','S_Age'图7 创建Student表插入数据:插入数据shell命令第一行数据put 'Student','s001','S_
14、No',''put 'Student','s001','S_Name','Zhangsan'put 'Student','s001','S_Sex','male'put 'Student','s001','S_Age','23'第二行数据put 'Student','s002','S_No',''put 'St
15、udent','s002','S_Name','Mary'put 'Student','s002','S_Sex','female'put 'Student','s002','S_Age','22'第三行数据put 'Student','s003','S_No',''put 'Student','s003','
16、S_Name','Lisi'put 'Student','s003','S_Sex','male'put 'Student','s003','S_Age','24'图8 添加数据并查看图9 添加3个学生 课程Course表创建表:create 'Course','C_No','C_Name','C_Credit'图10 创建Course表插入数据:插入数据shell命令第一行数据p
17、ut 'Course','c001','C_No',''put 'Course','c001','C_Name','Math'put 'Course','c001','C_Credit','2.0'第二行数据put 'Course','c002','C_No',''put 'Course','c002',
18、9;C_Name','Computer'put 'Course','c002','C_Credit','5.0'第三行数据put 'Course','c003','C_No',''put 'Course','c003','C_Name','English'put 'Course','c003','C_Credit','3.0&
19、#39;图11 添加数据图12 添加3个课程 选课表创建表:create 'SC','SC_Sno','SC_Cno','SC_Score'图13 创建表SC插入数据:插入数据shell命令第一行数据put 'SC','sc001','SC_Sno',''put 'SC','sc001','SC_Cno',''put 'SC','sc001','SC_Score
20、39;,'86'第二行数据put 'SC','sc002','SC_Sno',''put 'SC','sc002','SC_Cno',''put 'SC','sc002','SC_Score','69'第三行数据put 'SC','sc003','SC_Sno',''put 'SC','sc003
21、9;,'SC_Cno',''put 'SC','sc003','SC_Score','77'第四行数据put 'SC','sc004','SC_Sno',''put 'SC','sc004','SC_Cno',''put 'SC','sc004','SC_Score','99'第五行数据put 'SC&
22、#39;,'sc005','SC_Sno',''put 'SC','sc005','SC_Cno',''put 'SC','sc005','SC_Score','98'第六行数据put 'SC','sc006','SC_Sno',''put 'SC','sc006','SC_Cno',''put
23、 'SC','sc006','SC_Score','95'图14 插入数据图15 数据显示图16 QuestionOne运行后控制台消息同时,请编程完成以下指定功能:(完整可执行代码见 代码/QuestionTwo.java)(1)createTable(String tableName, String fields)创建表,参数tableName为表的名称,字符串数组fields为存储记录各个域名称的数组。要求当HBase已经存在名为tableName的表的时候,先删除原有的表,然后再创建新的表。代码:public static
24、 void createTable(String tableName,String fields) throws IOException init(); TableName tablename = TableName.valueOf(tableName); if(admin.tableExists(tablename) System.out.println("table is exists!"); admin.disableTable(tablename); admin.deleteTable(tablename);/删除原来的表 HTableDescriptor hTab
25、leDescriptor = new HTableDescriptor(tablename); for(String str:fields) HColumnDescriptor hColumnDescriptor = new HColumnDescriptor(str); hTableDescriptor.addFamily(hColumnDescriptor); admin.createTable(hTableDescriptor); close();(2)addRecord(String tableName, String row, String fields, String values
26、)向表tableName、行row(用S_Name表示)和字符串数组files指定的单元格中添加对应的数据values。其中fields中每个元素如果对应的列族下还有相应的列限定符的话,用“columnFamily:column”表示。例如,同时向“Math”、“Computer Science”、“English”三列添加成绩时,字符串数组fields为“Score:Math”,”Score;Computer Science”,”Score:English”,数组values存储这三门课的成绩。代码:public static void addRecord(String tableName,
27、String row,String fields,String values) throws IOException init(); Table table = connection.getTable(TableName.valueOf(tableName); for(int i = 0;i != fields.length;i+) Put put = new Put(row.getBytes(); String cols = fieldsi.split(":"); put.addColumn(cols0.getBytes(), cols1.getBytes(), valu
28、esi.getBytes(); table.put(put); table.close(); close();(3)scanColumn(String tableName, String column)浏览表tableName某一列的数据,如果某一行记录中该列数据不存在,则返回null。要求当参数column为某一列族名称时,如果底下有若干个列限定符,则要列出每个列限定符代表的列的数据;当参数column为某一列具体名称(例如“Score:Math”)时,只需要列出该列的数据。代码:public static void scanColumn(String tableName,String co
29、lumn)throws IOException init(); Table table = connection.getTable(TableName.valueOf(tableName); 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);
30、 table.close(); close();/格式化输出public static void showCell(Result result) Cell cells = result.rawCells(); for(Cell cell:cells) System.out.println("RowName:"+new String(CellUtil.cloneRow(cell)+" "); System.out.println("Timetamp:"+cell.getTimestamp()+" "); System
31、.out.println("column Family:"+new String(CellUtil.cloneFamily(cell)+" "); System.out.println("row Name:"+new String(CellUtil.cloneQualifier(cell)+" "); System.out.println("value:"+new String(CellUtil.cloneValue(cell)+" "); (4)modifyData(Str
32、ing tableName, String row, String column)修改表tableName,行row(可以用学生姓名S_Name表示),列column指定的单元格的数据。代码:public static void modifyData(String tableName,String row,String column,String val)throws IOException init(); Table table = connection.getTable(TableName.valueOf(tableName); Put put = new Put(row.getBytes(); put.addColumn(column.getBytes(),null,val.getBytes(); table.put(put); table.close(); close();(5)deleteRow(String tableName, String row)删除表tableName中row指定的行的记录。public static void deleteRow(String tableName,String row)throws IOException init(); Table table = connection.getTab
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 47473-2026互联网域名服务身份信息核验技术要求
- 代谢相关脂肪性肝病无创评估专家共识
- 电力工程造价从业人员专业能力评价考试(专业技术公共基础)考前模拟试题(上海市2025年)
- 2026上海市助理政工师职称考试(思想政治工作)自测试题及答案解析
- 2026年心理学教育专家考试试题及答案解析
- 2026年施工员岗位技能考试试题及答案解析
- 娲皇宫元素文创设计-以《娲皇印象》为例
- 2026年湖北省路桥工程专业技术职务水平能力测试(交通工程初中级)全真模拟试题及答案
- 2026年成人高考专升本教育真题试卷及答案
- Python猜数字游戏教学课件
- 2026年卫生健康知识培训
- 电梯意外事件与事故应急救援及演习制度培训
- 2026年东省济南第一中学高考语文二模试卷
- 小学英语三年级下册Unit 5 Old Toys单元整体教学设计
- 2026年高中化学学业水平考试知识点归纳总结(复习必背)
- 护理教育学课件下载
- 生物芯片中光电传感器的技术解析与应用探索
- 三下道法 第三单元《我是家庭一员》素养测评卷26春
- 广西壮族自治区2025广西农业科学院及直属单位招聘笔试历年参考题库典型考点附带答案详解
- 12.2 跨学科实践:制作简易杆秤-课件(内嵌视频)2025-2026学年物理人教版八年级下册
- 2026生物制造关键装备与工艺革新白皮书
评论
0/150
提交评论