在eclipse和命令⾏运⾏第⼀个WordCount程序实验⼼得创建wordcount程序代码:
package hdWordCount;
import java.io.IOException;
import java.util.StringTokenizer;
import org.f.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.GenericOptionsParser;
public class WordCount {
public static class TokenizerMapper
extends Mapper
{
private final static IntWritable one = new IntWritable(1);
private Text word = new Text();
public void map(Object key, Text value, Context context
) throws IOException, InterruptedException {
StringTokenizer itr = new String());
while (itr.hasMoreTokens()) {
word.Token());
context.write(word, one);
}
}
}
public static class IntSumReducer
extends Reducer
{
private IntWritable result = new IntWritable();
public void reduce(Text key, Iterable
values,
Context context
) throws IOException, InterruptedException {
int sum = 0;
for (IntWritable val : values) {
sum += ();
}
result.set(sum);
context.write(key, result);
}
}
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
if (otherArgs.length < 2) {
[
...]
"); it(2); } Job job = new Job(conf, "word count"); job.setJarByClass(WordCount.class); job.setMapperClass(TokenizerMapper.class); job.setComb
(⼀) 本组总结实验结论:
(1)使⽤eclipse中,执⾏wordcount的程序⽐⽤命令⾏执⾏的程序快。
通过查询资料,发现了如下:Hadoop程序的MR模式可以提供并⾏化运⾏环境,⽽HDFS是并⾏化的基础(HDFS毕竟把⽂
件分割了,⽽local只是存在⼀台机器上),所以,如何在eclipse上跑程序,让其读取HDFS上的⽂件,是⼀个关键。⼀般来
说,要通过设置configuration来设置⽬录是hdfs还是local,如果不设置默认就是local,此时如果把l放⼊
eclipse建的⼯程的话,那么,跑的程序就会在HDFS上了,因为那个xml配置了程序默认的运⾏⽬录,清楚了如何在HDFS
上跑程序,那么下⼀步是如何在eclipse调试程序。
eclipse上运⾏hadoop可以看作有2种模式,第⼀种就是Local模式,也叫本地模式,第⼆种就是我们正式的线上集模式,
当运⾏本地模式的时候,程序并不会被提交到Hadoop集上,⽽是基于单机的模式跑的,但是单机的模式,运⾏的结果仍
在是存储在HDFS上的,只不过没有利⽤hadoop集的资源,单机的模式不要提交jar包到hadoop集上,因此⼀般我们
使⽤local来测试我们的MR程序是否能够正常运⾏,⽽且对于不复杂的程序运⾏的速度⾮常的快,⽐命令⾏提交jar的集模
式快得多,因为少了集的job提交环节。
(1) 在搭建的时候遇到了很多问题,经过整理,以下是本组的总结以及解决⽅法汇总:
1. 在配置hadoop集的时候,从⼀开始搭建的时候,我们在虚拟机安装就遇到安装失败的问题,通过当卸载虚拟机的
时候没有卸载⼲净。我们试过通过各种删除虚拟机表格的软件、注册表⼀⼀删除,但是也没有效。⽽⼜不想重装重装系统,
我们选择重新下载⼀个别的版本的虚拟机,这是完全不影响的。
2. 在配置hadoop集的时候,我们遇到过能ping通8.8.8.8,但是就不能ping域名的时候,到这是因为DNS服务器
没有配置好。
3. 在配置hadoop集的时候,我们发现,如果选择克隆虚拟机需要删掉⽹卡,但是如果想避免解决处理这些⿇烦,可
以不选择克隆虚拟机,直接在本地先复制好,再打开虚拟机,再重新⽣成mac地址,这样会减少各种问题。
hadoop安装详细步骤linux4. 在配置hadoop集的时候,在配置免密钥登陆控制以后,发现还是要输⼊密码,后来发现原因是因为我们没有切换
到waibao的⽤户下,或者是⽤root⽤户进⾏操作,⽽没有严格按照对应的⽤户操作,会遇到很多问题,这是不能粗⼼。
5. 在使⽤命令⾏运⾏wordcount程序的时候,我们可以通过命令上传、下载、删除⽂档以及查看⽂档,发现了如果在
运⾏程序命令输⼊错误(如路径问题等),会出现报错。⽽如果是⾮waibao的⽤户下,hadoop fs–命令 的命令是输⼊没
效的。
6. 在使⽤命令⾏运⾏wordcount程序的时候,必须要先创建好输出路径⽂件,输⼊路径⽂件等,和eclipse运⾏是不同
的,但是可以代替eclipse运⾏。
7. 在使⽤eclipse运⾏wordcount程序的时候,在使⽤eclipse中,如果遇到例如上传本机⽂档到text⽂档中出现为空的情
况时候,通过调式发现是集启动不成功的原因。
(⼆)本组组员实验体会:
(⼀)组员1:
实验体会:
在⼀开始的时候我们组在虚拟机互相ping问题上解决我们使⽤了三天的时间去解决,最后才处理成功,原因是桥接模式
和模式的原理不清楚,因此遇到很多问题,最后我们通过对这三种模式的上⽹百度了解,才了解到其中的是怎么运⾏,了解到原理后操作的效率⼤⼤提⾼。
在配置hadoop的时候出现免密钥发送不成功、hadoop启动集失败的问题我们使⽤了⼏近⼀个星期的时间去解决,总结到的原因是因为没有仔细看清楚配置⽂档的要求,如在什么⽤户下操作,导致配置失败,这个是粗⼼的原因。
在使⽤命令⾏运⾏hadoop程序的时候,我们遇到了上传⽂档失败的问题,原因是命令⾏不清楚意思以及怎么使⽤,通过我们详细了解了命令的意思以后,以及怎么编写规范,才成功地运⾏。
最后,这次实验,我收获了很多,靠着我们组员之间互相搜索各种⽹上资料,以及互相分享学习资源以及交流⾃⼰学习到的、搜索⽹上到实验⼼得,互相学习,⼀起通过⾃⼰解决了各种问题,以及了解到各种问题的解决⽅法记录好,深刻地了解到必须先了解原理,后才会提⾼效率,通过⾃⼰去学习,学习到了⽐课堂上学习的更多。
(⼆) 组员2:
实验体会:
在⼀开始实验的时候,我们遇到了很多问题,⽽最后通过我们总结,都是因为不够细⼼,不够认真,同时,如果⼀开始没搞清楚原理作,会⼤⼤地拖慢我们的效率。在别的组都在做下⼀个实验的时候,我们还停留在配置桥接模式、模式、配置hadoop的步骤中,⽽我们后来重新回顾了这⼏种模式以后,清楚了这⼏种模式的区别,如在宿舍也如何使⽤ 模式以及桥接模式等。
另外,遇到了这些问题我们反反复复地配置,但是不清楚原理,时间花费很长,后来弄懂了原理以后,我们能对命令、步骤更加深了熟悉。
(三) 组员3:
实验体会:
通过实验,我懂得了如何解决打不开虚拟机,怎么进⾏linux环境配置,怎么进⾏Hadoop的配置部署,还有ping不同等等各种问题。也了解了怎么样在虚拟机上直接创建text⽂件,上传,并查看⽇志⽂件和运⾏结果,怎么⽤命令来创建⽂件、上传⽂件、提交作业、查看运⾏结果。
搜索能⼒是最重要的,要懂得如何搜索到⾃⼰想要的东西很重要,最⼤的感触是,通过⾃⼰搜索⽹上的各种资料去解决问题,虽然时间花费⽐较长时间,但是我们能⼤致清楚其中的原理,以及运⾏是怎么操作,虽然遇到了很多问题,我们需要不急不躁去解决这些问题,这次实验收获很多。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论