现象
在Trafodion中往一个单分区表中Load数据的时候,或者在一个大的分区表上创建单分区索引的时候,会遇到以下错误,
ERROR[8448] Unable to access Hbase interface. Call to ExpHbaseInterface:doBulkLoad returned error HBASE_DOBULK_LOAD_ERROR(-715). Cause: java.io.IOException. Trying to load more than 32 hfiles to one family of one region.
分析
此报错属于HBase本身的限制,由于Trafodion的Load是调用HBase的Bulk Load,HBase在Bulk Load时默认一个region的hfile个数是32,当hfile文件个数超过32个时则会报上述错误。
解决
方案1
修改HBase配置,调大hbase.mapreduce.bulkload.max.hfiles.perRegion.perFamily值,需要重启HBase才生效
<property>
<name>hbase.mapreduce.bulkload.max.hfiles.perRegion.perFamily</name>
<value>32</value>
</property>
方案2
如果是Load表出错,使用upsert using load来代替Load命令
upsert using load into table_name ...
如果是创建索引报此错,使用以下cqd控制创建索引时使用upsert using load而非load
cqd traf_load_use_for_indexes 'OFF' ;
方案3
减少Load的并发度,使用以下cqd控制
cqd parallel_num_esps '<value>';