设为首页 加入收藏

TOP

HBase基础的几个关键点--大概可能是面试题(7)
2018-12-01 02:01:27 】 浏览:68
Tags:HBase 基础 关键点 大概 可能 试题

HBase基础的几个关键点--大概可能是面试题

1. Region的rowkey范围是开区间还是闭区间?描述一下


2. Scan的rowkey范围是开区间还是闭区间?描述一下


3. HTablePool线程安全么?如果线程安全,为什么?如果线程不安全,有什么影响?


4. 下面的代码有没有问题

publicList<Message> getData(Date start, Dateend, Long to)

throwsIOException {

HTableInterfacetable = tablePool.getTable(tableName);

List<Message>ret =null;

byte[] bytesTo = Bytes.toBytes(to);

byte[] startRow = Bytes.add(bytesTo,Bytes.toBytes(start.getTime()));

byte[] endRow = Bytes.add(bytesTo, Bytes.toBytes(end.getTime()));

byte[] family = "f".getBytes();


Scanscan =newScan();

scan.setStartRow(startRow);

scan.setStopRow(endRow);

scan.setCaching(200);

scan.addFamily(family);

ResultScannerrs =null;

try{

rs= table.getScanner(scan);

Resultresult = rs.next();

while(result !=null) {

if(ret ==null) {

ret=newArrayList<Message>();

}

Messagemsg =newMessage();

msg.setTo(to);

longid = Bytes.toLong(result.getValue(family,"id".getBytes()));

longfrom = Bytes.toLong(result.getValue(family, "from".getBytes()));

Stringmessage = Bytes.toString(result.getValue(family,

"msg".getBytes()));

longtime = Bytes.toLong(Arrays.copyOfRange(result.getRow(),8,

16));

msg.setId(id);

msg.setFrom(from);

msg.setMessage(message);

msg.setTime(newDate(time));

ret.add(msg);

result.close();

result= rs.next();

}

}finally{

table.close(); // important

}

returnret;

}


5. 请优化:

publicList<Put> getPut(String row, String… values) {

List<Put> puts = new ArrayList<Put>(values.length);

for(String value : values) {

Put put = new Put(row.getBytes());

put.add("family".getBytes(),"from".getBytes(), Bytes.toBytes(value));

puts.add(put);

}

return puts;

}


6. scan.setBatch(1)和scan.setCaching(2)的区别


7. 判断

a) put(List<Put> puts)比put(Put put)效率高。

b) HBase的底层是HDFS,有多副本,所以HBase不会丢失数据。

c) 写数据一定将自动flush设置为true以提高性能。

d) 如果我要存30天的数据,但列都一样,那我可以用30个version来保存。

e) 为了提升处理能力,我们应该把一批Put,分成多线程put到HBase集群

f) 变长字段组合成rowkey的时候,将字段之间用#隔开就可以了。

g) 一个Put对应于一个KeyValue。

h) HBase中建两张表不如建两个family。

i) 假设pool是HTablePool对象,可以HTable table=(HTable) pool.get(“table”)。

j) 使用HTablePool缓存的table(HTableInterface对象),将autoFlush设置为false的时候,用table.close就会自动flushCommits()。

k) 一批Put最多需要当前表的region个数个RPC请求

l) HTablePool实现了网络连接的复用。



】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇hbase 新版本 java api 遍历 下一篇HBase 修改 TTL 属性以释放空间

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目