永发信息网

HBase如何存取多个版本的值

答案:1  悬赏:0  手机版
解决时间 2021-01-26 14:55
HBase如何存取多个版本的值
最佳答案
WordCountHbaseReaderMapper类继承了TableMapper< Text,Text>抽象类,TableMapper类专门用于完成MapReduce中Map过程与Hbase表之间的操作。此时的map(ImmutableBytesWritable key,Result value,Context context)方法,第一个参数key为Hbase表的rowkey主键,第二个参数value为key主键对应的记录集合,此处的map核心实现是遍历key主键对应的记录集合value,将其组合成一条记录通过contentx.write(key,value)填充到< key,value>键值对中。
详细源码请参考:WordCountHbaseReader\src\com\zonesion\hbase\WordCountHbaseReader.java
public static class WordCountHbaseReaderMapper extends
TableMapper<Text,Text>{

@Override
protected void map(ImmutableBytesWritable key,Result value,Context context)
throws IOException, InterruptedException {
StringBuffer sb = new StringBuffer("");
for(Entry<byte[],byte[]> entry:value.getFamilyMap("content".getBytes()).entrySet()){
String str = new String(entry.getValue());
//将字节数组转换为String类型
if(str != null){
sb.append(new String(entry.getKey()));
sb.append(":");
sb.append(str);
}
context.write(new Text(key.get()), new Text(new String(sb)));
}
}
}

3、 Reducer函数实现
此处的WordCountHbaseReaderReduce实现了直接输出Map输出的< key,value>键值对,没有对其做任何处理。详细源码请参考:WordCountHbaseReader\src\com\zonesion\hbase\WordCountHbaseReader.java
public static class WordCountHbaseReaderReduce extends Reducer<Text,Text,Text,Text>{
private Text result = new Text();
@Override
protected void reduce(Text key, Iterable<Text> values,Context context)
throws IOException, InterruptedException {
for(Text val:values){
result.set(val);
context.write(key, result);
}
}
}

4、 驱动函数实现
与WordCount的驱动类不同,在Job配置的时候没有配置job.setMapperClass(),而是用以下方法执行Mapper类: TableMapReduceUtil.initTableMapperJob(tablename,scan,WordCountHbaseReaderMapper.class, Text.class, Text.class, job);
该方法指明了在执行job的Map过程时,数据输入源是hbase的tablename表,通过扫描读入对象scan对表进行全表扫描,为Map过程提供数据源输入,通过WordCountHbaseReaderMapper.class执行Map过程,Map过程的输出key/value类型是 Text.class与Text.class,最后一个参数是作业对象。特别注意:这里声明的是一个最简单的扫描读入对象scan,进行表扫描读取数据,其中scan可以配置参数,这里为了例子简单不再详述,用户可自行尝试。
详细源码请参考:WordCountHbaseReader\src\com\zonesion\hbase\WordCountHbaseReader.java
public static void main(String[] args) throws Exception {
String tablename = "wordcount";
Configuration conf = HBaseConfiguration.create();
conf.set("hbase.zookeeper.quorum", "Master");
String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
if (otherArgs.length != 1) {
System.err.println("Usage: WordCountHbaseReader <out>");
System.exit(2);
}
Job job = new Job(conf, "WordCountHbaseReader");
job.setJarByClass(WordCountHbaseReader.class);
//设置任务数据的输出路径;
FileOutputFormat.setOutputPath(job, new Path(otherArgs[0]));
job.setReducerClass(WordCountHbaseReaderReduce.class);
Scan scan = new Scan();
TableMapReduceUtil.initTableMapperJob(tablename,scan,WordCountHbaseReaderMapper.class, Text.class, Text.class, job);
//调用job.waitForCompletion(true) 执行任务,执行成功后退出;
System.exit(job.waitForCompletion(true) ? 0 : 1);

}

5、部署运行
1)启动Hadoop集群和Hbase服务
[hadoop@K-Master ~]$ start-dfs.sh #启动hadoop HDFS文件管理系统
[hadoop@K-Master ~]$ start-mapred.sh #启动hadoop MapReduce分布式计算服务
[hadoop@K-Master ~]$ start-hbase.sh #启动Hbase
[hadoop@K-Master ~]$ jps #查看进程
22003 HMaster
10611 SecondaryNameNode
22226 Jps
21938 HQuorumPeer
10709 JobTracker
22154 HRegionServer
20277 Main
10432 NameNode
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
枢木朱雀怎么念?
停车场(御景·天骄西北)地址在什么地方,
成语豕分蛇断的意思是什么啊?有知道释义的请
自来水是纯净物
谬误在一定条件下可以转化为真理这是什么观点
停车场(璧山区卫生局北)地址好找么,我有些事
爱莲说文章结尾写法的用意爱莲说文章结尾“莲
“大明宣德年制”铜香炉为什么这么值钱有价值
女阴的病症多从何脏论治A.心脾B.肺肾C.心肝D.
过生日,到底是该生日的人请客还是朋友请客
痣上面长了个包
怎么能把木门上的油漆擦掉,把门擦光亮
停车场(璧山区规划局西南)地址有知道的么?有
成语视若路人的意思是什么啊?有知道释义的请
长沙南站离岳麓山五星艺校多远坐什么车
推荐资讯
同一草场上的牛和羊之间所形成的关系是CA. 合
GSM如果要批量修改频点的话,要是用什么命令
成语寻风捉影的意思是什么啊?有知道释义的请
跳跳堂艺术中心(宁波鄞州区)地址在什么地方,
即墨市温泉镇温泉中学地址有知道的么?有点事
夜店之王升到10级多长时间?
红皇后和白皇后谁是正统
南葛足球俱乐部地址在哪,我要去那里办事
岩头小学(忻州繁峙县)地址好找么,我有些事要
左边土字旁右边一个鸟字怎么打
上海健身教练培训学校,567GO、锐星、体适能
【英模】我经常回忆起英模会上的热情场面(修
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?