hbase入门学习

        前面已对hadoop的MapReduce有了个大概认识,下面在看一下hbase中的MapReduce,TableMapper是继承Hadoop中的Mapper类的,TableReducer是继承Hadoop中的Reducer类的,详见hbase官网API详细说明。

java.lang.Object
  org.apache.hadoop.mapreduce.Mapper<ImmutableBytesWritable,Result,KEYOUT,VALUEOUT>
      org.apache.hadoop.hbase.mapreduce.TableMapper<KEYOUT,VALUEOUT>
       从上面可以看出,TableMapper中的两个参数是输出参数,在main函数中的initTableMapperJob函数中mapper参数后面的两个参数就是和TableMapper中的两个参数对应的,输出参数keyout和valueout是可以自定义的。在TableMapper函数中,如果要实现Map应用,那就要用到父类的map函数,而从继承关系来看,map方法中的keyin和valuein应该分别对应ImmutableBytesWritable类型和Result类型,这是固定的,这个是和hadoop中的MapReduce参数的区别之处,hadoop中的MapReduce输入和输出参数都可以自定义,而map方法中的最后一个参数context,在最后写入输出时context.write(keyout,valueout),要与TableMapper中定义的两个输出参数对应
java.lang.Object
  org.apache.hadoop.mapreduce.Reducer<KEYIN,VALUEIN,KEYOUT,org.apache.hadoop.io.Writable>
      org.apache.hadoop.hbase.mapreduce.TableReducer<KEYIN,VALUEIN,KEYOUT>
        TableReducer中的参数keyin和valuein类型分别对应TableMapper中的输出keyout和valueout类型,如果要实现Reduce应用,那就要用到父类的Reducer函数,这个函数中的三个参数依次是keyin,valuein,context,keyin和valuein分别对应TableReducer中的前两个参数KEYIN和VALUEIN,TableReducer中的第三个参数可以自定义类型,与context.write参数中的key对应,而context中的value类型必须是Writable类型才行。 下面有三篇关于hbase建表查询的例子,结合参考资料,自己实现了一个计算平均分的MapReduce的程序
     参考资料1   参考资料2   参考资料3
       因为只是在现有例子上的一个小改动,只说一下实现思路,代码就不贴出来了,大家也可以结合上面的例子,写一个自己的例子练练手。 参考资料3中有建scores表的代码,表结构rowkey是人名,列簇grade和cource,course下有列名math和art,建表结果如下:

name grad      course:math   course:art

Tom    1         87                    97

Jerry   2            100                  80

       如果要按人名来算平均分,则在map过程中,将row作为key输出即作为reduce的keyin输入,将分数作为value输出,取分数需要遍历result,因为是两列,这样在reduce过程中,就可以按key累加分数,求出按人名统计分数的平均值;如果要按科目来算平均分,则在map过程中,遍历每行记录result,取出列名作为key输出,同时取出列名的value作为value输出,这样在reduce过程中,就可以按key累加,求出按科目的平均值

你可能感兴趣的:(Math,mapreduce,hadoop,api,hbase)