`

HBase之旅四:HBase MapReduce实例分析(转自:Taobao QA Team)

 
阅读更多

引言
跟Hadoop的无缝集成使得使用MapReduce对HBase的数据进行分布式计算非常方便,本文将以前面的blog示例,介绍HBase下MapReduce开发要点。很好理解本文前提是你对Hadoop MapReduce有一定的了解,如果你是初次接触Hadoop MapReduce编程,可以参考http://qa.taobao.com/?p=10523 这篇文章来建立基本概念。
HBase MapReduce核心类介绍
首先一起来回顾下MapReduce的基本编程模型,

可以看到最基本的是通过Mapper和Reducer来处理KV对,Mapper的输出经Shuffle及Sort后变为Reducer的输入。除了Mapper和Reducer外,另外两个重要的概念是InputFormat和OutputFormat,定义了Map-Reduce的输入和输出相关的东西。HBase通过对这些类的扩展(继承)来方便MapReduce任务来读写HTable中的数据。

实例分析
我们还是以最初的blog例子来进行示例分析,业务需求是这样:找到具有相同兴趣的人,我们简单定义为如果author之间article的tag相同,则认为两者有相同兴趣,将分析结果保存到HBase。除了上面介绍的blog表外,我们新增一张表tag_friend,RowKey为tag,Value为authors,大概就下面这样。


我们省略了一些跟分析无关的Column数据,上面的数据按前面描述的业务需求经过MapReduce分析,应该得到下面的结果

实际的运算过程分析如下
代码实现
有了上面的分析,代码实现就比较简单了。只需以下几步

  • 定义Mapper类继承TableMapper,map的输入输出KV跟上面的分析一致。
  • public static class Mapper extends TableMapper <ImmutableBytesWritable, ImmutableBytesWritable> {
     public Mapper() {}
     @Override
     public void map(ImmutableBytesWritable row, Result values,Context context) throws IOException {
        ImmutableBytesWritable value = null;
        String[] tags = null;
        for (KeyValue kv : values.list()) {
          if ("author".equals(Bytes.toString(kv.getFamily()))
          && "nickname".equals(Bytes.toString(kv.getQualifier()))) {
          value = new ImmutableBytesWritable(kv.getValue());
          }
          if ("article".equals(Bytes.toString(kv.getFamily()))
          && "tags".equals(Bytes.toString(kv.getQualifier()))) {
            tags = Bytes.toString(kv.getValue()).split(",");
          }
       }
        for (int i = 0; i < tags.length; i++) {
          ImmutableBytesWritable key = new ImmutableBytesWritable(
          Bytes.toBytes(tags[i].toLowerCase()));
          try {
              context.write(key,value);
          } catch (InterruptedException e) {
             throw new IOException(e);
            }
          }
       }
    }

  • 定义Reducer类继承TableReducer,reduce的输入输出KV跟上面分析的一致。

  • public static class Reducer extends TableReducer <ImmutableBytesWritable, ImmutableBytesWritable, ImmutableBytesWritable> {
     @Override
     public void reduce(ImmutableBytesWritable key,Iterable values,
       Context context) throws IOException, InterruptedException {
      String friends="";
      for (ImmutableBytesWritable val : values) {
       friends += (friends.length()>0?",":"")+Bytes.toString(val.get());
      }
      Put put = new Put(key.get());
      put.add(Bytes.toBytes("person"), Bytes.toBytes("nicknames"),
      Bytes.toBytes(friends));
      context.write(key, put);
     }
    }

  • 在提交作业时设置inputFormat为TableInputFormat,设置outputFormat为TableOutputFormat,可以借助TableMapReduceUtil类来简化编码。
  • public static void main(String[] args) throws Exception {
     Configuration conf = new Configuration();
     conf = HBaseConfiguration.create(conf);
     Job job = new Job(conf, "HBase_FindFriend");
     job.setJarByClass(FindFriend.class);
     Scan scan = new Scan();
     scan.addColumn(Bytes.toBytes("author"),Bytes.toBytes("nickname"));
     scan.addColumn(Bytes.toBytes("article"),Bytes.toBytes("tags"));
     TableMapReduceUtil.initTableMapperJob("blog", scan,FindFriend.Mapper.class,
      ImmutableBytesWritable.class, ImmutableBytesWritable.class, job);
     TableMapReduceUtil.initTableReducerJob("tag_friend",FindFriend.Reducer.class, job);
     System.exit(job.waitForCompletion(true) ? 0 : 1);
    }

    小结
    本文通过实例分析演示了使用MapReduce分析HBase的数据,需要注意的这只是一种常规的方式(分析表中的数据存到另外的表中),实际上不局限于此,不过其他方式跟此类似。如果你进行到这里,你肯定想要马上运行它看看结果,在下篇文章中将介绍如何在模拟集群环境下本机运行MapReduce任务进行测试。

    分享到:
    评论

    相关推荐

      HBase MapReduce完整实例.rar

      通过这个实例,学习者可以深入了解HBase与MapReduce的整合过程,掌握如何利用MapReduce进行HBase数据的批处理,以及如何设计和优化MapReduce任务以提高处理效率。这对于大数据开发人员来说,是一份非常有价值的参考...

      mapreduce方式入库hbase hive hdfs

      mapreduce方式入库hbase hive hdfs,速度很快,里面详细讲述了代码的编写过程,值得下载

      HBase MapReduce完整实例

      在HBase中,MapReduce主要用于批量导入/导出数据、查询优化以及复杂的分析任务。通过HBase的TableInputFormat和TableOutputFormat,MapReduce作业可以直接读取和写入HBase表。Map阶段可以对表中的行或列族进行操作,...

      Hbase权威指南(HBase: The Definitive Guide)

      - **MapReduce集成**:HBase支持MapReduce任务直接对存储在HBase中的数据进行处理,这大大简化了数据处理流程,提高了效率。 #### 四、HBase的关键特性 - **可扩展性**:HBase能够轻松地扩展到数百甚至数千台服务器...

      hbase导入话单数据mapreduce函数实现执行过程实例(博客附件)

      标题中的“hbase导入话单数据mapreduce函数实现执行过程实例”揭示了本文将探讨如何使用MapReduce在HBase中导入大数据,特别是话单记录。HBase是一个分布式、版本化的NoSQL数据库,常用于处理大规模的数据。...

      HBase学习利器:HBase实战

      ### HBase学习利器:HBase实战 #### 一、HBase简介与背景 HBase是Apache Hadoop生态系统中的一个分布式、可扩展的列族数据库,它提供了类似Bigtable的能力,能够在大规模数据集上进行随机读写操作。HBase是基于...

      HDFS+MapReduce+Hive+HBase十分钟快速入门.pdf

      HDFS+MapReduce+Hive+HBase十分钟快速入门.pdf

      Hbase:HBase MapReduce投影

      标题中的“Hbase:HBase MapReduce投影”是指在HBase数据存储系统中,利用MapReduce框架进行数据处理的一种技术。MapReduce是Google提出的一种分布式计算模型,常用于大数据处理,而HBase则是一个基于列族的分布式...

      MapReduce on Hbase

      由于HBase是建立在Hadoop生态系统之上,因此它可以和Hadoop的其他组件,如MapReduce,很好地协同工作。 Hadoop MapReduce是Hadoop的核心组件之一,它提供了编程模型,允许开发者以分布式方式进行复杂的数据处理。在...

      HBase-SparkStreaming:从HBase表读取并写入HBase表的简单Spark Streaming项目

      HBase-SparkStreaming 从HBase表读取并写入HBase表的简单Spark Streaming项目 #Prereqs运行 创建一个要写入的hbase表:a)启动hbase shell $ hbase shell b)创建表create'/ user / chanumolu / sensor',{NAME =&gt;'...

      HBase基本操作 Java代码

      HBase基本操作 增删改查 java代码 要使用须导入对应的jar包

      hbase用于查询客户端工具

      7. **HBase MapReduce**:MapReduce是Hadoop处理大数据的主要工具,HBase与MapReduce结合可以进行批量数据处理和分析。通过编写MapReduce作业,可以对HBase表进行大规模的数据导入和导出,或者执行复杂的数据分析...

      HDFS+MapReduce+Hive+HBase十分钟快速入门

      HDFS+MapReduce+Hive+HBase十分钟快速入门,包括这几个部分的简单使用

      HDFS 通过mapreduce 进行 HBase 导入导出

      标题 "HDFS 通过 mapreduce 进行 HBase 导入导出" 涉及的是大数据处理领域中的两个重要组件——Hadoop Distributed File System (HDFS) 和 HBase,以及它们之间的数据交互。HDFS 是 Hadoop 的分布式文件系统,而 ...

      hbase shell常用命令汇总

      ### HBase Shell 常用命令详解 #### 一、HBase Shell 概述 HBase Shell 是一个基于命令行的工具,用于与HBase进行交互。它提供了一系列丰富的命令来执行基本的数据管理任务,例如创建表、插入数据、查询数据等。...

      基于MapReduce和HBase的海量网络数据处理.pdf

      基于MapReduce和HBase的海量网络数据处理 大数据时代,网络数据的处理和分析变得越来越重要。传统的网络数据处理模式已经无法满足大数据量的需求,需要寻求更高效的网络数据计算模式和数据存储模式。基于MapReduce...

      结合MapReduce和HBase的遥感图像并行分布式查询.pdf

      【标题】:“结合MapReduce和HBase的遥感图像并行分布式查询” 【描述】:“资源达人分享计划” 【标签】:“分布式 分布式系统 分布式开发 参考文献 专业指导” 本文介绍了一种结合MapReduce和HBase的遥感图像...

    Global site tag (gtag.js) - Google Analytics