Hadoop基础学习十六(hbase的版本号,java连接)

it2026-08-13  10

文章目录

一、命名空间1)创建命名空间2)查看全部namespace3)指定表的namespace 二、版本号过期时间 三、java连接hbase获取表数据对表的操作1)创建表2)向表中插入数据3)查询数据4)全表扫描5)删除表 练习,边读边写数据

一、命名空间

主要用于分配操作权限,相当于数据库中库的概念,默认为default

1)创建命名空间

create_namespace "hehe"

2)查看全部namespace

list_namespace

3)指定表的namespace

在浏览器中也能查看

二、版本号

同一个列的数据,可能会插入多次,每次查询出现的是最新的,但是之前的也可以通过时间戳来查看获取,即版本号, 默认使用当前系统时间戳作为版本号

创建一个表如果不指定的话默认为1,就是当前只能查找的最新的 将表中插入数据,同一列给两次值 发现每次只能获取最新的,如果想要获取之前的,可以通过设置多个版本号的方式

创建一个版本号为5的表

创建多版本表 NAME: 列簇的名 VERSIONS;保存最新几个版本的数据,默认是当前系统时间 观察test和test2 VERSIONS => 5 为查看最新五个版本的数据,会发现版本号为1的只显示一条,版本号为5的显示两条 版本号为1的test 版本号为5的test2 不管是版本号为几的数据,不显示的旧数据并没有删除,只是做了标记,在切分和并的时候,才会被删除,没删除之前依旧可以通过指定版本号查询到旧数据 多插入一些数据,扫描观察

由于建表时,指定版本号为5,故扫描时只显示最新五条,且最新的在最上面,按自然降序的顺序排列

过期时间

创建一个表,表中数据过期时间为5秒,默认不指定为永远不过期 快速插入两条数据 扫描全表 可以发现,5秒之后数据没有了,此时数据也不是删除,只是做了标记,在spit切分的时候才会删除

三、java连接hbase

首先加入hbase的依赖

<!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase-client --> <dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-client</artifactId> <version>1.4.6</version> </dependency>

获取表数据

代码演示

