繁体   English   中英

如何使用TableMapReduceUtil在HBase扫描仪结果上运行MapReduce

[英]How to run mapreduce on hbase scanner result with TableMapReduceUtil


我的hbase表如下所示:

    key---------value
    id1/bla     value1
    id1/blabla  value2
    id2/bla     value3
    id2/blabla  value4
    ....

有上百万个以id1开头的密钥和数百万个以id2开头的密钥。

我想用mapReduce从hbase读取数据,因为有很多键以相同的ID开头,每个id 1个映射还不够好。 我更喜欢每个ID 100个映射器

我希望超过1个映射器将在由id过滤的同一scanerResult上运行。 我了解了TableMapReduceUtil并尝试了以下方法:

Configuration config = HBaseConfiguration.create();
Job job = new Job(config,"ExampleSummary");
job.setJarByClass(MySummaryJob.class);     // class that contains mapper and reducer

Scan scan = new Scan();
scan.setCaching(500);        // 1 is the default in Scan, which will be bad for MapReduce jobs
scan.setCacheBlocks(false);  // don't set to true for MR jobs
// set other scan attrs

TableMapReduceUtil.initTableMapperJob(
    sourceTable,        // input table
    scan,               // Scan instance to control CF and attribute selection
    MyMapper.class,     // mapper class
    Text.class,         // mapper output key
    IntWritable.class,  // mapper output value
    job);


带有如下所示的地图功能(应迭代扫描仪结果):

public static class MyMapper extends TableMapper<Text, IntWritable>  {

    private final IntWritable ONE = new IntWritable(1);
    private Text text = new Text();

    public void map(ImmutableBytesWritable row, Result value, Context context) throws IOException, InterruptedException {
            text.set("123");     // we can only emit Writables...    
            context.write(text, ONE);
    }
}
<br>



我的问题是:

  1. 映射功能怎么可能作为输入Result而不是ResultScanner输入? 我知道扫描结果可以由ResultScanner进行迭代,而ResultScanner可以由Result进行迭代。 ResultScanner有列表\\结果数组不是吗?
  2. 如何在地图功能中迭代扫描仪的结果?
  3. 我如何控制此函数的拆分数量。如果它仅打开10个映射器,而我想设置20个,则可以更改某些内容吗?
  4. 有没有最简单的方法可以实现我的目标?

我将从您列表中的#4开始:

默认行为是为每个区域创建一个映射器。 因此, TableInputFormat尝试破解TableInputFormat以根据您的规范创建自定义输入拆分, TableInputFormat先考虑将数据拆分为100个区域(然后您将拥有100个非常平衡的映射器)。

这种方法可以提高读取和写入性能,因为您不容易受到热点攻击(假设您的群集中有多于一台或两台区域服务器)。

进行此操作的首选方法是预先拆分表(即在创建表时定义拆分)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM