1

HBase テーブルに 4 億行を挿入する必要があります。

スキーマは次のようになります

ここで、単に int と int と値を 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 ブックスのリンクです

HTH

PS : これらのリンクは、HBase+MR 統合を適切に学習するのに役立つ場合があります。

リンク 1。

リンク 2。

于 2013-07-27T00:12:29.380 に答える