1)设备
当你调用create办法时将会加载两个设备文件:hbase-default.xml and hbase-site.xml,哄骗的是当前的java类路径, 代码中configuration设置的这些设备将会覆盖hbase-default.xml和hbase-site.xml中雷同的设备,若是两个设备文件都存在并且都设置好了响应参上方的属性下面的属性即可
2)关于建表
public void createTable(HTableDescriptor desc)
setMaxFileSize,指定最大的region size
setMemStoreFlushSize 指定memstore flush到HDFS上的文件大小
增长family经由过程 addFamily办法
public void addFamily(final HColumnDescriptor family)
HColumnDescriptor 代表的是column的schema,供给的办法斗劲常用的有
setTimeToLive:指定最大的TTL,单位是ms,过期数据会被主动删除。
setInMemory:指定是否放在内存中,对小表有效,可用于进步效力。默认封闭
setBloomFilter:指定是否应用BloomFilter,可进步随机查询效力。默认封闭
setCompressionType:设定命据紧缩类型。默认无紧缩。
setMaxVersions:指定命据最大保存的版本个数。默认为3。
重视的是,一般我们不去setInMemory为true,默认是封闭的
3)关于入库
官方建议
table.setAutoFlush(false); //数据入库之前先设置此项为false
table.setflushCommits();//入库完成后,手动刷入数据
重视:
在入库过程中,put.setWriteToWAL(true/flase);
关于这一项若是不欲望多量数据在存储过程中丧失,建议设置为true,若是仅是在测试练习训练阶段,为了节俭入库时候建议设置为false
4)关于获取表实例
HTablePool pool = new HTablePool(configuration, Integer.MAX_VALUE);
HTable table = (HTable) pool.getTable(tableName);
建议用表连接池的体式格式获取表,具体池有什么感化,我想用过数据库连接池的同窗都知道,我就不再反复
不建议应用new HTable(configuration,tableName);的体式格式获取表
5)关于查询
建议每个查询语句都放入try catch语句块,并且finally中要进行封闭ResultScanner实例以及将不应用的表从头放入到HTablePool中的操纵,具体做法如下
Java代码
public static void QueryAll(String tableName) {
HTablePool pool = new HTablePool(configuration, Integer.MAX_VALUE);
HTable table = null;
ResultScanner rs = null;
try {
Scan scan = new Scan();
table = (HTable) pool.getTable(tableName);
rs = table.getScanner(scan);
for (Result r : rs) {
System.out.println("获获得rowkey:" + new String(r.getRow()));
for (KeyValue keyValue : r.raw()) {
System.out.println("列:" + new String(keyValue.getFamily())
+ "====值:" + new String(keyValue.getValue()));
}
}
} catch (IOException e) {
e.printStackTrace();
}finally{
rs.close();// 最后还得封闭
pool.putTable(table); //实际应用过程中,pool获取实例的体式格式应当抽取为单例模式的,不该在每个办法都从头获取一次(单例熟悉打听?就是抽取到专门获取pool的逻辑类中,具体逻辑为若是pool存在着直接应用,若是不存在则new)
}
}