Tugas MapReduce Hadoop dengan Bigtable

Contoh ini menggunakan Hadoop untuk melakukan tugas MapReduce sederhana yang menghitung frekuensi munculnya 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 dari lingkungan pengembangan lokal, instal dan lakukan inisialisasi gcloud CLI, lalu siapkan Kredensial Default Aplikasi dengan kredensial pengguna Anda.

  1. Menginstal Google Cloud CLI.
  2. Untuk initialize gcloud CLI, jalankan perintah berikut:

    gcloud init
  3. Buat kredensial autentikasi lokal untuk Akun Google Anda:

    gcloud auth application-default login

Untuk informasi selengkapnya, lihat Siapkan autentikasi untuk lingkungan pengembangan lokal.

Ringkasan contoh kode

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

Pertama, mapper membuat token konten 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);
    }
  }
}

Pereduksi kemudian menjumlahkan nilai untuk setiap kunci dan menulis hasilnya ke tabel Bigtable yang Anda tentukan. Setiap {i>row key <i}adalah sebuah kata dari file teks. Setiap baris berisi kolom cf:count, yang berisi berapa kali row key muncul 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;
  }
}