Java API 开发Hbase 关于连接,创表,添加数据,扫描数据的操作(一)
通过Java API的方式对hbase进行简单的创表、插入数据、查表、查数据等操作一、1.1 通过Java API 方式开发hbase,需要构建一个Maven工程,所用到的依赖也是比较简单的,如下:本次开发所用到的依赖包。1.2 因为对hbase的连接是采用.xml文件的方式进行连接,所以要从Linux中将core-site.xml和hbase-stie.xml两个文件复制到main文件夹下的re
·
通过Java API的方式对hbase进行简单的创表、插入数据、查表、查数据等操作
一、
1.1 通过Java API 方式开发hbase,需要构建一个Maven工程,所用到的依赖也是比较简单的,如下:
本次开发所用到的依赖包。
1.2 因为对hbase的连接是采用.xml文件的方式进行连接,所以要从Linux中将core-site.xml和hbase-stie.xml两个文件复制到main文件夹下的resources文件当中,如下图:
//初始化Configuration对象
Configuration conf = null;
@Before
//每次执行一个单元测试,都会执行这个先
//初始化添加配置信息
public void init() throws URISyntaxException {
conf = HBaseConfiguration.create();
conf.addResource(new Path(ClassLoader.getSystemResource("hbase-site.xml").toURI()));
conf.addResource(new Path(ClassLoader.getSystemResource("core-site.xml").toURI()));
}
1、创建表操作
@Test
//创建表
public void createTable() throws IOException {
//连接hbase
Connection conn = ConnectionFactory.createConnection(conf);
//相当于管理者(admin)的意思,对表进行增删改查
Admin admin = conn.getAdmin();
//因为创建一张表是要有关于“表名”的描述对象,和“列族”的描述对象
//1.1取一个表名
TableName tableName = TableName.valueOf("t_user.info");
//1.2 创建表的描述对象
HTableDescriptor tableDescriptor = new HTableDescriptor(tableName);
//2.1 取第一个列族的名字
HColumnDescriptor cf1 = new HColumnDescriptor("base_info");
//2.2 取第二个列族的名字
HColumnDescriptor cf2 = new HColumnDescriptor("extra_info");
//为列族设置版本数量,最小为1,最大为3
cf1.setVersions(1,3);
cf2.setVersions(1,3);
//将列族的描述对象添加到表的描述对象中,至此创建一张表的描述对象结束
HTableDescriptor hTable = tableDescriptor.addFamily(cf1).addFamily(cf2);
//开始创表
if (admin.tableExists(tableName)){
System.out.println("此表已经存在");
}else {
admin.createTable(hTable);
System.out.println(tableName+ ":创建成功!");
}
}
2.插入数据
@Test
//插入数据---->利用ArrayList集合方式
public void putDataVersion_1() throws IOException {
Connection conn = ConnectionFactory.createConnection();
Admin admin = conn.getAdmin();
TableName tableName = TableName.valueOf("t_user.info");
//创建一个集合,用来保存添加的数据,最后通过保存好的集合,一次性将数据插入到表中
ArrayList<Put> puts = new ArrayList<>();
Table table = conn.getTable(tableName);
if (admin.tableExists(tableName)){
//设置row key 为user001
Put user001 = new Put(Bytes.toBytes("user001"));
//往列族"base_info"中添加两列数据
user001.addColumn(Bytes.toBytes("base_info"),Bytes.toBytes("username"),Bytes.toBytes("zhangman"));
user001.addColumn(Bytes.toBytes("base_info"),Bytes.toBytes("password"),Bytes.toBytes("123456"));
//设置row key 为user002
Put user002 = new Put(Bytes.toBytes("user002"));
//往列族"base_info"中添加两列数据
user002.addColumn(Bytes.toBytes("base_info"),Bytes.toBytes("username"),Bytes.toBytes("lisi"));
user002.addColumn(Bytes.toBytes("base_info"),Bytes.toBytes(" married"),Bytes.toBytes("false"));
//往集合中添加数据
puts.add(user001);
puts.add(user002);
//将集合中的数据添加到table中
table.put(puts);
System.out.println("数据添加成功");
//关闭
table.close();
conn.close();
}else {
System.out.println("您所要添加的数据表不存在Hbase中,请先创建表!");
}
}
3.查看数据库中的表
@Test
//查看数据库中数据表
public void list() throws IOException {
Connection conn = ConnectionFactory.createConnection();
Admin admin = conn.getAdmin();
System.out.println("数据库中已存在的表如下 :");
for (TableName table: admin.listTableNames()){
System.out.println(table);
}
conn.close();
}
4.扫描数据
@Test
//扫描数据
public void scanData() throws IOException {
Connection conn = ConnectionFactory.createConnection();
Admin admin = conn.getAdmin();
//拿到table的名字
TableName tableName = TableName.valueOf("t_user.info");
//拿到table对象
Table table = conn.getTable(tableName);
//获取scan对象
Scan scan = new Scan();
//获取scanner对象
ResultScanner scanner = table.getScanner(scan);
//使用迭代器遍历
Iterator<Result> iterator = scanner.iterator();
while (iterator.hasNext()){
Result next = iterator.next();
List<Cell> cells = next.listCells();
//迭代所有的cells
for (Cell c:cells){
// //获取行键
// byte[] rowArray = c.getRowArray();
// //获取列族
// byte[] familyArray = c.getFamilyArray();
// //获取列限定符
// byte[] qualifierArray = c.getQualifierArray();
// //获取列值
// byte[] valueArray = c.getValueArray();
//打印输出
System.out.println("行键:"+ Bytes.toString(CellUtil.cloneRow(c)));
System.out.print("列族:"+ Bytes.toString(CellUtil.cloneFamily(c)));
System.out.print(" 列:"+ Bytes.toString(CellUtil.cloneQualifier(c)));
System.out.println(" 值:"+ Bytes.toString(CellUtil.cloneValue(c)));
}
System.out.println("------------------");
}
//关闭资源避免浪费
table.close();
conn.close();
}
以上便是初步学习的记录过程,往能够给看此篇播客的网友提供一些思考。
更多推荐
已为社区贡献1条内容
所有评论(0)