大数据hadoop学习【11】-----根据要求,编写JAVA程序,实现对Hbase表中数据进行操作


在很多时候,在使用hbase数据库对表中数据进行操作的时候,一般我们不会使用shell命令,而是通过java编程实现对hbase数据库的访问,前几次我们学习了怎么通过java程序实现对hbase数据库建表的基本操作以及对数据的相关基本操作,本次博客,林君学长将带大家编写java程序,实现按要求操作相关表中的数据,编写成相关函数方法

  • 操作系统:ubuntuKylin-16.04
  • hadoop版本:hadoop-2.7.7
  • hbase版本:hbase-1.4.13

一、JAVA编程实现对Hbase数据库的操作

1、进行Hbase的访问及关闭访问

1)、java访问hbase数据库的操作如下:

	public static Configuration configuration;
    public static Connection connection;
    public static Admin admin;
//建立连接
    public static void init(){
        configuration  = HBaseConfiguration.create();
        configuration.set("hbase.rootdir","hdfs://localhost:9000/hbase");
        try{
            connection = ConnectionFactory.createConnection(configuration);
            admin = connection.getAdmin();
        }catch (IOException e){
            e.printStackTrace();
        }
    }

2)、java关闭访问hbase数据库的操作如下:

//关闭连接
    public static void close(){
        try{
            if(admin != null){
                admin.close();
            }
            if(null != connection){
                connection.close();
            }
        }catch (IOException e){
            e.printStackTrace();
        }
    }

2、列出HBase所有的表的相关信息,例如表名

1)、java程序如下所示:

public void listTables() throws IOException {
        init();
        HTableDescriptor hTableDescriptors[] = admin.listTables();
        for(HTableDescriptor hTableDescriptor :hTableDescriptors){
            System.out.println(hTableDescriptor.getNameAsString());
        }
        close();
    }

2)、代码说明
以上代码通过访问hbase数据库,直接列出hbase数据库中的我们创建过的所有的表的名字,并在终端打印出来!

3、在终端打印出指定的表的所有记录数据

1)、java程序如下所示:

public void getAllData(String tableName) throws IOException{
    		init();
    		Table table = connection.getTable(TableName.valueOf(tableName));
    		Scan scan = new Scan();
    		ResultScanner resutScanner = table.getScanner(scan);
    		for(Result result: resutScanner){
    			showCell(result);
    			}
    		table.close();
    		close();
	 }

2)、代码说明
以上函数通过传递一个参数,也就是表名,通过传递的表名,我们列出该表中所有的数据信息,其中showCell()函数是一个终端打印函数,将读取到的信息输出在终端,后面会给出该函数

4、向已经创建好的表添加指定的列族或列

1)、java程序如下所示:

public void insertRow(String tableName,String rowKey,String colFamily,String col) throws IOException {
        init();
        Table table = connection.getTable(TableName.valueOf(tableName));
        Put put = new Put(rowKey.getBytes());
        put.addColumn(colFamily.getBytes(), col.getBytes(), val.getBytes());
        System.out.println("数据插入成功");
        table.put(put);
        table.close();
        close();
}

2)、代码说明
上面函数需要传递的参数分别为,表名、行键、(确定是哪一行的数据),然后是列族、子列;如果该列族下没有子列,则传递参数的时候子列(col)写为空就好,如下所示:
列族有子列:
insertRow(“student1”, “chenyiyue”, “score”, “Math”)
列族没有子列:
insertRow(“student1”, “chenyiyue”, “name”, " ")

5、向已经创建好的表删除指定的列族或列

1)、java程序如下所示:

public 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.addColumn(colFamily.getBytes(), col.getBytes());
        table.delete(delete);
        System.out.println("信息已经删除");
        table.close();
        close();
    }

2)、代码说明
以上函数通过传递参数表名和行键确定删除那一行的数据,然后通过列族和子列来进行对应的删;如果列族下没有子列,那子列(col)写为空;如果有,指定下的子列,确定删除哪一个子列如:
列族下无子列:
deleteRow(“student1”, “chenyiyue”, “name”," ")
删除score列族下的子列Math:
deleteRow(“student1”, “chenyiyue”, “score”,“Math”)

6、删除指定的表中的某一行的所有数据

1)、java程序如下所示:

public void deleteLine(String tableName,String rowKey) throws IOException {
        init();
        Table table = connection.getTable(TableName.valueOf(tableName));
        Delete delete = new Delete(rowKey.getBytes());
        table.delete(delete);
        System.out.println("信息已经删除");
        table.close();
        close();
}

2)、代码说明
既然是删除表中所有的数据,那我们就需要传递表名和行键就行,然后就删除这一行的所有数据!

7、统计表的行数

1)、java程序如下所示:

public void getLong(String tableName) throws IOException{
    		init();
    		int a=0;
    		Table table=connection.getTable(TableName.valueOf(tableName));
    		Scan scan = new Scan();
    		ResultScanner resutScanner = table.getScanner(scan);
    		for(Result result: resutScanner){
    			a=a+result.size();
    			}
    		System.out.println("该表共有:"+a+"行");
    		table.close();
    		close();
    }

2)、代码说明
通过传递表名,对该表的行数进行统计,只需要依次列出表的数据,设置变量a进行统计行数据的个数,然后输出就ok!

8、清空指定的表的所有记录数据

1)、java程序如下所示:

