使用 Hadoop MapReduce 和 Bigtable 进行单词统计

简介

本示例展示了如何使用 Hadoop 的 MapReduce 框架来统计文本文件中单词的出现次数,并将结果存储在 Google Bigtable 中。这个过程涉及以下步骤:设置身份验证、编写 MapReduce 代码以及执行作业。

设置身份验证

在本地环境中使用 Google Cloud 服务时,需要设置身份验证。以下是设置步骤:

  1. 安装 Google Cloud CLI
  2. 初始化 gcloud CLI :运行命令 gcloud init
  3. 设置应用默认凭据 :在本地 shell 中,使用命令 gcloud auth application-default login 登录并设置凭据。

MapReduce 代码概览

代码示例提供了一个简单的命令行界面,用于处理一个或多个文本文件,并统计每个单词的出现次数。主要逻辑在 WordCountHBase 类中。

映射器(Mapper)

映射器的任务是将文本文件的内容分解成单词,并生成键值对,其中键为单词,值为 1。

java 复制代码
public static class TokenizerMapper extends
    Mapper {

  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);
    }
  }
}

缩减器(Reducer)

缩减器对每个键(单词)的值进行求和,并将结果写入 Bigtable 表中。每行对应一个单词,包含一个 cf:count 列,记录该单词的出现次数。

java 复制代码
public static class MyTableReducer extends
    TableReducer {

  @Override
  public void reduce(ImmutableBytesWritable key, Iterable 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 values) {
    int i = 0;
    for (IntWritable val : values) {
      i += val.get();
    }
    return i;
  }
}

执行 MapReduce 作业

  1. 编译代码:确保代码正确编译并打包成 JAR 文件。
  2. 提交作业 :使用 Hadoop 的 hadoop jar 命令提交 MapReduce 作业。
  3. 监控作业:通过 Hadoop 的 Web UI 或命令行工具监控作业的执行状态。

示例用例

  • 输入文件:包含多个文本文件,每个文件中有多个单词。
  • 输出:Bigtable 表中,每行对应一个单词,包含该单词在所有文件中出现的总次数。

通过这个示例,你可以了解如何利用 Hadoop 和 Bigtable 处理大规模数据,并将结果存储在 NoSQL 数据库中。

相关推荐
@insist1239 分钟前
系统架构设计师-实时性评价、调度算法与内核架构选型
算法·架构·系统架构·软考·系统架构设计师·软件水平考试
江畔柳前堤1 小时前
github实战指南01-账号配置与 SSH 密钥
运维·人工智能·深度学习·ssh·github·pyqt·信号处理
kyriewen4 小时前
从本地到生产:迁移到 GitHub Actions 自动化 CI/CD,总结了这 5 个坑
前端·github·自动化运维
江畔柳前堤5 小时前
github实战指南02-仓库管理与 Issue
人工智能·深度学习·github·信号处理·caffe·wps·issue
一只齐刘海的猫6 小时前
【Leetcode】找到字符串中所有字母异位词
算法·leetcode·职场和发展
海清河晏1116 小时前
数据结构 | 八大排序
数据结构·算法·排序算法
江畔柳前堤6 小时前
github实战指南07-CLI 与高级技巧
前端·人工智能·chrome·深度学习·github·caffe·issue
Frank学习路上6 小时前
【C++】面试:关键字与语法特性
c++·面试
右耳朵猫AI7 小时前
GitHub周趋势2026W23 | last30days-skill AI搜索、headroom令牌压缩、apple/container开源
人工智能·开源·github