Tugas MapReduce Hadoop dengan Bigtable

Contoh ini menggunakan Hadoop untuk melakukan tugas MapReduce sederhana yang menghitung frekuensi kemunculan kata dalam file teks. Tugas MapReduce menggunakan Bigtable untuk menyimpan hasil operasi peta. Kode untuk contoh ini ada di repositori GitHub GoogleCloudPlatform/cloud-bigtable-examples, di direktori java/dataproc-wordcount.

Menyiapkan autentikasi

Untuk menggunakan contoh Java di halaman ini dalam lingkungan pengembangan lokal, instal dan lakukan inisialisasi gcloud CLI, lalu siapkan Kredensial Default Aplikasi dengan kredensial pengguna Anda.

  1. Install the Google Cloud CLI.
  2. To initialize the gcloud CLI, run the following command:

    gcloud init
  3. If you're using a local shell, then create local authentication credentials for your user account:

    gcloud auth application-default login

    You don't need to do this if you're using Cloud Shell.

Untuk informasi selengkapnya, lihat Set up authentication for a local development environment.

Ringkasan contoh kode

Contoh kode menyediakan antarmuka command line sederhana yang menggunakan satu atau beberapa file teks dan nama tabel sebagai input, menemukan semua kata yang muncul dalam file, dan menghitung frekuensi kemunculan setiap kata. Logika MapReduce muncul di class WordCountHBase.

Pertama, pemetaan membuat token isi file teks dan menghasilkan pasangan nilai kunci, dengan kunci adalah kata dari file teks dan nilainya adalah 1:

public static class TokenizerMapper extends
    Mapper<Object, Text, ImmutableBytesWritable, IntWritable> {

  private final static IntWritable one = new IntWritable(1);

  @Override
  public void map(Object key, Text value, Context context) throws IOException,
      InterruptedException {
    StringTokenizer itr = new StringTokenizer(value.toString());
    ImmutableBytesWritable word = new ImmutableBytesWritable();
    while (itr.hasMoreTokens()) {
      word.set(Bytes.toBytes(itr.nextToken()));
      context.write(word, one);
    }
  }
}

Pengurang kemudian menjumlahkan nilai untuk setiap kunci dan menulis hasilnya ke tabel Bigtable yang Anda tentukan. Setiap kunci baris adalah kata dari file teks. Setiap baris berisi kolom cf:count, yang berisi frekuensi munculnya kunci baris dalam file teks.

public static class MyTableReducer extends
    TableReducer<ImmutableBytesWritable, IntWritable, ImmutableBytesWritable> {

  @Override
  public void reduce(ImmutableBytesWritable key, Iterable<IntWritable> values, Context context)
      throws IOException, InterruptedException {
    int sum = sum(values);
    Put put = new Put(key.get());
    put.addColumn(COLUMN_FAMILY, COUNT_COLUMN_NAME, Bytes.toBytes(sum));
    context.write(null, put);
  }

  public int sum(Iterable<IntWritable> values) {
    int i = 0;
    for (IntWritable val : values) {
      i += val.get();
    }
    return i;
  }
}