首先通过docker安装Hbase
docker search hbase docker pull harisekhon/hbase
启动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
访问hbase
访问localhost:16010
hbase命令行操作
docker exec -it hbase001 bash hbase shell
如上命令操作之后我们就进入了hbase的命令行操作模式:
下面,我们创建一个namespace为default,表名为test,列族column family为cf的表: create ‘test’,’cf’ 通过list命令可以查看所有的表:list
- 删除表:先disable,再drop
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 命令,用于查看表的某一行数据
- 修改数据同样也是put操作
比如将行键为 2015003 的学生 age 改为 25:put 'student','2015003','age','25'
如上是命令行的一些基本操作,详细操作可以查看官网:
下面是通过java api的方式操作hbase
- 添加maven依赖
<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;
}
}
031 membrane expression of GPII IIIa on resting platelets 0
The AI will prevent some of that testosterone from converting into estrogen
For immunohistochemistry, the tumor sample may be fresh or frozen or may be embedded in paraffin and fixed with a preservative such as formalin, for example
In theory, significantly reduced intrafolliular estrogen concentrations may impact on oocyte quality which may affect IVF outcomes