1、3. 实验内容和完成情况1. 编程实现以下指定功能,并用Hadoop提供的HBase Shell命令完成相同任务:(完整可执行代码见 代码/QuestionOne.java)(1)列出HBase所有的表的相关信息,例如表名;Shell:List图1 列出HBase所有表的相关信息编程:/(1)列出HBase所有的表的相关信息,例如表名、创建时间等public static void listTables() throws IOException init();/建立连接 HTableDescriptor hTableDescriptors = admin.listTables(); for(H
2、TableDescriptor hTableDescriptor :hTableDescriptors) System.out.println(表名:+hTableDescriptor.getNameAsString(); close();/关闭连接(2)在终端打印出指定的表的所有记录数据;scan s1图2 打印指定表的所有记录数据/(2)在终端打印出指定的表的所有记录数据public static void getData(String tableName)throws IOException Table table = connection.getTable(TableName.valu
3、eOf(tableName); Scan scan = new Scan(); ResultScanner scanner = table.getScanner(scan); for (Result result:scanner) printRecoder(result);/打印一条记录的详情public static void printRecoder(Result result)throws IOException for(Cell cell:result.rawCells() System.out.print(行健: +new String(CellUtil.cloneRow(cell)
4、;列簇:+new String(CellUtil.cloneFamily(cell); 列:+new String(CellUtil.cloneQualifier(cell); 值:+new String(CellUtil.cloneValue(cell);时间戳:+cell.getTimestamp();(3)向已经创建好的表添加和删除指定的列族或列;p.s:此题请先在Shell中创建s1作为示例表: create ,scorea)在s1表,添加数据: put zhangsanscore:Math69图3 给s1添加数据/向表添加数据public static void insertRow(
5、String tableName,String rowKey,String colFamily,String col,String val) throws IOException Put put = new Put(rowKey.getBytes(); put.addColumn(colFamily.getBytes(), col.getBytes(), val.getBytes(); table.put(put); table.close();insertRow(s1)b)在s1表,删除指定的列:delete 图4 删除数据/删除数据public static void deleteRow(
6、String tableName,String rowKey,String colFamily,String col) throws IOException Delete delete = new Delete(rowKey.getBytes(); /删除指定列族 delete.addFamily(Bytes.toBytes(colFamily); /删除指定列 delete.addColumn(Bytes.toBytes(colFamily),Bytes.toBytes(col); table.delete(delete);deleteRow(4)清空指定的表的所有记录数据;truncate
7、 图5 清空指定表的所有记录数据编程:/(4)清空指定的表的所有记录数据public static void clearRows(String tableName)throws IOException TableName tablename = TableName.valueOf(tableName); admin.disableTable(tablename); admin.deleteTable(tablename); HTableDescriptor hTableDescriptor = new HTableDescriptor(tableName); admin.createTable
8、(hTableDescriptor);(5)统计表的行数。count 图6 统计表的行数/(5)统计表的行数public static void countRows(String tableName)throws IOException int num = 0; for (Result result = scanner.next();result!=null;result=scanner.next() num+; System.out.println(行数:+ num); scanner.close();2. 现有以下关系型数据库中的表和数据,要求将其转换为适合于HBase存储的表并插入数据:
9、学生表(Student)学号(S_No)姓名(S_Name)性别(S_Sex)年龄(S_Age)2015001Zhangsanmale232015003Maryfemale22Lisi24课程表(Course)课程号(C_No)课程名(C_Name)学分(C_Credit)123001Math2.0123002Computer Science5.0123003English3.0选课表(SC)学号(SC_Sno)课程号(SC_Cno)成绩(SC_Score)8669201500277999895 学生Student表主键的列名是随机分配的,因此无需创建主键列创建表:create StudentS_NoS_NameS_SexS_Age图7 创建Student表插入数据:插入数据shell命令第一行数据put s0012015001Zhangsanmale23第二行数据s0022015002Maryfemale22第三行数据s0032015003Lisi24图8 添加数据并查看图9 添加3个学生 课程Course表CourseC_NoC_NameC_Credit图10 创建Course表插入数据:c001C_N
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1