Hadoop 学习研究(三): MR程序的基础编写和提交
来源:互联网 发布:测试周围辐射软件 编辑:程序博客网 时间:2024/06/05 11:15
Mapreduce初析
Mapreduce是一个计算框架,既然是做计算的框架,那么表现形式就是有个输入(input),mapreduce操作这个输入(input),通过本身定义好的计算模型,得到一个输出(output),这个输出就是我们所需要的结果。
我们要学习的就是这个计算模型的运行规则。在运行一个mapreduce计算任务时候,任务过程被分为两个阶段:map阶段和reduce阶 段,每个阶段都是用键值对(key/value)作为输入(input)和输出(output)。而程序员要做的就是定义好这两个阶段的函数:map函数 和reduce函数。
Map实现:默认文本行读取,将每个单词进行提取,并且计数为1
- public void map(LongWritable key, Text value, Context context)
- throws IOException, InterruptedException {
- String line = value.toString();
- StringTokenizer token = new StringTokenizer(line);
- while (token.hasMoreTokens()) {
- word.set(token.nextToken());
- context.write(word, one);
- }
- }
在Map --> Reduce过程中,如果不对框架进行sort和Group等进行额外的设置,框架会自动按照key值对value进行迭代,生成value值列表。
Reduce实现:对key,和相应的Iterable<>值进行相加,
- public void reduce(Text key, Iterable<IntWritable> values,
- Context context) throws IOException, InterruptedException {
- int sum = 0;
- for (IntWritable val : values) {
- sum += val.get();
- }
- context.write(key, new IntWritable(sum));
- }
程序驱动模式:
- Configuration conf = new Configuration();
- Job job = new Job(conf);
- job.setJarByClass(WordCount.class);
- job.setJobName("wordcount");
- job.setOutputKeyClass(Text.class);
- job.setOutputValueClass(IntWritable.class);
- job.setMapperClass(WordCountMap.class);
- job.setReducerClass(WordCountReduce.class);
- job.setInputFormatClass(TextInputFormat.class);
- job.setOutputFormatClass(TextOutputFormat.class);
- FileInputFormat.addInputPath(job, new Path(args[0]));
- FileOutputFormat.setOutputPath(job, new Path(args[1]));
- job.waitForCompletion(true);
- hadoop@ubuntu:~$ hadoop fs -cat wcoutput3/part-r-00000
- !! 2
- !ci.*.*.us 1
- !co.*.*.us 1
- !town.*.*.us 1
- "AS 22
- "Accept" 1
- "Accept-Language" 1
- "License"); 22
- "NOW" 1
- "WiFi" 1
- "Z" 1
- "all" 1
- "content" 1
- "delete 1
- "delimiter" 1
在Hadoop中常用的命令有如下几种:
hadoop fs -ls //列出文件
hadoop fs -put 文件名 文件在hdfs上地址
hadoop fs -get 文件名 //下载文件
hadoop fs -rm -r 文件目录 //删除某个目录
hadoop jar 文件.jar 执行的类名 //在集群上执行hadoop任务
yarn application -kill JobID号 //在集群上kill一个应用(别把别人提交的应用kill了)
yarn logs -applicationId app的ID号 //查看某个应用的日志
日志的查看也可以在你的hadoop安装目录下 logs中进行查看,里面有app的,有资源管理器、namenode、datanode、historyserver等。如果一个应用程序出现什么问题,都可以对日志文件进行查看来判断问题的所在。
Hadoop中MR程序的几种提交运行模式
1:在Windows的eclipse里面直接运行main方法,就会将job提交给本地执行器localjobrunner执行
----输入输出数据可以放在本地路径下(c:/wc/srcdata/)
----输入输出数据也可以放在hdfs中(hdfs://weekend110:9000/wc/srcdata)
2:在Linux的eclipse里面直接运行main方法,但是不要添加yarn相关的配置文件,也会提交给localjobrunner执行
----输入输出数据可以放在本地路径下(/home/Hadoop/wc/srcdata/)
----输入输出数据也可以放在hdfs中(hdfs://weekend110:9000/wc/srcdata)
集群模式运行
1:将工程打成jar包,上传到服务器,然后用 hadoop 命令提交 hadoop jar wc.jar cn.intsmaze.hadoop.mr.wordcount.WCRunner
程序编写好以后要打包成jar包放到 hadoop集群 上进行运行。这里打包的jar包名为wc.jar。
先把文件上传到linux目录,然后在该目录下使用指令将该jar分发到hadoop集群中并指定运行哪一个程序。
hadoop jar wc.jar cn.intsmaze.hadoop.mr.WCRunner(指定运行java类的完整路径)这个时候程序就执行了。
2:在linux的eclipse中直接运行main方法,也可以提交到集群中去运行,但是,必须采取以下措施:
----在工程src目录下加入 mapred-site.xml 和 yarn-site.xml (这两个文件在搭建hdfs时修改了的见hdfs文件夹下的搭建日志)
----将工程打成jar包(wc.jar),同时在main方法中添加一个conf的配置参数
Configuration conf = newConfiguration();conf.set("mapreduce.job.jar","wc.jar");
JAR包的位置要在运行程序的工程里面。
3:在windows的eclipse中直接运行main方法,也可以提交给集群中运行,但是因为平台不兼容,需要做很多的设置修改(很麻烦忽略)
----要在windows中存放一份hadoop的安装包(解压好的)
----要将其中的lib和bin目录替换成根据你的windows版本重新编译出的文件
----再要配置系统环境变量 HADOOP_HOME 和 PATH
----修改YarnRunner这个类的源码
- Hadoop 学习研究(三): MR程序的基础编写和提交
- Hadoop中MR程序的几种提交运行模式
- Hadoop MR程序学习笔记
- 使用hadoop编写日志分析MR程序
- 使用hadoop编写日志分析MR程序
- Hadoop实战(四) 编写MR程序
- 如何编写MR程序
- MR程序编写
- Hadoop上编写mr计算
- 用 Python 编写 Hadoop MR
- 文章标题 Hadoop:编写一个求和排序的MR
- MR程序的几种提交运行模式
- MR程序的几种提交运行模式
- MR程序的几种提交运行模式
- MR程序的几种提交运行模式
- hadoop运行MR程序笔记
- Hadoop(08) MR入门程序
- hadoop MR的过程
- 对抗神经网络之对抗卷积神经网络[2]
- 微信小程序:设置启动页
- 分布式集群系统下的高可用session解决方案
- mybatis组件的生命周期
- SQLserver无法使用ip访问问题
- Hadoop 学习研究(三): MR程序的基础编写和提交
- Android笔记_Menu菜单
- kerberos认证原理---讲的非常细致,易懂
- 51Nod
- Android中的selector&&shape
- OWASP TOP 10
- 使用extundelete恢复被删文件
- 编码不统一造成的乱码问题(客户端,服务器端。。网页,浏览器)
- 大学生程序设计邀请赛(华东师范大学)-F-贪心