import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.client.*; import org.apache.hadoop.hbase.util.Bytes; import java.io.IOException; public class Hbase_Demo1 { public static void main(String[] args) throws IOException { //获取配置 Configuration conf = new Configuration(); //此处用的伪分布式,给一个master即可,注意Windows中要有到master的映射 //指定zk的链接地址 conf.set("hbase.zookeeper.quorum","master"); //建立连接 Connection conn = ConnectionFactory.createConnection(conf); //获取表对象 TableName tableName = TableName.valueOf("hehe:test"); Table table = conn.getTable(tableName); Get get = new Get("001".getBytes()); Result result = table.get(get); byte[] value = result.getValue("info".getBytes(), "name".getBytes()); System.out.println(Bytes.toString(value)); conn.close(); } }

对表的操作

这里为了方便测试,增加junit的依赖

<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.5</version> </dependency>

代码演示

1)创建表

import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HColumnDescriptor; import org.apache.hadoop.hbase.HTableDescriptor; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.client.Admin; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.client.ConnectionFactory; import org.junit.After; import org.junit.Before; import org.junit.Test; import java.io.IOException; public class Hbase_Demo2 { Connection conn; @Before public void init(){ //获取配置,指定zk的连接地址 Configuration conf = new Configuration(); conf.set("hbase.zookeeper.quorum","master"); try { conn = ConnectionFactory.createConnection(conf); System.out.println("连接创建成功"); } catch (IOException e) { e.printStackTrace(); } } @Test public void createtable(){ try { //获取管理对象和Hmaster建立连接 Admin admin = conn.getAdmin(); //创建表描述对象,指明表的名称 HTableDescriptor hTableDescriptor = new HTableDescriptor(TableName.valueOf("javatest")); //增加列族 HColumnDescriptor hColumnDescriptor = new HColumnDescriptor("info".getBytes()); //可以调用各种方法设置列族的属性 //版本号的范围 hColumnDescriptor.setVersions(1,10); hTableDescriptor.addFamily(hColumnDescriptor); //创建表 admin.createTable(hTableDescriptor); } catch (IOException e) { e.printStackTrace(); } } @After public void closeConn(){ try { conn.close(); } catch (IOException e) { e.printStackTrace(); } } }

2)向表中插入数据

直接在原先的基础上,测试

@Test public void putData() throws IOException { //获取表对象,对regionServer建立连接 Table table = conn.getTable(TableName.valueOf("javatest")); //创建要put的对象,指明rowkey Put put = new Put("001".getBytes()); //指明所属列族、列和值 put.addColumn("info".getBytes(),"name".getBytes(),"张三".getBytes()); //在一行中,put多个列的值 put.addColumn("info".getBytes(),"age".getBytes(),"19".getBytes()); //put数据 table.put(put); //断开与regionServer的连接 table.close(); }

3)查询数据

@Test public void getData() throws IOException { Table table = conn.getTable(TableName.valueOf("javatest")); //创建get对象,指明要获取的列 Get get = new Get("001".getBytes()); //执行get,获得结果 Result result = table.get(get); //对结果进行解析,输出 byte[] name = result.getValue("info".getBytes(), "name".getBytes()); byte[] age = result.getValue("info".getBytes(), "age".getBytes()); System.out.println(Bytes.toString(name)+"===>"+Bytes.toString(age)); }

4)全表扫描

通过put方法多添几行数据,易于观察

@Test public void scan() throws IOException { Table table = conn.getTable(TableName.valueOf("javatest")); Scan scan = new Scan(); //可以调用scan的方法,设置扫描范围,这里不设置,直接全表扫描 //scan.setLimit(10); //scan.withStartRow("001".getBytes()); //scan.withStopRow("0010".getBytes()); ResultScanner scanner = table.getScanner(scan); Result result; while ((result=scanner.next())!=null){ byte[] name = result.getValue("info".getBytes(), "name".getBytes()); byte[] age = result.getValue("info".getBytes(), "age".getBytes()); //获取当前行号 byte[] row = result.getRow(); System.out.println(Bytes.toString(row)+","+Bytes.toString(name)+","+Bytes.toString(age)); } }

5)删除表

@Test public void drop() throws IOException { //获取管理对象,和hMaster建立链接 Admin admin = conn.getAdmin(); //禁用表 admin.disableTable(TableName.valueOf("javatest")); //删除表 admin.deleteTable(TableName.valueOf("javatest")); }

练习,边读边写数据

需求:将该文件信息写入到hbase上 要读取的数据格式

import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.client.ConnectionFactory; import org.apache.hadoop.hbase.client.Put; import org.apache.hadoop.hbase.client.Table; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class Hbase_Demo3 { public static void main(String[] args) throws IOException { Configuration conf = new Configuration(); conf.set("hbase.zookeeper.quorum","master"); Connection conn= ConnectionFactory.createConnection(conf); Table table = conn.getTable(TableName.valueOf("hehe:test")); FileReader fr = new FileReader("E:\\IdeaProjects\\javaproject\\redis\\data\\students.txt"); BufferedReader br = new BufferedReader(fr); String line; while ((line=br.readLine())!=null){ String[] split = line.split(","); String id = split[0]; String name = split[1]; String age = split[2]; String sex = split[3]; String clazz = split[4]; Put put = new Put(id.getBytes()); put.addColumn("info".getBytes(),"name".getBytes(),name.getBytes()); put.addColumn("info".getBytes(),"age".getBytes(),age.getBytes()); put.addColumn("info".getBytes(),"sex".getBytes(),sex.getBytes()); put.addColumn("info".getBytes(),"clazz".getBytes(),clazz.getBytes()); table.put(put); } System.out.println("插入完成"); br.close(); conn.close(); } }

java java入门基础学习(一) java入门基础学习(二) java入门基础学习(三) java入门基础学习(四) java入门基础学习(五) java入门基础学习(六) java入门基础学习(七) java入门基础学习(八) java入门基础学习(九) java入门基础学习(十) java入门基础学习(十一) java入门基础学习(十二) java入门基础学习(十三) java入门基础学习(十四)Maven Git java总结,题目+笔记 java进阶之常见对象(一) java进阶之常见对象(二) java进阶之冒泡排序 java进阶之选择排序 java进阶之面向对象(封装) java进阶之面向对象(代码块、继承) java进阶之面向对象(多态、抽象、接口) java进阶之匿名内部类、访问修饰符、包 java进阶之io流(字节流,字符流) java应用一(反射的应用) java应用二(配置文件、工具类) java应用三(数据库索引、spring) java应用四(连接池) Linux Linux基础一 Linux基础二 Linux基础三 Linux基础四 Linux基础五 Mysql mysql一 mysql二 mysql三 mysql四 java连接数据库 redis redis一(缓存,redis简介) redis二(单节点安装,桌面插件) redis三(指令的使用) redis四(java与redis的连接,基本指令在java中的操作) redis五(练习) redis七(持久化) redis九(集群安装) Hadoop hadoop学习一 hadoop学习二 hadoop学习三 hadoop学习四 hadoop学习五 hadoop学习六 hadoop学习七 hadoop学习八 hadoop异常处理 hadoop基础学习九 hadoop基础学习十 hadoop基础学习十一 hadoop基础学习十二 hadoop基础学习十三 hadoop基础学习十四 hadoop基础学习十五

最新回复(0)