一,建立最少的列簇
1,用户表
将用户基本信息放入一个列簇中(如nickname,gender等),将好友,标签等有大量列的单独存放,这样用户表成为5个列簇
2,信息表、用户关系等基本表都改为一个列簇
调整依据:更少的列簇,更少的io
分析:一个HRegion中所有HStore中MemStore的大小总和到达阀值时就会进行flush操作(解释:可大概理解为同一个表中的所有列簇会同时flush),若是多个列簇,就会同时对多个hstore下的文件进行写入,同时牵扯到该hregion下的所有hstore文件是否需要进行合并及拆分的验证加查,及进行相应的合并及拆分操作等一连串反映。
代码如下:
1,用户表
将用户基本信息放入一个列簇中(如nickname,gender等),将好友,标签等有大量列的单独存放,这样用户表成为5个列簇
2,信息表、用户关系等基本表都改为一个列簇
调整依据:更少的列簇,更少的io
分析:一个HRegion中所有HStore中MemStore的大小总和到达阀值时就会进行flush操作(解释:可大概理解为同一个表中的所有列簇会同时flush),若是多个列簇,就会同时对多个hstore下的文件进行写入,同时牵扯到该hregion下的所有hstore文件是否需要进行合并及拆分的验证加查,及进行相应的合并及拆分操作等一连串反映。
代码如下:
long flushSize = regionInfo.getTableDesc().getMemStoreFlushSize();
if (flushSize == HTableDescriptor.DEFAULT_MEMSTORE_FLUSH_SIZE) {
flushSize = conf.getLong(“hbase.hregion.memstore.flush.size”,
HTableDescriptor.DEFAULT_MEMSTORE_FLUSH_SIZE);
this.memstoreFlushSize = flushSize;
二,建立比较合理的hregion个数,及修改hbase0.90错误