问题导读:
1.如何在讲mapreduce函数中的字符串等信息,输出到eclipse控制台?
2.除了使用下文方法,还有其它方法输出到控制台?
3.map中,系统默认接受的value值是什么?
4.reduce输出不是自己想要的结果,可能的原因是什么?
mapreduce不是很好理解,为什么?
因为我们传统编程,运行程序,都在本地,怎么会跑到别的客户端或则服务器那,总之运行程序就是一太电脑。mapreduce牛啊,他竟然可以让一个程序多台电脑一块跑,这也是它的神奇不同之处,同时也让mapreduce蒙上了一层神秘的面纱。
这里我们就来揭开这个面纱。
这里难以理解的地方是什么?它是如何分割的,如何分组、如何分区的,什么shuffer,等等各种概念涌入初学者脑海中,然后就是云里雾里、似看清、又看不清。
这里我们抛弃这些所有的概念,让我们来一个短平快、更直接、更简单的的认识。
记得我们在上学的时候,有一种题型是填空题,而mapreduce就是一个填空式编程。
为什么被认为是填空式编程,因为mapreduce是一个框架,我们所作的就是编写map函数、reduce函数、然后驱动函数main()。
填空,让我们填写的就是map、reduce函数。剩下的则是由整个mapreduce框架来完成。
首先从map函数入手
// map类
static class MyMapper extends
Mapper<LongWritable, Text, Text, LongWritable> {
protected void map(LongWritable key, Text value, Context context)
throws IOException, InterruptedException {
final String[] splited = value.toString().split(" ");
org.apache.hadoop.mapreduce.Counter count= context.getCounter("map中的值value", value.toString());
count.increment(1l);
for (String word : splited) {
context.write(new Text(word), new LongWritable(1L));
}
}
}
我们知道map接受了数据,那么这个数据是是怎么个数据??
假如我们有下面数据
我们map函数如下:
map(LongWritable key, Text value, Context context)
上面有三个参数,其中key是偏移量,这里不是我们的重点,对于Context不了解,可以查看hadoop开发必读:认识Context类的作用.
我们这里重点讲value,这个value到底是什么?
是
还是
还是
我们在做填空题,框架之外的我们还没有看到,所以我需要明白value到底是什么?
下面我们开始运行程序
运行程序,这里让我们犯愁了,为什么,因为在运行这个程序之前,你有环境了吗?没有,一、搭建环境 参考新手指导:Windows上使用Eclipse远程连接Hadoop进行程序开发,首先搭建环境,这里还用到了eclipse插件, 二、插件下载 hadoop-eclipse-plugin-2.2.0.jar 链接: http://pan.baidu.com/s/1sjQ6Nnv 密码: uvwx
更多插件:hadoop家族、strom、spark、Linux、flume等jar包、安装包汇总下载(持续更新)
三、遇到问题 环境搭建好了,我们开发运行程序了,遇到各种问题该如何解决,可参考 Win7 Eclipse调试Centos Hadoop2.2-Mapreduce出现问题解决方案
在window中,我们遇到最多的问题就是缺少 1.winutils.exe 2.hadoop.dll
hadoop-common-2.2.0-bin-master.zip
(273.06 KB, 下载次数: 27, 售价: 2 云币)
|
|