hbase shell 进入HBase
HBase光标是往后删除的,要往前删除需要按着Ctrl
list 查看当前HBase中具有哪些表list
create 'scores','grade', 'course' 创建表,表名scores,列族grade,course
put 'scores','1','course:name','sansan' 向scores表中添加row key为1,列族course当中,列neme=sansan的数据
describe 'scores' 查看scores表的结构
get 'scores','1' 查看row key为1的一条记录
get 'scores','1','course:age' 条件查询
scan 'scores' 查看表的所有记录
disable 'scores' 废弃表
is_disabled 'scores' 查看表是否废弃
drop 'scores' 删除表,删除表之前必须先废弃
delete 'tab01','1','cf1:age' 删除一条记录
deleteall
‘<
table name
>’,
‘<
row
>’, 删除一行数据
create,describe,disable,drop,list,scan,put,get,delete,deleteall,cou nt,status等,通过help可以看到详细的用法
整合Java需要HBase的jar和hadoop的jar:
package com.sxt.hbase;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;
import org.apache.hadoop.hbase.filter.FilterList;
import org.apache.hadoop.hbase.filter.PrefixFilter;
import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class HBaseDemo {
//通话详单 表名
public String TN = "tp";
HBaseAdmin hBaseAdmin;
HTable htable;
@Before
public void setup() throws Exception {
Configuration conf = new Configuration();
conf.set("hbase.zookeeper.quorum", "node1");//要是使用zookeeper集群:node1,node2,node3
hBaseAdmin = new HBaseAdmin(conf);
htable = new HTable(conf, TN);
}
@After
public void end() throws Exception {
if(hBaseAdmin != null) {
hBaseAdmin.close();
}
if(htable != null) {
htable.close();
}
}
@Test
/**
* 创建表
* @throws Exception
*/
public void creatTbl() throws Exception {
if(hBaseAdmin.tableExists(TN)) {
hBaseAdmin.disableTable(TN);
hBaseAdmin.deleteTable(TN);
}
HTableDescriptor desc = new HTableDescriptor(TableName.valueOf(TN));
HColumnDescriptor family = new HColumnDescriptor("cf");
family.setInMemory(true);
family.setMaxVersions(1);
desc.addFamily(family);
hBaseAdmin.createTable(desc);
}
@Test
/**
* 插入数据
*/
public void insertDB() throws Exception {
//rowkey设计: 自己的手机号码 _ 时间戳
Put put = new Put("18612341234_15525353434".getBytes());
put.add("cf".getBytes(), "name".getBytes(), "zhangsan".getBytes());
htable.put(put);
}
@Test
/**
* 查询 某些cell
* @throws Exception
*/
public void getDB() throws Exception {
// 参数:rowkey
Get get = new Get("001".getBytes());
get.addColumn("cf".getBytes(), "name".getBytes());
Result rs = htable.get(get);
Cell cell = rs.getColumnLatestCell("cf".getBytes(), "name".getBytes());
System.out.println(new String(CellUtil.cloneValue(cell)));
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
/**
* 十个手机号码 每个用户一年 产生100条
* @throws Exception
* @throws
*/
@Test
public void insertDBs() throws Exception {
List<Put> puts = new ArrayList<Put>();
for (int i = 0; i < 10; i++) {
// 自己手机号码
String pNum = getPhone("186");
for (int j = 0; j < 100; j++) {
String dateStr = getDate("2017");
try {
Long dataLong = sdf.parse(dateStr).getTime();
// rowkey设计:大数-当前时间戳
String rowkey = pNum + "_" + (Long.MAX_VALUE-dataLong);
// 对方手机号码
String pNum2 = getPhone("170");
Put put = new Put(rowkey.getBytes());
put.add("cf".getBytes(), "phonenum".getBytes(), pNum2.getBytes());
put.add("cf".getBytes(), "type".getBytes(), (r.nextInt(2)+"").getBytes());
put.add("cf".getBytes(), "date".getBytes(), dateStr.getBytes());
puts.add(put);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
htable.put(puts);
}
/**
* 查询某个手机号 一个月内的通话记录
* 手机号:186964321629
* 时间段:2017-01月份
* @throws Exception
*/
@Test
public void scanDB1() throws Exception {
Scan scan = new Scan();
String startRowkey = "186964321629_" + (Long.MAX_VALUE - sdf.parse("20170201000000").getTime());
String stopRowkey = "186964321629_" + (Long.MAX_VALUE - sdf.parse("20170101000000").getTime());
scan.setStartRow(startRowkey.getBytes());
scan.setStopRow(stopRowkey.getBytes());
ResultScanner rss = htable.getScanner(scan);
for (Result rs : rss) {
System.out.print(new String(CellUtil.cloneValue(rs.getColumnLatestCell("cf".getBytes(), "phonenum".getBytes()))));
System.out.print(" " + new String(CellUtil.cloneValue(rs.getColumnLatestCell("cf".getBytes(), "type".getBytes()))));
System.out.println(" " + new String(CellUtil.cloneValue(rs.getColumnLatestCell("cf".getBytes(), "date".getBytes()))));
}
}
/**
* 查询某个手机号 所有的被叫类型的(type=1) 通话记录
* 手机号码:186964321629
* @throws Exception
*/
@Test
public void scanDB2() throws Exception {
FilterList list = new FilterList(FilterList.Operator.MUST_PASS_ALL);
PrefixFilter prefixFilter = new PrefixFilter("186964321629_".getBytes());
list.addFilter(prefixFilter);
SingleColumnValueFilter singleColumnValueFilter = new SingleColumnValueFilter("cf".getBytes(),
"type".getBytes(), CompareOp.EQUAL, "1".getBytes());
list.addFilter(singleColumnValueFilter);
Scan scan = new Scan();
scan.setFilter(list);
ResultScanner rss = htable.getScanner(scan);
for (Result rs : rss) {
System.out.print(new String(CellUtil.cloneValue(rs.getColumnLatestCell("cf".getBytes(), "phonenum".getBytes()))));
System.out.print(" " + new String(CellUtil.cloneValue(rs.getColumnLatestCell("cf".getBytes(), "type".getBytes()))));
System.out.println(" " + new String(CellUtil.cloneValue(rs.getColumnLatestCell("cf".getBytes(), "date".getBytes()))));
}
}
public Random r = new Random();
/**
* 随机返回手机号码
* @param prefix 手机号码前缀 eq:186
* @return
*/
public String getPhone(String prefix) {
return prefix + String.format("%08d", r.nextInt(999999999));
}
/**
* 随机返回日期 yyyyMMddHHmmss
* @param year 年
* @return
*/
public String getDate(String year) {
return year + String.format("%02d%02d%02d%02d%02d",
new Object[]{r.nextInt(12)+1,r.nextInt(29),
r.nextInt(24),r.nextInt(24),r.nextInt(24)});
}
}
|