1

我需要在 HBase 表中插入 4 亿行。

架构看起来像这样

我通过简单地将 int 和 int 和 value 连接为 System.nanoTime() 来生成密钥

我的映射器看起来像这样

public class DatasetMapper extends Tablemapper <Text,LongWritable> {


  private static Configuration conf = HBaseConfiguration.create();


public void map (Text key, LongWritable values, Context context) throws exception {

   // instantiate HTable object that connects to table name 
   HTable htable = new HTable(conf,"temp") // already created temp table 
   htable.setAutoFlush(flase);
   htable.setWriteBufferSize(1024*1024*12);

   // construct key
   int i = 0, j = 0;
   for(i=0; i<400000000,i++) {
       String rowkey = Integer.toString(i).concat(Integer.toString(j));
       Long value = Math.abs(System.nanoTime());
       Put put = new Put(Bytes.toBytes(rowkey));
           put.add(Bytes.toBytes("location"),Bytes.toBytes("longlat"),Bytes.toBytes(value);
       htable.put(put)
       j++;
       htable.flushCommits();
}
}

我的工作看起来像这样

Configuration config = HBaseConfiguration.create();
Job job = new Job(config,"initdb");
job.setJarByClass(DatasetMapper.class);    // class that contains mapper

TableMapReduceUtil.initTableMapperJob(
null,      // input table
null,            
DatabaseMapper.class,   // mapper class
null,             // mapper output key
null,             // mapper output value
job);
TableMapReduceUtil.initTableReducerJob(
temp,      // output table
null,             // reducer class
job);
job.setNumReduceTasks(0);

boolean b = job.waitForCompletion(true);
if (!b) {
throw new IOException("error with job!");
}

作业运行但插入 0 条记录。我知道我犯了一些错误,但由于我是 HBase 的新手,所以我无法抓住它。请帮我。

谢谢

4

1 回答 1

3

首先,您的映射器的名称是DatasetMapper但在您的作业配置中您已指定DatabaseMapper。我想知道它是如何在没有任何错误的情况下工作的。

接下来,看起来您已经将 TableMapper 和 Mapper 的用法混合在一起了。Hbase TableMapper 是一个抽象类,它扩展了 Hadoop Mapper,帮助我们方便地从 HBase 中读取数据,TableReducer 帮助我们回写 HBase。您正在尝试从 Mapper 中放入数据,并且同时使用 TableReducer。您的映射器实际上永远不会被调用。

要么使用 TableReducer 来放置数据,要么只使用 Mapper。如果您真的希望在 Mapper 中执行此操作,您可以使用TableOutputFormat类。请参阅 HBase Definitive Guide 第 301 页给出的示例。这是Google 图书链接

高温高压

PS:您可能会发现这些链接有助于正确学习 HBase+MR 集成:

链接 1。

链接 2。

于 2013-07-27T00:12:29.380 回答