自己的数据导入由于是md5排序后的数据,所以导入的时候遇到的一个问题就是:在一个集群中,一个导入数据的进程一动不动,所以的client都在等待一个region(就是一个节点),过了一会后,变成了下一个region
查到了一些资料,不过这种做饭还不是很适合我,所以我只能考虑用另外的方法来处理
用多线程同时读取统一个文件的不同位置,这样读入的rowkye就分散了。多线程的数据与自己regions的数目相同即可。
另外要避免这种问题就是在创建表的时候预先分布regions,不过似乎如果建好了表就不能split regions了。谁有这方面的方法不吝赐教。
http://www.yankay.com/wp-content/hbase/book.html#timeseries
单调递增Row Keys/时序数据
在Tom White的Hadoop: The Definitive Guide一书中,有一个章节描述了一个值得注意的问题:在一个集群中,一个导入数据的进程一动不动,所以的client都在等待一个region(就是一个节点),过了一会后,变成了下一个region...如果使用了单调递增或者时序的key就会造成这样的问题。详情可以参见IKai画的漫画monotonically increasing values are bad。使用了顺序的key会将本没有顺序的数据变得有顺序,把负载压在一台机器上。所以要尽量避免时间戳或者(e.g. 1, 2, 3)这样的key。如果你需要导入时间顺序的文件(如log)到Hbase中,可以学习OpenTSDB的做法。
他有一个页面来描述他的schema.OpenTSDB的Key的格式是[metric_type][event_timestamp],乍一看,似乎违背了不将timestamp做key的建议,但是他并没有将timestamp作为key的一个关键位置,有成百上千的metric_type就足够将压力分散到各个region了。