• Java API 操作HBase Shell


    HBase Shell API 操作

    创建工程

    本实验的环境实在ubuntu18.04下完成,首先在改虚拟机中安装开发工具eclipse。

    然后创建Java项目名字叫hbase-test

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    配置运行环境

    在src下创建HBaseDemo类
    在这里插入图片描述
    然后编写init方法和close方法,一个创建与HBASE的连接,一个关闭连接。

    /**
    	 * 创建连接返回admin
    	 */
    	public static void init() {
    		configuration = HBaseConfiguration.create();
    		configuration.set("hbase.rootdir", "file:///usr/local/hbase/hbase-tmp");
    		// configuration.set("hbase.zookeeper.quorum", "hadoop02");
    		try {
    			connection = ConnectionFactory.createConnection(configuration);
    			admin = connection.getAdmin();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    
    	/**
    	 * 连接关闭
    	 */
    	public static void close() {
    		try {
    			if (admin != null) {
    				admin.close();
    			}
    			if (null != connection) {
    				connection.close();
    			}
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    
    

    建表操作

    	/**
    	 * 创建表方法
    	 * 
    	 * @param myTableName
    	 * @param colFamily
    	 * @throws IOException
    	 */
    	public static void createTable(String myTableName, String[] colFamily) throws IOException {
    		TableName tableName = TableName.valueOf(myTableName);
    		if (admin.tableExists(tableName)) {
    			System.out.println("talbe is exists!");
    		} else {
    			TableDescriptorBuilder tableDescriptor = TableDescriptorBuilder.newBuilder(tableName);
    			for (String str : colFamily) {
    				ColumnFamilyDescriptor family = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes(str)).build();
    				tableDescriptor.setColumnFamily(family);
    			}
    			admin.createTable(tableDescriptor.build());
    		}
    	}
    

    测试:创建student表,列族有score

    	public static void main(String[] args) throws IOException {
    		init();
    		System.out.print("==================分割线===================");
    		//创建student表
    		  createTable("student",new String[]{"score"});
    		 
    		close();
    	}
    

    查看执行结果

    在这里插入图片描述

    查看现有表的名称

    	 /**
         * 查看已有表
         * @throws IOException
         */
        public static void listTables() throws IOException {
            init();
            HTableDescriptor hTableDescriptors[] = admin.listTables();
            for(HTableDescriptor hTableDescriptor :hTableDescriptors){
                System.out.println(hTableDescriptor.getNameAsString());
            }
            close();
         }
    

    测试:

    public static void main(String[] args) throws IOException {
    		init();
    		System.out.println("==================分割线===================");
    		listTables();
    		System.out.println("==================分割线===================");
    		close();
    	}
    

    删除表操作

    代码:

    	/**
         * 删除指定表
         * @param tableName 表名
         * @throws IOException
         */
        public static void deleteTable(String tableName) throws IOException {
            init();
            TableName tn = TableName.valueOf(tableName);
            if (admin.tableExists(tn)) {
                admin.disableTable(tn);
                admin.deleteTable(tn);
            }
            close();
    }
    

    测试:

    public static void main(String[] args) throws IOException {
    		init();
    		System.out.println("==================分割线===================");
    		deleteTable("student");
    		System.out.println("==================分割线===================");
    		close();
    	}
    

    结果
    在这里插入图片描述

    删除指定列操作

    代码

        /**
         * 删除指定列数据
         * @param tableName 表名
         * @param rowKey 行键
         * @param colFamily 列族名
         * @param col 列名
         * @throws IOException
         */
        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());
            //删除指定列族的所有数据
            //delete.addFamily(colFamily.getBytes());
            //删除指定列的数据
            delete.addColumn(colFamily.getBytes(), col.getBytes());
     
            table.delete(delete);
            table.close();
            close();
    }
    

    测试

    public static void main(String[] args) throws IOException {
    		init();
    		System.out.println("==================分割线===================");
    		deleteRow("student", "zhangsan", "score", "Math");
    		System.out.println("==================分割线===================");
    		close();
    	}
    

    结果 zhangsan行,score列族中的Math列被删除

    添加数据

    	/**
    	 * 向指定表中插入数据
    	 * 
    	 * @param tableName
    	 * @param rowKey
    	 * @param colFamily
    	 * @param col
    	 * @param val
    	 * @throws IOException
    	 */
    	public static void insertData(String tableName, String rowKey, String colFamily, String col, String val)
    			throws IOException {
    		Table 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();
    	}
    

    向student表中添加三条数据,分别是zhangsan的英语成绩,数学成绩和计算机成绩。

    	public static void main(String[] args) throws IOException {
    		init();
    		System.out.print("==================分割线===================");
    		 
    		  //插入三条数据
    		  insertData("student","zhangsan","score","English","69");
    		  insertData("student","zhangsan","score","Math","86");
    		  insertData("student","zhangsan","score","Computer","77");
    		 
    		close();
    	}
    

    测试结果
    在这里插入图片描述

    查看数据

    /**
    	 * 获取指定表中ceil数据
    	 * 
    	 * @param tableName
    	 * @param rowKey
    	 * @param colFamily
    	 * @param col
    	 * @throws IOException
    	 */
    	public static void getData(String tableName, String rowKey, String colFamily, String col) throws IOException {
    		Table table = connection.getTable(TableName.valueOf(tableName));
    		Get get = new Get(rowKey.getBytes());
    		get.addColumn(colFamily.getBytes(), col.getBytes());
    		Result result = table.get(get);
    		System.out.println(tableName+"表,"+colFamily+"列族,"+col+"的值是:"+new String(result.getValue(colFamily.getBytes(), col == null ? null : col.getBytes())));
    		table.close();
    	}
    

    查看张三英语的 成绩

    	public static void main(String[] args) throws IOException {
    		init();
    		System.out.println("==================分割线===================");
    		
    		  getData("student","zhangsan", "score","English");
    		 
    		close();
    	}
    

    控制台输出结果:
    在这里插入图片描述

  • 相关阅读:
    GCD的常用代码块
    多用字面量语法,少用与之等价的方法
    新建项目上下出现黑色块
    按钮UIButton的使用
    集成支付宝
    app生命周期之即将关闭
    苹果开发者计划申请材料准备(公司级)
    真机调试的一些问题记录~更新中
    iOS开发架构学习记录
    用枚举值表示状态、选项、状态码
  • 原文地址:https://www.cnblogs.com/itjiangpo/p/14181360.html
Copyright © 2020-2023  润新知