0


实验03熟悉常用的HBase操作

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))+" ");}}}
标签: hadoop 大数据 java

本文转载自: https://blog.csdn.net/TripleK99999/article/details/127273943
版权归原作者 Triple.K999999 所有, 如有侵权,请联系我们删除。

“实验03熟悉常用的HBase操作”的评论:

还没有评论