docker search hbase docker pull harisekhon/hbase
docker run -d -p 2181:2181 -p 8080:8080 -p 8085:8085 -p 9090:9090 -p 9095:9095 -p 16000:16000 -p 16010:16010 -p 16201:16201 -p 16301:16301 -p 16030:16030 -p 16020:16020 --name hbase001 harisekhon/hbase
访问localhost:16010
docker exec -it hbase001 bash hbase shell
如上命令操作之后我们就进入了hbase的命令行操作模式:
下面,我们创建一个namespace为default,表名为test,列族column family为cf的表: create ‘test’,’cf’ 通过list命令可以查看所有的表:list
disable 'test'
drop 'test'
put 'test','1','cf:name','flume'
put 'test','1','cf:age','18'
put 'test','2','cf:name','hbase'
put 'test','2','cf:age','20'
put 'test','3','cf:name','hadoop'
put 'test','3','cf:age','22'
put 'test','11','cf:name','spark'
put 'test','11','cf:age','24'
put 'test','21','cf:name','hive'
put 'test','21','cf:age','30'
deleteall 'test','3'; -- 删除该rowkey下的所有数据
delete 'test','3','cf:name' -- 删除某一cell的数据
HBase中有两个用于查看数据的命令:
1. scan 命令,用于查看某个表的全部数据;
2. get 命令,用于查看表的某一行数据
比如将行键为 2015003 的学生 age 改为 25:put 'student','2015003','age','25'
如上是命令行的一些基本操作,详细操作可以查看官网:
http://abloz.com/hbase/book.html
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-client</artifactId>
<version>2.1.3</version>
</dependency>
测试工具栏如下:
package com.example.redisiondemo.utils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.util.Bytes;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class HbaseTest {
private static Admin admin;
private static final String COLUMNS_FAMILY_1 = "cf1";
private static final String COLUMNS_FAMILY_2 = "cf2";
public static Connection initHbase() throws IOException {
Configuration configuration = HBaseConfiguration.create();
configuration.set("hbase.zookeeper.quorum", "127.0.0.1");
configuration.set("hbase.zookeeper.property.clientPort", "2181");
configuration.set("hbase.master", "127.0.0.1:16010");
Connection connection = ConnectionFactory.createConnection(configuration);
return connection;
}
//创建表 create
public static void createTable(TableName tableName, String[] cols) throws IOException {
admin = initHbase().getAdmin();
if (admin.tableExists(tableName)) {
System.out.println("Table Already Exists!");
} else {
HTableDescriptor hTableDescriptor = new HTableDescriptor(tableName);
for (String col : cols) {
HColumnDescriptor hColumnDescriptor = new HColumnDescriptor(col);
hTableDescriptor.addFamily(hColumnDescriptor);
}
admin.createTable(hTableDescriptor);
System.out.println("Table Create Successful");
}
}
public static TableName getTbName(String tableName) {
return TableName.valueOf(tableName);
}
// 删除表 drop
public static void deleteTable(TableName tableName) throws IOException {
admin = initHbase().getAdmin();
if (admin.tableExists(tableName)) {
admin.disableTable(tableName);
admin.deleteTable(tableName);
System.out.println("Table Delete Successful");
} else {
System.out.println("Table does not exist!");
}
}
//put 插入数据
public static void insertData(TableName tableName, Student student) throws IOException {
Put put = new Put(Bytes.toBytes(student.getId()));
put.addColumn(Bytes.toBytes(COLUMNS_FAMILY_1), Bytes.toBytes("name"), Bytes.toBytes(student.getName()));
put.addColumn(Bytes.toBytes(COLUMNS_FAMILY_1), Bytes.toBytes("age"), Bytes.toBytes(student.getAge()));
initHbase().getTable(tableName).put(put);
System.out.println("Data insert success:" + student.toString());
}
// delete 删除数据
public static void deleteData(TableName tableName, String rowKey) throws IOException {
Delete delete = new Delete(Bytes.toBytes(rowKey)); // 指定rowKey
// delete = delete.addColumn(Bytes.toBytes(COLUMNS_FAMILY_1), Bytes.toBytes("name")); // 指定column,也可以不指定,删除该rowKey的所有column
initHbase().getTable(tableName).delete(delete);
System.out.println("Delete Success");
}
// scan数据
public static List<Student> allScan(TableName tableName) throws IOException {
ResultScanner results = initHbase().getTable(tableName).getScanner(new Scan().addFamily(Bytes.toBytes("cf1")));
List<String> list = new ArrayList<>();
for (Result result : results) {
Student student = new Student();
for (Cell cell : result.rawCells()) {
String colName = Bytes.toString(cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength());
String value = Bytes.toString(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength());
}
}
return null;
}
// 根据rowkey get数据
public static Student singleGet(TableName tableName, String rowKey) throws IOException {
Student student = new Student();
student.setId(rowKey);
Get get = new Get(Bytes.toBytes(rowKey));
if (!get.isCheckExistenceOnly()) {
Result result = initHbase().getTable(tableName).get(get);
for (Cell cell : result.rawCells()) {
String colName = Bytes.toString(cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength());
String value = Bytes.toString(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength());
switch (colName) {
case "name":
student.setName(value);
break;
case "age":
student.setAge(value);
break;
default:
System.out.println("unknown columns");
}
}
}
System.out.println(student.toString());
return student;
}
// 查询指定Cell数据
public static String getCell(TableName tableName, String rowKey, String cf, String column) throws IOException {
Get get = new Get(Bytes.toBytes(rowKey));
String rst = null;
if (!get.isCheckExistenceOnly()) {
get = get.addColumn(Bytes.toBytes(cf), Bytes.toBytes(column));
try {
Result result = initHbase().getTable(tableName).get(get);
byte[] resByte = result.getValue(Bytes.toBytes(cf), Bytes.toBytes(column));
rst = Bytes.toString(resByte);
} catch (Exception exception) {
System.out.printf("columnFamily or column does not exists");
}
}
System.out.println("Value is: " + rst);
return rst;
}
public static void main(String[] args) throws IOException{
Student student = new Student();
student.setId("1");
student.setName("hzp");
student.setAge("18");
String table = "student";
// createTable(getTbName(table), new String[]{COLUMNS_FAMILY_1, COLUMNS_FAMILY_2});
// deleteTable(getTbName(table));
insertData(getTbName(table), student);
// deleteData(getTbName(table), "1");
// singleGet(getTbName(table), "2");
// getCell(getTbName(table), "1", "cf1", "name");
}
}
student实体
package com.example.redisiondemo.utils;
public class Student {
private String id;
private String name;
private String age;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
@Override
public String toString() {
return "Student{" +
"id='" + id + ''' +
", name='" + name + ''' +
", age='" + age + ''' +
'}';
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}