您的位置:首页 > 其它

hbase基本操作

2016-04-21 20:56 369 查看
首先:
conf = HBaseConfiguration.create();
conf.set("hbase.zookeeper.property.clientPort", "2181");
conf.set("hbase.zookeeper.quorum", "集群地址");
conf.set("hbase.master", "地址+端口");
conn = HConnectionManager.createConnection(conf);
admin = new HBaseAdmin(conf);

插入  Put (更新同理)------------------------------------------------------
插入单条记录
String tablename = "proreply";
String row = rowFixd;
String columnFamily = "data";
String[] columns = new String[] { "content", "rusername", "ctime" };
String[] values = new String[] { "回复内容:........", "lxk",
DateFormatUtils.format(new Date(), "yyyy-mm-dd HH:mm:ss.ms") };
HTableInterface table = null;
try {
table = conn.getTable(tablename);
Put put = new Put(Bytes.toBytes(row));
for (int i = 0; i < columns.length; i++) {
put.add(Bytes.toBytes(columnFamily), Bytes.toBytes(String.valueOf(columns[i])),
values[i] == null ? null : values[i].getBytes("utf-8"));
table.put(put);
}
System.out.println("======插入记录完成======");
插入多条记录
//             table.setAutoFlush(false);
//             table.setWriteBufferSize(6 * 1024 * 1024);
if (null != rowDatas && rowDatas.size() > 0) {
for (RowData rowData : rowDatas) {
String row = rowData.getRow();
String[] columns = rowData.getColumns();
String columnFamily = rowData.getColumnFamily();
String[] values = rowData.getValues();
Put put = new Put(Bytes.toBytes(row));
for (int i = 0; i < columns.length; i++) {
put.add(Bytes.toBytes(columnFamily),
Bytes.toBytes(String.valueOf(columns[i])),
values[i] == null ? null : values[i]
.getBytes("utf-8"));
put.setDurability(Durability.SKIP_WAL);
table.put(put);
//                         puts.add(put);
}
}
//                 table.put(puts);
// table.batch(puts);
//                 table.flushCommits();

删除-----------------------------------------------------------------------

HTableInterface htable = conn.getTable("reguser".getBytes());
Delete del = new Delete(Bytes.toBytes("chenzhenjian1448850414722"));
del.compareTo(del);
htable.delete(del);

查询-----------------------------------------------------------------------
查询所有记录

HTableInterface htable = conn.getTable("表名".getBytes());
Scan scan = new Scan();
ResultScanner scanner = htable.getScanner(scan);

for (Result result : scanner) {
byte[] row = result.getRow();
List<KeyValue> list = result.list();

for (KeyValue keyValue : list) {
System.out.print("行键:" + new String(row));
System.out.print("\t列簇:" + new String(keyValue.getFamily()));
System.out.print("\t列名:" + new String(keyValue.getQualifier()));
System.out.print("\t时间:" + keyValue.getTimestamp());
System.out.println("\t列值:" + new String(keyValue.getValue()));
}
}

查询一行记录
Get g = new Get(rowKey.getBytes());
Result rs = table.get(g);
KeyValue[] raw = rs.raw();
Map<String, String> result = new HashMap<String, String>();
for (int i = 0; i < raw.length; i++) {
byte[] row = raw[i].getRow();
result.put("row", new String(row));
byte[] family = raw[i].getFamily();
byte[] qualifier = raw[i].getQualifier();
byte[] value = raw[i].getValue();
result.put(new String(family) + ":" + new String(qualifier),
new String(value));
}
return result;
查询过滤条件---------------------------------------------------------------------------

提取rowkey以[prefix]前缀开头
Filter filter=new RowFilter(CompareFilter.CompareOp.EQUAL, new BinaryPrefixComparator(prefix.getBytes()));
Scan s=new Scan();
s.setFilter(filter);

提取rowkey以[endfix]结尾
Filter filter=new RowFilter(CompareFilter.CompareOp.EQUAL,  new RegexStringComparator(".*"+endfix+"$"));
Scan s=new Scan();
s.setFilter(filter);

提取rowkey以包含[value]
Filter filter=new RowFilter(CompareFilter.CompareOp.EQUAL,  new SubstringComparator(value));
Scan s=new Scan();
s.setFilter(filter);

提取rowkey以[prefix]前缀开头、并且只包含rowkey、
Filter filter1=new RowFilter(CompareFilter.CompareOp.EQUAL, new BinaryPrefixComparator(prefix.getBytes()));
KeyOnlyFilter filter2=new KeyOnlyFilter();
FilterList filtList =new FilterList(FilterList.Operator.MUST_PASS_ALL);
filtList.addFilter(filter1);
filtList.addFilter(filter2);
Scan s=new Scan();
s.setFilter(filtList);

分页提取10条:rowkey以[prefix]前缀开头、
Filter filter1=new RowFilter(CompareFilter.CompareOp.EQUAL, new BinaryPrefixComparator(prefix.getBytes()));
PageFilter filter2=new PageFilter(10);
FilterList filtList =new FilterList(FilterList.Operator.MUST_PASS_ALL);
filtList.addFilter(filter1);
filtList.addFilter(filter2);
Scan s=new Scan();
s.setFilter(filtList);

分页提取10条:仅获取data列族上某列上大于某时间戳的数据
PageFilter filter=new PageFilter(10);
Scan s=new Scan();
s.addColumn("data".getBytes(), colmnName.getBytes());
s.setFilter(filter);
if(0!=minStamp)
s.setTimeRange(minStamp, Long.MAX_VALUE);
return s;

分页提取10条:大于某时间戳的数据(针对所有列)
PageFilter filter=new PageFilter(10);
Scan s=new Scan();
s.setFilter(filter);
if(0!=minStamp)
s.setTimeRange(minStamp, Long.MAX_VALUE);
return s;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: