创建目录
在 hadoop1 服务器执行下面命令
创建工程目录:
mkdir /program/hbase-project
cd /program/hbase-project
在根目录下创建test目录:
mkdir test
进入test目录:
cd test
创建bin目录:
mkdir bin
创建src目录:
mkdir src
Java 代码
在 src 目录下创建 HBaseTest.java 文件
cd src
编辑文件:
vim HBaseTest.java
复制粘贴下面内容:
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
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 HBaseCRUD {
private Connection conn;
public static void main(String[] args) {
HBaseCRUD h = new HBaseCRUD();
try {
h.conn();
h.createTable("test_hbase");
h.insertData("test_hbase");
h.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
/**
* 创建hbase连接
* @throws IOException
*/
public void conn() throws IOException {
//创建hbase配置对象
Configuration conf= HBaseConfiguration.create();
//通过配置对象创建连接
conn = ConnectionFactory.createConnection(conf);
}
public void createTable(String table) throws IOException{
TableName tableName = TableName.valueOf(table);
//创建admin对象
Admin admin = conn.getAdmin();
if(admin.tableExists(tableName)){
System.out.println("表已存在");
return;
}
//创建表描述构造器,创建表时,可以设置很多配置
TableDescriptorBuilder tableDescriptorBuilder = TableDescriptorBuilder.newBuilder(tableName);
//创建列族描述构造器,创建表时,可以设置很多配置
ColumnFamilyDescriptorBuilder cfdb = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("column1"));
ColumnFamilyDescriptorBuilder cfdb2 = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("column2"));
ColumnFamilyDescriptorBuilder cfdb3 = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("column3"));
//创建列族描述对象
ColumnFamilyDescriptor cfd = cfdb.build();
//将列族描述对象传入表描述构造器
tableDescriptorBuilder.setColumnFamily(cfd);
tableDescriptorBuilder.setColumnFamily(cfdb2.build());
tableDescriptorBuilder.setColumnFamily(cfdb3.build());
//创建列族描述对象
TableDescriptor td = tableDescriptorBuilder.build();
//创建表
admin.createTable(td);
System.out.println("表" + tableName + "创建成功!");
admin.close();
}
public void insertData(String tableName) throws IOException {
//获取table对象
Table table = conn.getTable(TableName.valueOf(tableName));
//创建put对象,对应put命令,封装rowkey、列族、列名、列值
Put put = new Put(Bytes.toBytes("112233bbbcccc"));
// 这里没有指定key
put.addColumn(Bytes.toBytes("column1"),null,Bytes.toBytes("aaa"));
put.addColumn(Bytes.toBytes("column2"),null,Bytes.toBytes("bbb"));
put.addColumn(Bytes.toBytes("column3"),null,Bytes.toBytes("ccc"));
//执行put命令
table.put(put);
//关闭table
table.close();
System.out.println("插入数据成功!");
}
public void close() throws IOException {
conn.close();
}
}
编译代码
进入 test 目录下:
cd /program/hbase-project/test
编译命令:
javac -encoding utf-8 -d bin -cp .:/program/hadoop-3.0.3/share/hadoop/common/lib/*:/program/hbase-2.1.9/lib/* src/HBaseCRUD.java
运行程序
进入 test 目录下:
cd /program/hbase-project/test
运行命令:
java -cp bin:/program/hadoop-3.0.3/share/hadoop/common/lib/*:/program/hbase-2.1.9/lib/* HBaseCRUD
显示如下,表示成功:
查看数据
scan 'test_hbase'
