设为首页 加入收藏

TOP

对HBase数据库的操纵(MapReduce)
2019-05-14 13:42:07 】 浏览:66
Tags:HBase 数据库 操纵 MapReduce
版权声明:本文来自行者(http://blog.csdn.net/liuyuan185442111),转载请注明出处。 https://blog.csdn.net/liuyuan185442111/article/details/46869619

操纵HBase数据库有如下几种方式:其一是使用hbase shell,其二是使用Java API,其三是通过MapReduce。另外HBase还提供了Avro,REST和Thrift接口,不过一般用的较少。
《HBase操作》和[《如何用MapReduce程序操作》]hbase(http://blog.csdn.net/liuyuan185442111/article/details/45306193)中已有部分描述。下面对MapReduce操纵HBase做一个总结。

org.apache.hadoop.hbase.mapreduce包中的类和工具有利于将HBase作为MapReduce作业的源/输出。

TableInputFormat类将数据表按照region分割成 split,既有多少个regions就有多个splits。然后将region按行键分成<key,value>对,key值对应于行健,value值为该行所包含的数据。

org.apache.hadoop.hbase.mapreduce.TableInputFormat
继承自
org.apache.hadoop.hbase.mapreduce.TableInputFormatBase
后者又继承自
org.apache.hadoop.mapreduce.InputFormat<Immutable
		    

BytesWritable,Result> org.apache.hadoop.hbase.mapreduce.TableMapper<KEYOUT,VALUEOUT> 继承自 org.apache.hadoop.mapreduce.Mapper<ImmutableBytesWritable,Result,KEYOUT,VALUEOUT> 不过<KEYIN,KEYOUT>被固定为<ImmutableBytesWritable,Result> (org.apache.hadoop.hbase.io.ImmutableBytesWritable) (org.apache.hadoop.hbase.client.Result) Mapper的map函数的前两个参数也被固定: public void map(ImmutableBytesWritable, Result, Context);

如果Mapper需要从HBase中读取数据,可继承TableMapper,然后调用TableMapReduceUtil.initTableMapperJob()来初始化。

使用Mapper读HBase的时候,需传入一个Scan类型的参数,用来确定startRow,stopRow,filter等属性。如:

Scan scan = new Scan();
scan.addFamily(Bytes.toBytes("cfname"));
byte[] startRow = Bytes.toBytes("2011010100000");
byte[] stopRow = Bytes.toBytes("2011010200000");
// 设置开始和结束key
scan.setStartRow(startRow);
scan.setStopRow(stopRow);

TableMapReduceUtil.initTableMapperJob("tablename", scan,
Mapper.class, KEYOUT.class, VALUEOUT.class, job);

输出

TableOutputFormat把Reducer的结果写入HBase。

org.apache.hadoop.hbase.mapreduce.TableReducer<KEYIN,VALUEIN,KEYOUT>
继承自
org.apache.hadoop.mapreduce.Reducer<KEYIN,VALUEIN,KEYOUT,Mutation>
不过VALUEOUT被固定为org.apache.hadoop.hbase.client.Mutation
Reducer的reduce函数的前两个参数也被固定:
public void reduce(KEYIN key, Iterable<VALUEIN> values, Context context);
Mutation的直接派生类有Append, Delete, Increment, Put
是以在reduce函数中调用context.write()时, 其第一个参数可以为null(并没有用到这个参数), 第二个参数可以为Put或Delete

如果Reducer需要向HBase中写入数据,可继承TableReducer类,然后调用TableMapReduceUtil.initTableReducerJob()来初始化。

org.apache.hadoop.hbase.mapreduce.IdentityTableReducer继承自TableReducer,Convenience class that simply writes all values (which must be Put or Delete instances) passed to it out to the configured HBase table,传给IdentityTableReducer的KEY无所谓,VALUE必须是Put或Delete类型。
同时调用setNumReduceTasks函数将Reducer数目设置为0,即可实现在Mapper中写HBase数据库

Put,Delete,Scan,Result均位于org.apache.hadoop.hbase.client中。


编程开发网
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇kafka 下一篇springmvc整合apache-poi实现数据..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

array(4) { ["type"]=> int(8) ["message"]=> string(24) "Undefined variable: jobs" ["file"]=> string(32) "/mnt/wp/cppentry/do/bencandy.php" ["line"]=> int(217) }