环境
- JDK1.8
- IntelliJIDEA
- maven3.6.1
- hadoop-cdh5.14.0
- zookeeper-3.4.5-cdh5.14.0
- hbase-1.2.0-cdh5.14.0
准备POM文件
<repositories>
<repository>
<id>cloudera</id>
<url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.6.0-mr1-cdh5.14.0</version>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-client</artifactId>
<version>1.2.0-cdh5.14.0</version>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-server</artifactId>
<version>1.2.0-cdh5.14.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.14.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
<!-- <verbal>true</verbal>-->
</configuration>
</plugin>
<!--将我们其他用到的一些jar包全部都打包进来 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<minimizeJar>false</minimizeJar>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
@Test//创建一个表
public void createTable() throws IOException {
//获取连接
Configuration conf = new Configuration();
conf.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");
Connection connection = ConnectionFactory.createConnection(conf);
//实例 admin 管理员对象 创建或删除hbase表会用得到
Admin admin = connection.getAdmin();
//实例表名和表结构
//表名
TableName myuser = TableName.valueOf("myuser");
//设置表结构
HTableDescriptor hTableDescriptor = new HTableDescriptor(myuser);
/*设置列族*/
HColumnDescriptor hColumnDescriptor1 = new HColumnDescriptor("f1");
HColumnDescriptor hColumnDescriptor2 = new HColumnDescriptor("f2");
//设置表与列族之间的关系
hTableDescriptor.addFamily(hColumnDescriptor1);
hTableDescriptor.addFamily(hColumnDescriptor2);
/*执行创建表*/
admin.createTable(hTableDescriptor);
/*关闭资源*/
admin.close();
connection.close();
}
@Test//添加一条数据
public void putdata() throws IOException {
/*实例化一个配置对象 并设置连接zookeeper*/
Configuration conf = new Configuration();
conf.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");
Connection connection = ConnectionFactory.createConnection(conf);
//选择要操作的表
Table myuser = connection.getTable(TableName.valueOf("myuser"));
/*创建一个put 对象并准备数据*/
Put f1 = new Put("001".getBytes());
f1.addColumn("f1".getBytes(), "id".getBytes(), Bytes.toBytes(1));
f1.addColumn("f1".getBytes(), "name".getBytes(), Bytes.toBytes("张三"));
f1.addColumn("f1".getBytes(), "age".getBytes(), Bytes.toBytes(18));
f1.addColumn("f2".getBytes(), "address".getBytes(), Bytes.toBytes("地球人"));
f1.addColumn("f2".getBytes(), "phone".getBytes(), Bytes.toBytes("15874102589"));
/*插入数据*/
myuser.put(f1);
/*关闭资源*/
connection.close();
}
@Test//添加多条数据
public void putdatas() throws IOException {
//设置获取连接
Configuration conf = new Configuration();
conf.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");
Connection connection = ConnectionFactory.createConnection(conf);
//设置添加数据到那个表
Table myuser = connection.getTable(TableName.valueOf("myuser"));
//准备数据
Put put = new Put("0002".getBytes());
put.addColumn("f1".getBytes(), "id".getBytes(), Bytes.toBytes(1));
put.addColumn("f1".getBytes(), "name".getBytes(), Bytes.toBytes("曹操"));
put.addColumn("f1".getBytes(), "age".getBytes(), Bytes.toBytes(30));
put.addColumn("f2".getBytes(), "sex".getBytes(), Bytes.toBytes("1"));
put.addColumn("f2".getBytes(), "address".getBytes(), Bytes.toBytes("沛国谯县"));
put.addColumn("f2".getBytes(), "phone".getBytes(), Bytes.toBytes("16888888888"));
put.addColumn("f2".getBytes(), "say".getBytes(), Bytes.toBytes("helloworld"));
Put put2 = new Put("0003".getBytes());
put2.addColumn("f1".getBytes(), "id".getBytes(), Bytes.toBytes(2));
put2.addColumn("f1".getBytes(), "name".getBytes(), Bytes.toBytes("刘备"));
put2.addColumn("f1".getBytes(), "age".getBytes(), Bytes.toBytes(32));
put2.addColumn("f2".getBytes(), "sex".getBytes(), Bytes.toBytes("1"));
put2.addColumn("f2".getBytes(), "address".getBytes(), Bytes.toBytes("幽州涿郡涿县"));
put2.addColumn("f2".getBytes(), "phone".getBytes(), Bytes.toBytes("17888888888"));
put2.addColumn("f2".getBytes(), "say".getBytes(), Bytes.toBytes("talk is cheap , show me the code"));
Put put3 = new Put("0004".getBytes());
put3.addColumn("f1".getBytes(), "id".getBytes(), Bytes.toBytes(3));
put3.addColumn("f1".getBytes(), "name".getBytes(), Bytes.toBytes("孙权"));
put3.addColumn("f1".getBytes(), "age".getBytes(), Bytes.toBytes(35));
put3.addColumn("f2".getBytes(), "sex".getBytes(), Bytes.toBytes("1"));
put3.addColumn("f2".getBytes(), "address".getBytes(), Bytes.toBytes("下邳"));
put3.addColumn("f2".getBytes(), "phone".getBytes(), Bytes.toBytes("12888888888"));
put3.addColumn("f2".getBytes(), "say".getBytes(), Bytes.toBytes("what are you 弄啥嘞!"));
Put put4 = new Put("0005".getBytes());
put4.addColumn("f1".getBytes(), "id".getBytes(), Bytes.toBytes(4));
put4.addColumn("f1".getBytes(), "name".getBytes(), Bytes.toBytes("诸葛亮"));
put4.addColumn("f1".getBytes(), "age".getBytes(), Bytes.toBytes(28));
put4.addColumn("f2".getBytes(), "sex".getBytes(), Bytes.toBytes("1"));
put4.addColumn("f2".getBytes(), "address".getBytes(), Bytes.toBytes("四川隆中"));
put4.addColumn("f2".getBytes(), "phone".getBytes(), Bytes.toBytes("14888888888"));
put4.addColumn("f2".getBytes(), "say".getBytes(), Bytes.toBytes("出师表你背了嘛"));
Put put5 = new Put("0005".getBytes());
put5.addColumn("f1".getBytes(), "id".getBytes(), Bytes.toBytes(5));
put5.addColumn("f1".getBytes(), "name".getBytes(), Bytes.toBytes("司马懿"));
put5.addColumn("f1".getBytes(), "age".getBytes(), Bytes.toBytes(27));
put5.addColumn("f2".getBytes(), "sex".getBytes(), Bytes.toBytes("1"));
put5.addColumn("f2".getBytes(), "address".getBytes(), Bytes.toBytes("哪里人有待考究"));
put5.addColumn("f2".getBytes(), "phone".getBytes(), Bytes.toBytes("15888888888"));
put5.addColumn("f2".getBytes(), "say".getBytes(), Bytes.toBytes("跟诸葛亮死掐"));
Put put6 = new Put("0006".getBytes());
put6.addColumn("f1".getBytes(), "id".getBytes(), Bytes.toBytes(5));
put6.addColumn("f1".getBytes(), "name".getBytes(), Bytes.toBytes("xiaobubu—吕布"));
put6.addColumn("f1".getBytes(), "age".getBytes(), Bytes.toBytes(28));
put6.addColumn("f2".getBytes(), "sex".getBytes(), Bytes.toBytes("1"));
put6.addColumn("f2".getBytes(), "address".getBytes(), Bytes.toBytes("内蒙人"));
put6.addColumn("f2".getBytes(), "phone".getBytes(), Bytes.toBytes("15788888888"));
put6.addColumn("f2".getBytes(), "say".getBytes(), Bytes.toBytes("貂蝉去哪了"));
//把所有的put添加到一个集合
List<Put> datas = new ArrayList<>();
datas.add(put);
datas.add(put2);
datas.add(put3);
datas.add(put4);
datas.add(put5);
datas.add(put6);
//把集合数据添加到hbase
myuser.put(datas);
//关闭资源
connection.close();
}
@Test//获取一条数据
public void getdata() throws IOException {
/*查询数据
* 按照主键id进行查询*/
/*获取连接*/
Configuration conf = new Configuration();
conf.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");
Connection connection = ConnectionFactory.createConnection(conf);
/*连接到具体的表*/
Table myuser = connection.getTable(TableName.valueOf("myuser"));
/*根据rowkey 获取一行的数据*/
Get get = new Get("0002".getBytes());
/*查询一个列族的信息*/
get.addFamily("f2".getBytes());
/*查询指定列族下的特定列*/
get.addColumn("f1".getBytes(), "name".getBytes());
Result result = myuser.get(get);
//获取所有的列名称以及列的值
Cell[] cells = result.rawCells();
//遍历
for (Cell cell : cells) {
/*未使用工具类 不推荐*/
// System.out.println(Bytes.toString(cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength()));
// System.out.println(Bytes.toString(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength()));
/*使用工具类 推荐
* 如果值是Int类型 需要使用 toInt*/
if (Bytes.toString(CellUtil.cloneQualifier(cell)).equals("id") || Bytes.toString(CellUtil.cloneQualifier(cell)).equals("age")) {
System.out.println(Bytes.toString(CellUtil.cloneFamily(cell)));
System.out.println(Bytes.toString(CellUtil.cloneQualifier(cell)));
System.out.println(Bytes.toInt(CellUtil.cloneValue(cell)));
} else {
System.out.println(Bytes.toString(CellUtil.cloneFamily(cell)));
System.out.println(Bytes.toString(CellUtil.cloneQualifier(cell)));
System.out.println(Bytes.toString(CellUtil.cloneValue(cell)));
}
}
/*关闭资源*/
myuser.close();
connection.close();
}
@Test//通过 startRowKey和endRowKey进行扫描查询
public void scanRowkey() throws IOException {
/*获取连接*/
Configuration conf = new Configuration();
conf.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");
Connection connection = ConnectionFactory.createConnection(conf);
/*查询那个表*/
Table myuser = connection.getTable(TableName.valueOf("myuser"));
Scan scan = new Scan();
scan.setStartRow("0004".getBytes());
scan.setStopRow("0006".getBytes());
ResultScanner scanner = myuser.getScanner(scan);
for (Result result : scanner) {
/*获取rowkey*/
System.out.println(Bytes.toString(result.getRow()));
KeyValue[] raw = result.raw();
for (KeyValue keyValue : raw) {
//获取所属列族
System.out.println(Bytes.toString(keyValue.getFamilyArray(), keyValue.getFamilyOffset(), keyValue.getFamilyLength()));
System.out.println(Bytes.toString(keyValue.getQualifierArray(), keyValue.getQualifierOffset(), keyValue.getQualifierLength()));
}
System.out.println(Bytes.toString(result.getValue("f1".getBytes(), "name".getBytes())));
}
/*关闭资源*/
myuser.close();
connection.close();
}
@Test//全表扫描
public void scanrow() throws IOException {
//获取连接
Configuration conf = new Configuration();
conf.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");
Connection connection = ConnectionFactory.createConnection(conf);
//获取表
Table myuser = connection.getTable(TableName.valueOf("myuser"));
//设置全表扫描
Scan scan = new Scan();
// 设置rowkey 区间扫描 含头不含尾
// scan.setStartRow("0002".getBytes());
// scan.setStopRow("0005".getBytes());
/*扫描每一行数据*/
ResultScanner scanner = myuser.getScanner(scan);
/*遍历数据*/
for (Result result : scanner) {
/*获取 rowkey*/
String s = Bytes.toString(result.getRow());
System.out.println("rowkey 是:" + s + " 这个value是啥:" + Bytes.toString(result.getValue("f1".getBytes(), "name".getBytes())));
}
//关流
myuser.close();
connection.close();
}
@Test// 通过rowkey 进行过滤
public void rowKeyFilter() throws IOException {
//获取连接zookeeper
Configuration conf = new Configuration();
conf.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");
Connection connection = ConnectionFactory.createConnection(conf);
//设置查询的表
Table myuser = connection.getTable(TableName.valueOf("myuser"));
//设置全表扫描
Scan scan = new Scan();
//设置过滤
RowFilter rowFilter = new RowFilter(CompareFilter.CompareOp.NOT_EQUAL, new BinaryComparator("0004".getBytes()));
scan.setFilter(rowFilter);
ResultScanner scanner = myuser.getScanner(scan);
for (Result result : scanner) {
String rowkey = Bytes.toString(result.getRow());
System.out.println("rowkey 是:" + rowkey + " 这个value是啥:" + Bytes.toString(result.getValue("f1".getBytes(), "name".getBytes())));
}
//关闭资源
myuser.close();
connection.close();
}
@Test//列族过滤器
public void fammilyFilter() throws IOException {
//设置获取连接
Configuration conf = new Configuration();
conf.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");
Connection connection = ConnectionFactory.createConnection(conf);
//设置查询表
Table myuser = connection.getTable(TableName.valueOf("myuser"));
//设置全局扫描
Scan scan = new Scan();
//设置过滤
FamilyFilter familyFilter = new FamilyFilter(CompareFilter.CompareOp.NO_OP, new BinaryComparator("f2".getBytes()));
scan.setFilter(familyFilter);
ResultScanner scanner = myuser.getScanner(scan);
for (Result result : scanner) {
String s = Bytes.toString(result.getRow());
System.out.println("rowkey 是:" + s + " 这个value是啥:" + Bytes.toString(result.getValue("f1".getBytes(), "name".getBytes())));
}
//关闭资源
myuser.close();
connection.close();
}
@Test//列过滤器
public void qualifierFilter() throws IOException {
//设置获取连接
Configuration conf = new Configuration();
conf.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");
Connection connection = ConnectionFactory.createConnection(conf);
//设置过滤表
Table myuser = connection.getTable(TableName.valueOf("myuser"));
//设置全局扫描
Scan scan = new Scan();
//设置过滤条件
QualifierFilter qualifierFilter = new QualifierFilter(CompareFilter.CompareOp.EQUAL, new BinaryComparator("name".getBytes()));
scan.setFilter(qualifierFilter);
ResultScanner scanner = myuser.getScanner(scan);
for (Result result : scanner) {
String s = Bytes.toString(result.getRow());
System.out.println("rowkey 是:" + s + " 这个value是啥:" + Bytes.toString(result.getValue("f1".getBytes(), "name".getBytes())));
}
//关闭资源
myuser.close();
connection.close();
}
@Test//列值过滤器
public void valueFilter() throws IOException {
//设置获取连接
Configuration conf = new Configuration();
conf.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");
Connection connection = ConnectionFactory.createConnection(conf);
//设置查询表名
Table myuser = connection.getTable(TableName.valueOf("myuser"));
//设置全表扫描
Scan scan = new Scan();
//设置过滤条件
ValueFilter valueFilter = new ValueFilter(CompareFilter.CompareOp.EQUAL, new SubstringComparator("布"));
scan.setFilter(valueFilter);
ResultScanner scanner = myuser.getScanner(scan);
for (Result result : scanner) {
String s = Bytes.toString(result.getRow());
System.out.println("rowkey 是:" + s + " 这个value是啥:" + Bytes.toString(result.getValue("f1".getBytes(), "name".getBytes())));
}
//关闭资源
myuser.close();
connection.close();
}
@Test//专用过滤器 单列值过滤器,返回满足条件的整行数据
public void singleColumnFilter() throws IOException {
//设置获取连接
Configuration conf = new Configuration();
conf.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");
Connection connection = ConnectionFactory.createConnection(conf);
//设置查询表
Table myuser = connection.getTable(TableName.valueOf("myuser"));
//设置全局扫描
Scan scan = new Scan();
//设置过滤条件 列族是 f1 列族下的 name列 name列 = 刘备的值
SingleColumnValueFilter singleColumnValueFilter = new SingleColumnValueFilter("f1".getBytes(), "name".getBytes(), CompareFilter.CompareOp.EQUAL, "刘备".getBytes());
scan.setFilter(singleColumnValueFilter);
ResultScanner scanner = myuser.getScanner(scan);
for (Result result : scanner) {
String s = Bytes.toString(result.getRow());
System.out.println("rowkey 是:" + s + " 这个value是啥:" + Bytes.toString(result.getValue("f1".getBytes(), "name".getBytes())));
}
//关闭资源
myuser.close();
connection.close();
}
@Test// 行键前缀过滤器
public void preFilter() throws IOException {
//设置获取连接
Configuration conf = new Configuration();
conf.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");
Connection connection = ConnectionFactory.createConnection(conf);
//设置查询表
Table myuser = connection.getTable(TableName.valueOf("myuser"));
//设置全局扫描
Scan scan = new Scan();
//设置过滤条件
PrefixFilter prefixFilter = new PrefixFilter("".getBytes());
scan.setFilter(prefixFilter);
ResultScanner scanner = myuser.getScanner(scan);
for (Result result : scanner) {
String s = Bytes.toString(result.getRow());
System.out.println("rowkey 是:" + s + " 这个value是啥:" + Bytes.toInt(result.getValue("f1".getBytes(), "id".getBytes())));
System.out.println(Bytes.toString(result.getValue("f1".getBytes(), "name".getBytes())));
System.out.println(Bytes.toString(result.getValue("f2".getBytes(), "phone".getBytes())));
}
//关闭资源
myuser.close();
connection.close();
}
@Test//根据rowkey 进行删除一整行数据
public void deleteByRowKey() throws IOException {
//设置获取连接
Configuration conf = new Configuration();
conf.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");
Connection connection = ConnectionFactory.createConnection(conf);
//设置查询表
Table myuser = connection.getTable(TableName.valueOf("myuser"));
//设置删除的rowkey
Delete delete = new Delete("001".getBytes());
myuser.delete(delete);
//关闭资源
myuser.close();
connection.close();
}
@Test//删除一整张表
public void deleteTable() throws IOException {
//设置获取连接
Configuration conf = new Configuration();
conf.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");
Connection connection = ConnectionFactory.createConnection(conf);
//实例一个超级管理员对象
Admin admin = connection.getAdmin();
//实现删除一张表
admin.disableTable(TableName.valueOf("abc"));
admin.deleteTable(TableName.valueOf("abc"));
//关闭资源
connection.close();
}