4 回答

TA貢獻(xiàn)1839條經(jīng)驗(yàn) 獲得超15個(gè)贊
hbase的region是按行劃分,而非按列,如果你讀取指定一行的所有列數(shù)據(jù),regionServer雖然無法保證你的所有數(shù)據(jù)都在一個(gè)HFile中,但是至少是在一個(gè)Region中。但是具體的HFile所在的hdfs的節(jié)點(diǎn)那就不是HBase關(guān)心的事了

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超9個(gè)贊
hbase的region是按行劃分,而非按列,如果你讀取指定一行的所有列數(shù)據(jù),regionServer雖然無法保證你的所有數(shù)據(jù)都在一個(gè)HFile中,但是至少是在一個(gè)Region中。但是具體的HFile所在的hdfs的節(jié)點(diǎn)那就不是HBase關(guān)心的事了,因?yàn)镠Base的存儲(chǔ)是依賴與hdfs,所以底層存儲(chǔ)讀取的事會(huì)由NameNode操心,NameNode會(huì)考慮就近原則,而提供最高效的數(shù)據(jù)讀取策略。
你的數(shù)據(jù)傳輸是必然,但是HBase不會(huì)計(jì)算,計(jì)算是發(fā)生在你將想要的數(shù)據(jù)獲取到之后再自行進(jìn)行計(jì)算的。你讀取大量數(shù)據(jù)必然會(huì)有大量數(shù)據(jù)傳輸,HBase只是將提供了一種高效的數(shù)據(jù)讀取策略,盡量減小數(shù)據(jù)傳輸量

TA貢獻(xiàn)1864條經(jīng)驗(yàn) 獲得超2個(gè)贊
hbase提供了ListFilter過濾
List<Filter> filters = new ArraList<Filter>();
Filter f1=new RowFilter(.........);
Filter f2=new AualifierFilter(................);
filters.add(f1);
filters.add(f2);
FilterList filterList=new FilterList(filters);
Scan scan=new Scan();
scan.setFilter(filterList);
ResultScanner scanner=table.getScanner(scan);
之后遍歷就ok了
雖然作者很早就提問了,我還是想讓更多人看到
- 4 回答
- 0 關(guān)注
- 1944 瀏覽
添加回答
舉報(bào)