文档章节

HBase(八):HBaseAndMapReduce(二)

berg-dm
 berg-dm
发布于 2016/05/19 22:58
字数 438
阅读 58
收藏 2

HBaseAndMapReduce(二):

    首先从HBase中选定某张表,比如blog,然后限定表中的某些列,比如昵称nickname,标签tags,将这些列的数据内容写入到HDFS文件中去。

    本文的HBase数据表blog结构来自于 http://my.oschina.net/gently/blog/678232这篇博文中的测试数据。。。。。。。。。

/**
 * 选定HBase中的某张表,限定列,然后将其内容数据写入到HDFS文件中。
 * */
public class HBaseAndMapReduce2 {

	public static void main(String[] args) throws Exception {
		System.exit(run());
	}

	public static int run() throws Exception {
		Configuration conf = new Configuration();
		conf = HBaseConfiguration.create(conf);
		conf.set("hbase.zookeeper.quorum", "192.168.226.129");

		Job job = Job.getInstance(conf, "findFriend");
		job.setJarByClass(HBaseAndMapReduce2.class);


		Scan scan = new Scan();
		//取对业务有用的数据 tags, nickname
		scan.addColumn(Bytes.toBytes("article"), Bytes.toBytes("tags"));
		scan.addColumn(Bytes.toBytes("author"), Bytes.toBytes("nickname"));

		//ImmutableBytesWritable来自hbase数据的类型
		/**
		 * public static void initTableMapperJob(String table, Scan scan,
		 * 		Class<? extends TableMapper> mapper,
		 * 		Class<?> outputKeyClass,
		 * 		Class<?> outputValueClass, Job job)
		 * */
		//确保 blog 表存在, 且表结构与本文一样。 
		TableMapReduceUtil.initTableMapperJob("blog", scan, FindFriendMapper.class, 
				Text.class,  Text.class, job);
		DateFormat df = new SimpleDateFormat( "yyyyMMddHHmmssS" );
		
		FileOutputFormat.setOutputPath(job, new Path("hdfs://192.168.226.129:9000/hbasemapreduce1/" +df.format( new Date() )));

		job.setReducerClass(FindFriendReducer.class);
		
		return job.waitForCompletion(true) ? 0 : 1;
	}
    
    // 输入输出的键值
	public static class FindFriendMapper extends TableMapper<Text, Text>{
		//key是hbase中的行键
		//value是hbase中的所行键的所有数据
		@Override
		protected void map(
				ImmutableBytesWritable key,
				Result value,
				Mapper<ImmutableBytesWritable, Result,Text, Text>.Context context)
						throws IOException, InterruptedException {

			Text v = null;
			String[] kStrs = null;
			List<Cell> cs = value.listCells();
			for (Cell cell : cs) {
				System.out.println( "Cell--->: "+cell );
				if ("tags".equals(Bytes.toString(CellUtil.cloneQualifier(cell)))){
					kStrs = Bytes.toString(CellUtil.cloneValue(cell)).split(",");
				}else if ("nickname".equals(Bytes.toString(CellUtil.cloneQualifier(cell)))){
					v = new Text(CellUtil.cloneValue(cell));
				}
			}

			for (String kStr : kStrs) {
				context.write(new Text(kStr.toLowerCase()), v);
			}

		}
	}

	public static class FindFriendReducer extends Reducer<Text, Text, Text, Text>{
		@Override
		protected void reduce(Text key, Iterable<Text> values,
				Reducer<Text, Text, Text, Text>.Context context)
						throws IOException, InterruptedException {
			System.out.println(  "key--->"+key);
			StringBuilder sb = new StringBuilder();
			for (Text text : values) {
				System.out.println(  "value-->"+text);
				sb.append((sb.length() > 0 ? ",":"") + text.toString());
			}
			context.write(key, new Text(sb.toString()));
		}
	}
}

 

输出结构:

hadoop	Berg-OSChina,BergBerg
hbase	OSChina,BergBerg
zookeeper	OSChina,BergBerg

 

© 著作权归作者所有

berg-dm
粉丝 26
博文 98
码字总数 88970
作品 0
深圳
程序员
私信 提问
hbase 数据库简介安装与常用命令的使用

一:hbase 简介与架构功能 二:hbase 安装与配置 三:hbase 常见shell 命令操作 一:hbase 简介与架构功能 1.1 为什么要使用hbase 数据库 1.2 hbase 简介: 1.3 HBase与Hadoop的对比 1.4 HB...

flyfish225
2018/04/12
0
0
一文让您全面了解清楚HBase数据库的所有知识点,值得收藏!

欢迎关注大数据和人工智能技术文章发布的微信公众号:清研学堂,在这里你可以学到夜白(作者笔名)精心整理的笔记,让我们每天进步一点点,让优秀成为一种习惯! 一、HBase基本概念:列式数据...

李金泽
2018/03/04
0
0
HBase原厂专家服务,开放免费申请,先到先得!

针对HBase技术门槛较高问题,阿里云HBase服务推出免费原厂专家服务,通过提供原厂专家服务和全套完善HBase运维工具,保障各种极限场景下HBase数据库平稳,可靠运行。现在申请,先到先得! 1、...

所在jason
2018/06/28
0
0
搭建HBase的本地模式、伪分布式、全分布式和HA模式

一、安装HBase: 我这里选择的是hbase-1.3.1-bin.tar.gz版本解压HBase: tar -zxvf hbase-1.3.1-bin.tar.gz -C ~/training 配置HBase的环境变量: export HBASE_HOME=/root/training/hbase-1.......

李金泽
2018/07/05
0
0
中国HBase技术社区第九届meetup(北京站)最全资料下载

2018年12月23日14点,我们在北京朝阳360公司A座一层发布厅举办了中国HBase技术社区第九届meetup-HBase典型应用场景与实践。 沙龙全程视频在线观看:https://yq.aliyun.com/live/715 本期活动...

hbase小能手
2018/12/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

全面兼容IE6/IE7/IE8/FF的CSS HACK写法

浏览器市场的混乱,给设计师造成很大的麻烦,设计的页面兼容完这个浏览器还得兼容那个浏览器,本来ie6跟ff之间的兼容是很容易解决的。加上个ie7会麻烦点,ie8的出现就更头疼了,原来hack ie...

前端老手
25分钟前
5
0
常用快递电子面单批量打印api接口对接demo-JAVA示例

目前有三种方式对接电子面单: 1.快递公司:各家快递公司逐一对接接口 2.菜鸟:支持常用15家快递电子面单打印 3.快递鸟:仅对接一次,支持常用30多家主流快递电子面单打印 目前也是支持批量打...

程序的小猿
28分钟前
6
0
Yii 框架中rule规则必须搭配验证函数才能使用

public $store_id;public $user_id;public $page;public $limit;public $list;public $mch_list;public $cart_id;public $is_community;public $shop_id;public $cart_typ......

chenhongjiang
30分钟前
4
0
Flutter使用Rammus实现阿里云推送

前言: 最近新的Flutter项目有“阿里云推送通知”的需求,就是Flutter的App启动后检测到有新的通知,点击通知栏然后跳转到指定的页面。在这里我使用的是第三方插件Rammus来实现通知的推送,之...

EmilyWu
30分钟前
43
0
Knative 实战:三步走!基于 Knative Serverless 技术实现一个短网址服务

短网址顾名思义就是使用比较短的网址代替很长的网址。维基百科上面的解释是这样的: 短网址又称网址缩短、缩短网址、URL 缩短等,指的是一种互联网上的技术与服务,此服务可以提供一个非常短...

阿里巴巴云原生
45分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部