Java HBase MapReduce-基于行键拆分区域
我正在针对hbase集群运行java mapreduce 行键的形式为UUID yyyymmdd UUID,行组将共用第一个UUID(行键前缀)。我将这些带有共享前缀的行称为组 在我们的hbase集群中,有些组包含的数据比其他组多得多。一个群体的规模可能只有几千人,也可能超过一百万人 据我所知,一个绘图员将读取一个区域 这意味着包含较大组的区域将被分配给单个映射器,因此该映射器将处理大量数据 我已经阅读并测试了将hbase.hregion.max.filesize参数设置得更低,以便分区。这确实提高了mapreduce作业的性能,因为会编组更多的映射程序来处理相同的数据 但是,将此全局最大值参数设置得较低也会导致更多的数百或数千个区域,这会引入其自身的开销,因此不建议这样做 现在我的问题是: 是否可以基于行键前缀分割区域,而不是应用全局最大值? 这样,如果一个大群体达到一定规模,它可能会蔓延到另一个地区。但较小的群体可以留在一个区域内,并尽可能将区域总数保持在较低水平 希望这有意义!Java HBase MapReduce-基于行键拆分区域,java,hadoop,mapreduce,hbase,Java,Hadoop,Mapreduce,Hbase,我正在针对hbase集群运行java mapreduce 行键的形式为UUID yyyymmdd UUID,行组将共用第一个UUID(行键前缀)。我将这些带有共享前缀的行称为组 在我们的hbase集群中,有些组包含的数据比其他组多得多。一个群体的规模可能只有几千人,也可能超过一百万人 据我所知,一个绘图员将读取一个区域 这意味着包含较大组的区域将被分配给单个映射器,因此该映射器将处理大量数据 我已经阅读并测试了将hbase.hregion.max.filesize参数设置得更低,以便分区。这确实
谢谢。在HBase中创建表时,如果您事先知道“有问题”的键前缀,您可以通过在您的情况下提供键(即范围)列表,以任何方式拆分它 下面是scala中的一个简单示例,但在Java中几乎相同(除了一些样板代码:)
private val admin=new HBaseAdmin(配置)
如果(!admin.tableExists(tableName))createTable()
私有def createTable(){
val htd=新的HTableDescriptor(表名)
val hcd=新的HColumnDescriptor(TableHandler.FAMILY)
hcd.setMaxVersions(1)
htd.addFamily(hcd)
admin.createTable(htd、calcSplits)//
private val admin=new HBaseAdmin(config)
if (!admin.tableExists(tableName)) createTable()
private def createTable() {
val htd = new HTableDescriptor(tableName)
val hcd = new HColumnDescriptor(TableHandler.FAMILY)
hcd.setMaxVersions(1)
htd.addFamily(hcd)
admin.createTable(htd, calcSplits) // <---- create the table with the splits
}
private def calcSplits = {
val splits = new Array[Array[Byte]](256)
var i=0
for (zones <- 0x00 to 0xff) {
val temp =new Array[Byte](1)
temp(0)=(0xff & zones).asInstanceOf[Byte]
splits(i) = temp
i+=1
}
splits
}