Hadoop实验03熟悉常用的HBase操作
🌊 Hbase相关配置参考网址:
😈http://dblab.xmu.edu.cn/blog/install-hbase/
一、 实验目的
1️⃣ 理解HBase在Hadoop体系结构中的角色;
2️⃣ 熟练使用HBase操作常用的Shell命令;
3️⃣ 熟悉HBase操作常用的Java API;
二、我的环境
操作系统:Linux
虚拟机 :ubuntu
Hadoop版本:2.7.1
HBase版本:1.1.2
JDK版本:1.8版本
Java IDE:IDEA
三、 实验内容
1) 根据下面给出的表格,用Hbase Shell模式设计student学生表格。
a) 设计完后,用scan指令浏览表的相关信息,给出截图。
b) 查询zhangsan 的Computer成绩。给出截图。
c) 修改lisi的Math成绩,改为95。给出截图。
⛵️Student 学生表
namescoreEnglishMathComputerzhangsan698677lisi5510088
2)根据上面已经设计出的student,用Hbase API编程;
a) 添加数据:name: mary English:45 Math:89 Computer:100
mary4589100
b) 获取mary的English成绩信息
四、实验代码和结果(截图展示)
1️⃣
A:
B:
C:
2️⃣
a:
b:查看mary英语成绩:
💻代码:
importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.hbase.*;importorg.apache.hadoop.hbase.client.*;importjava.io.IOException;publicclassExampleForHbase{publicstaticConfiguration configuration;publicstaticConnection connection;publicstaticAdmin admin;//主函数中的语句请逐句执行,只需删除其前的//即可,如:执行insertRow时请将其他语句注释publicstaticvoidmain(String[] args)throwsIOException{//创建一个表,表名为Score,列族为sname,course//createTable("xsb",new String[]{"name","course"});//zhangsan//insertRow("xsb", "95001", "name", "", "zhangsan");//insertRow("xsb", "95001", "course", "English", "69");//insertRow("xsb", "95001", "course", "Math", "86");//insertRow("xsb", "95001", "course", "Computer", "77");//lisi//insertRow("xsb", "95002", "name", "", "lisi");//insertRow("xsb", "95002", "course", "English", "55");//insertRow("xsb", "95002", "course", "Math", "100");//insertRow("xsb", "95002", "course", "Computer", "88");//查询表中,行键为95001,列族为course,列为Computer的值//getData("xsb", "95001", "course", "Computer");//删除表中指定列数据,其行键为95001,列族为course,列为Math//deleteRow("xsb", "95001", "course", "Math");//xiu gai//insertRow("xsb","95001","course","Math","95");}//建立连接publicstaticvoidinit(){
configuration =HBaseConfiguration.create();
configuration.set("hbase.rootdir","hdfs://localhost:9000/hbase");try{
connection =ConnectionFactory.createConnection(configuration);
admin = connection.getAdmin();}catch(IOException e){
e.printStackTrace();}}//关闭连接publicstaticvoidclose(){try{if(admin !=null){
admin.close();}if(null!= connection){
connection.close();}}catch(IOException e){
e.printStackTrace();}}/**
* 建表。HBase的表中会有一个系统默认的属性作为主键,主键无需自行创建,默认为put命令操作中表名后第一个数据,因此此处无需创建id列
* @param myTableName 表名
* @param colFamily 列族名
* @throws IOException
*/publicstaticvoidcreateTable(String myTableName,String[] colFamily)throwsIOException{init();TableName tableName =TableName.valueOf(myTableName);if(admin.tableExists(tableName)){System.out.println("talbe is exists!");}else{HTableDescriptor hTableDescriptor =newHTableDescriptor(tableName);for(String str:colFamily){HColumnDescriptor hColumnDescriptor =newHColumnDescriptor(str);
hTableDescriptor.addFamily(hColumnDescriptor);}
admin.createTable(hTableDescriptor);System.out.println("create table success");}close();}/**
* 删除指定表
* @param tableName 表名
* @throws IOException
*/publicstaticvoiddeleteTable(String tableName)throwsIOException{init();TableName tn =TableName.valueOf(tableName);if(admin.tableExists(tn)){
admin.disableTable(tn);
admin.deleteTable(tn);}close();}/**
* 查看已有表
* @throws IOException
*/publicstaticvoidlistTables()throwsIOException{init();HTableDescriptor hTableDescriptors[]= admin.listTables();for(HTableDescriptor hTableDescriptor :hTableDescriptors){System.out.println(hTableDescriptor.getNameAsString());}close();}/**
* 向某一行的某一列插入数据
* @param tableName 表名
* @param rowKey 行键
* @param colFamily 列族名
* @param col 列名(如果其列族下没有子列,此参数可为空)
* @param val 值
* @throws IOException
*/publicstaticvoidinsertRow(String tableName,String rowKey,String colFamily,String col,String val)throwsIOException{init();Table table = connection.getTable(TableName.valueOf(tableName));Put put =newPut(rowKey.getBytes());
put.addColumn(colFamily.getBytes(), col.getBytes(), val.getBytes());
table.put(put);
table.close();close();}/**
* 删除数据
* @param tableName 表名
* @param rowKey 行键
* @param colFamily 列族名
* @param col 列名
* @throws IOException
*/publicstaticvoiddeleteRow(String tableName,String rowKey,String colFamily,String col)throwsIOException{init();Table table = connection.getTable(TableName.valueOf(tableName));Delete delete =newDelete(rowKey.getBytes());//删除指定列族的所有数据//delete.addFamily(colFamily.getBytes());//删除指定列的数据//delete.addColumn(colFamily.getBytes(), col.getBytes());
table.delete(delete);
table.close();/**
* 根据行键rowkey查找数据
* @param tableName 表名
* @param rowKey 行键
* @param colFamily 列族名
* @param col 列名
* @throws IOException
*/close();}publicstaticvoidgetData(String tableName,String rowKey,String colFamily,String col)throwsIOException{init();Table table = connection.getTable(TableName.valueOf(tableName));Get get =newGet(rowKey.getBytes());
get.addColumn(colFamily.getBytes(),col.getBytes());Result result = table.get(get);showCell(result);
table.close();close();}/**
* 格式化输出
* @param result
*/publicstaticvoidshowCell(Result result){Cell[] cells = result.rawCells();for(Cell cell:cells){System.out.println("RowName:"+newString(CellUtil.cloneRow(cell))+" ");System.out.println("Timetamp:"+cell.getTimestamp()+" ");System.out.println("column Family:"+newString(CellUtil.cloneFamily(cell))+" ");System.out.println("row Name:"+newString(CellUtil.cloneQualifier(cell))+" ");System.out.println("value:"+newString(CellUtil.cloneValue(cell))+" ");}}}
版权归原作者 Triple.K999999 所有, 如有侵权,请联系我们删除。