Tugas MapReduce Hadoop dengan Bigtable

Contoh ini menggunakan Hadoop untuk melakukan tugas MapReduce sederhana yang menghitung berapa kali suatu kata muncul dalam file teks. Job 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.

    Menginstal Google Cloud CLI.

    Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

    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.

    If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

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

Ringkasan contoh kode

Contoh kode 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 muncul di class WordCountHBase.

Pertama, mapper melakukan tokenisasi pada konten file teks dan menghasilkan pasangan kunci-nilai, dengan kunci adalah kata dari file teks dan nilai 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);
    }
  }
}

Kemudian, pereduksi 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 jumlah kemunculan 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;
  }
}