MapReduce分布式编程框架
一、MapReduce分布式编程框架及yarn集群搭建
1.大数据解决的问题?
海量数据的存储:hadoop->分布式文件系统HDFS
海量数据的计算:hadoop->分布式计算框架MapReduce 2.什么是MapReduce?
分布式程序的编程框架,java-->ssh ssm,目的:简化开发!
是基于hadoop的数据分析应用的核心框架。
mapreduce的功能:将用户编写的业务逻辑代码和自带默认组件整合成一个完整的
分布式运算程序,并发的运行在hadoop集群上。 3.MapReduce的优缺点
优点:
(1)易于编程
(2)良好的拓展性
(3)高容错性
(4)适合处理PB级别以上的离线处理 缺点:
(1)不擅长做实时计算
(2)不擅长做流式计算(mr的数据源是静态的)
(3)不支持DAG(有向图)计算(spark) 4.自动化调度平台yarn(MapReduce程序的运行平台)
MapReduce程序应该在多台机器上运行启动,而且要先执行maptask,等待每个maptask都处理完成后
还要启动很多个reducetask,这个过程要用户手动调用任务不太现实,
需要一个自动化的任务调度平台-->hadoop当中2.x中提供了一个分布式调度平台-YARN 5.搭建yarn集群
(1)修改配置文件 yarn-site.xml
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hd09-1</value>
</property> <property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property> (2)然后复制到每台机器 $PWD 当前目录
scp yarn-site.xml root@hd09-2:$PWD
scp yarn-site.xml root@hd09-3:$PWD (3)修改slaves文件 然后在hd09-1上,修改hadoop的slaves文件,列入要启动nodemanager的机器
然后将hd09-1到所有机器的免密登陆配置好 (4)脚本启动yarn集群:
启动:
start-yarn.sh
停止:
stop-yarn.sh (5)访问web端口
启动完成后,可以在windows上用浏览器访问resourcemanager的web端口:
http://hd09-1:8088
二、WordCount代码实现
1.Mapper类
package com.css.wc; import java.io.IOException; import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper; /**
* 思路?
* wordcount单词计数
* <单词,1>
*
* 数据传输
*
* KEYIN:数据的起始偏移量0~10 11~20 21~30
* VALUEIN:数据
*
* KEYOUT:mapper输出到reduce阶段k的类型
* VALUEOUT:mapper输出到reduce阶段v的类型
* <China,1><Beijing,1><love,1>
*/
public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable>{
// key 起始偏移量 value 数据 context 上下文
@Override
protected void map(LongWritable key, Text value, Context context)
throws IOException, InterruptedException {
// 1.读取数据
String line = value.toString();
// 2.切割 China love
String[] words = line.split(" ");
// 3.循环的写到下一个阶段<China,1><love,1>
for (String w : words) {
context.write(new Text(w), new IntWritable(1));
}
}
}
2.Reducer类
package com.css.wc; import java.io.IOException; import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer; /**
* 汇总<China,2> <Beijing,2> <love,2>
*/
public class WordCountReducer extends Reducer<Text, IntWritable, Text, IntWritable>{ @Override
protected void reduce(Text key, Iterable<IntWritable> values,
Context context) throws IOException, InterruptedException {
// 1.统计单词出现的次数
int sum = 0;
// 2.累加求和
for (IntWritable count : values) {
// 拿到值累加
sum += count.get();
}
// 3.结果输出
context.write(key, new IntWritable(sum));
}
}
3.Driver类
package com.css.wc; import java.io.IOException; import org.apache.hadoop.conf.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.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; /**
* 驱动类
*/
public class WordCountDriver {
public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
// 1.获取job信息
Configuration conf = new Configuration();
Job job = Job.getInstance(conf);
// 2.获取jar包
job.setJarByClass(WordCountDriver.class);
// 3.获取自定义的mapper与reducer类
job.setMapperClass(WordCountMapper.class);
job.setReducerClass(WordCountReducer.class);
// 4.设置map输出的数据类型
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(IntWritable.class);
// 5.设置reduce输出的数据类型(最终的数据类型)
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
// 6.设置输入存在的路径与处理后的结果路径
FileInputFormat.setInputPaths(job, new Path("c:/in1019"));
FileOutputFormat.setOutputPath(job, new Path("c:/out1019"));
// 7.提交任务
boolean rs = job.waitForCompletion(true);
System.out.println(rs ? 0 : 1);
}
}
4.输入的文件words.txt
I love Beijing
I love China
Beijing is the capital of China
5.输出的文件part-r-00000
Beijing 2
China 2
I 2
capital 1
is 1
love 2
of 1
the 1
MapReduce分布式编程框架的更多相关文章
- 大数据学习day18----第三阶段spark01--------0.前言(分布式运算框架的核心思想,MR与Spark的比较,spark可以怎么运行,spark提交到spark集群的方式)1. spark(standalone模式)的安装 2. Spark各个角色的功能 3.SparkShell的使用,spark编程入门(wordcount案例)
0.前言 0.1 分布式运算框架的核心思想(此处以MR运行在yarn上为例) 提交job时,resourcemanager(图中写成了master)会根据数据的量以及工作的复杂度,解析工作量,从而 ...
- 分布式服务框架 Zookeeper(四)官方编程指南
握草,是不是加了官方两个字就可以唬人了. 使用ZooKeeper开发分布式应用 简介 这篇文档是为了那些想利用ZooKeeper的协调服务来构建分布式应用的开发人员而写滴,不相干的走一边去哈.在这儿有 ...
- Hadoop 综合揭秘——MapReduce 基础编程(介绍 Combine、Partitioner、WritableComparable、WritableComparator 使用方式)
前言 本文主要介绍 MapReduce 的原理及开发,讲解如何利用 Combine.Partitioner.WritableComparator等组件对数据进行排序筛选聚合分组的功能.由于文章是针对开 ...
- Hive数据分析——Spark是一种基于rdd(弹性数据集)的内存分布式并行处理框架,比于Hadoop将大量的中间结果写入HDFS,Spark避免了中间结果的持久化
转自:http://blog.csdn.net/wh_springer/article/details/51842496 近十年来,随着Hadoop生态系统的不断完善,Hadoop早已成为大数据事实上 ...
- [源码解析] 深度学习分布式训练框架 horovod (10) --- run on spark
[源码解析] 深度学习分布式训练框架 horovod (10) --- run on spark 目录 [源码解析] 深度学习分布式训练框架 horovod (10) --- run on spark ...
- Hadoop学习笔记: MapReduce Java编程简介
概述 本文主要基于Hadoop 1.0.0后推出的新Java API为例介绍MapReduce的Java编程模型.新旧API主要区别在于新API(org.apache.hadoop.mapreduce ...
- 轻量级分布式 RPC 框架
@import url(/css/cuteeditor.css); 源码地址:http://git.oschina.net/huangyong/rpc RPC,即 Remote Procedure C ...
- 【转】轻量级分布式 RPC 框架
第一步:编写服务接口 第二步:编写服务接口的实现类 第三步:配置服务端 第四步:启动服务器并发布服务 第五步:实现服务注册 第六步:实现 RPC 服务器 第七步:配置客户端 第八步:实现服务发现 第九 ...
- 分布式服务框架:Zookeeper
Zookeeper是一个高性能,分布式的,开源分布式应用协调服务.它提供了简单原始的功能,分布式应用可以基于它实现更高级的服务,比如同步,配置管理,集群管理,名空间.它被设计为易于编程,使用文件系统目 ...
随机推荐
- python学习笔记(3)--IDLE双击运行后暂停
本来想找一个python的IDE什么的,用过pycharm,vs装python插件,软件都太大了,习惯了用sublime写html,js这样的简直受不了. 一直坚持用着python自带的IDLE,不过 ...
- Cannot proceed with delivery: an existing transporter instance is currently uploading this package
当使用Xcode的Application Loader上传spa到AppStore的过程中,如果临时中断,当你再次进行上传的过程时,就发发现如下现象: Cannot proceed with deli ...
- 幸好会java
转做android的可能性又往前增加了一分.
- Netty系列之Netty百万级推送服务设计要点(转)
1. 背景 1.1. 话题来源 最近很多从事移动互联网和物联网开发的同学给我发邮件或者微博私信我,咨询推送服务相关的问题.问题五花八门,在帮助大家答疑解惑的过程中,我也对问题进行了总结,大概可以归纳为 ...
- Thinkphp3.2 PHPMailer 发送 QQ邮箱 163邮箱
在进入正题这前先看下网易(163)邮箱的服务器地址和端口号 类型 服务器名称 服务器地址 SSL协议端口号 非SSL协议端口号 收件服务器 POP pop.163.com 995 110 收件服务器 ...
- Easyui Datagrid相同连续列合并扩展(三)
function MergeCells(seletor, rows, fields) { if(rows == null || rows.length == 0 || fields == null | ...
- WHERE 子句用于规定选择的标准。
WHERE 子句 如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句. 语法 SELECT 列名称 FROM 表名称 WHERE 列 运算符 值 下面的运算符可在 WHERE ...
- 【noip模拟题】天神下凡(贪心)
vijos某次模拟赛原题... 处理出每个圆的一级祖先就行了... 其实没有那么麻烦,贪心即可出解. 我们将每个圆转换成线段后按左端点小右端点大的方法排序 然后维护一个栈: 对于每一个圆i 如果栈顶右 ...
- 性能测试工具LoadRunner中进程运行和线程运行区别
loadrunner controller将使用驱动程序mmdrv运行Vuser.用户可以在controller的run-time setting中选择Vuser的运行方式, 是多进程方式or多线程方 ...
- selenium基础框架的封装(Python版)这篇帖子在百度关键词搜索的第一位了,有图为证,开心!
百度搜索结果页地址:https://www.baidu.com/s?ie=utf-8&f=3&rsv_bp=1&rsv_idx=1&tn=baidu&wd=se ...