public void deleteAll(String tableName) throws IOException {
	init();
	System.out.println("开始清空数据");
	//取得目标数据表的表明对象
	TableName tableName = TableName.valueOf(tableName);
	//设置表状态为无效
	admin.disableTable(tableName);
	//清空指定表的数据
	admin.truncateTable(tableName, true);
	System.out.println("该表数据已清空");
	close();
}

2)、代码说明
通过传递表名,对该表中的所有数据进行清空,但没有删除该表哦!

以上就是本次博客的全部内容啦,上面的操作只给出了函数哦,具体使用是需要调用这些函数使用的,小伙伴们对于函数的调用应该会吧,自己调用去吧!希望对本次博客的阅读,可以帮助大家了解到java是如何对hbase数据库进行操作的!
遇到问题的小伙伴评论区留言,林君学长看到为会大家解答的,这个学长不太冷!

陈一月的又一天编程岁月^ _ ^

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
大数据与人工智能-fy 大数据与人工智能-fy 1. 1Hadoop目前最新的版本是 [单选题] A.1.0 B.2.0 C.3.0(正确答案) D.4.0 2. 2以下哪个系统可以为计算机CPU分配资源 [单选题] A.分布式文件存储系统(HDFS) B.分布式计算框架(MapReduce) C.分布式资源调度系统(Yarn)(正确答案) D.数据处理方法(DPW) 3. 以下哪个组成不属于Yarn [单选题] A.ResourceManager B.NodeManager C.ApplicationManager D.Spark(正确答案) 4. Hive针对内部和外部的区别是 [单选题] A.创建内部的同时,会将数据挪到数据仓库指定的位置(正确答案) B.删除内部时只删除源数据 C.创建内部时,只记录数据指定的路径 D.删除外部时删除表中数据和源数据 大数据与人工智能-fy全文共22页,当前为第1页。 大数据与人工智能-fy全文共22页,当前为第1页。 5. 以下属于引入ZooKeeper的理由是 [单选题] A.分布式系统需要统一管理(正确答案) B.MapReduce代码开发效率低下 C.使用SQL进行数据分析效率更高 D.大数据50%为报类业务,需要仓库类大数据工具 6. 下列关于ZooKeeper集群原理的介绍,不正确的是 [单选题] A.由多个ZooKeeper SEVER组成的集群环境 B.包含一个Leader和多个Follower C.每个sever保存一个数据副本、全局数据一致 D.不采用分布式读写机制(正确答案) 7. 以下关于Hbase的说法正确的是 [单选题] A.Hbase是分布式场景中可以实时读写数据的分布式数据库(正确答案) B.包含一个Leader和多个Follower C.创建内部时,只记录数据指定的路径 D.比较适合存储视频文件 8. 关于Redis说法不正确的是 [单选题] A.Redis没有字段的概念,所以在数据查询上功能比较弱,支持的特性比较简单。这点是不如MongoDB的 B.Redis单个value的最大容量可达1GB,不支持单个Value比较大的情况 C.内存依赖比较高。由于Redis本质上是一个内存数据库,所以内存硬件的容量大小直接决定了Redis可用的数据库间 D.比较适合存储视频文件(正确答案) 大数据与人工智能-fy全文共22页,当前为第2页。9. 关于Redis说法不正确的是 [单选题] 大数据与人工智能-fy全文共22页,当前为第2页。 A.使用C语言编写(正确答案) B.比较适用于计数场景 C.所有数据都在内存中,高速读写 D.支持存储的value类型相对更多,包括string(字符串)、list(链)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型) 答案解析:使用开源C语言编写 10. 以下哪个不属于Redis三大架构 [单选题] A.主从复制架构 B.Sentinel架构 C.集群架构 D.实时数据计算架构(正确答案) 11. 关于HDFS的说法不正确的是 [单选题] A.是JAVA实现的、分布式的、可横向扩展的文件系统 B.支持数据切块,目的是提升文件的读取效率 C.数据切块后默认大小为256M(正确答案) D.有副本机制 答案解析:为128M 12. Yarn是从Hadoop的哪个版本出现的 [单选题] A.1.0 B.2.0(正确答案) C.3.0 D.4.0 大数据与人工智能-fy全文共22页,当前为第3页。13. 下列哪项不属于引入Hive的原因 [单选题] 大数据与人工智能-fy全文共22页,当前为第3页。 A.MapReduce代码开发效率低下 B.使用SQL进行数据分析效率更高 C.大数据50%为报类业务,需要仓库类大数据工具 D.Hive更简单(正确答案) 14. 关于Hive和RDBMS说法不正确的是 [单选题] A.Hive使用HQL查询语言 B.Hive使用HDFS进行数据存储 C.RDBS数据规模较大(正确答案) D.Hive硬件配置要求一般,RDBMS要求较高 答案解析:规模较小 15. 关于ZooKeeper的说法不正确是 [单选题] A.采用层次化的数据结构 B.采用类似于LINUX命令进行数据访问 C.具备临时节点和永久节点 D.永久节点会随客户端会话的结束而结束其生命周期(正确答案) 答案解析:临时节点 16. 关于Hbase说法不正确的是 [单选题] A.Table中包含多个region B.region会随着数据的增大而分裂 C.region分裂时,数据不能访问 D.行的一次读写不是原子操作(正确答案) 答案解析:是原子操作 大数据与人工智能-fy全文共22

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈一月的编程岁月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值