首页 首页 大数据 查看内容

成都学大数据教程--MapReduce

木马童年 2019-5-28 09:30 68 0

  成都学大数据教程--MapReduce   Mapreduce是hadoop的运算框架,可以对hdfs中的数据分开进行计算,先执行很多maptask,在执行reducetask,这个过程中任务的执行需要一个任务调度的平台,就是yarn。   一 ...

  成都学大数据教程--MapReduce

  Mapreduce是hadoop的运算框架,可以对hdfs中的数据分开进行计算,先执行很多maptask,在执行reducetask,这个过程中任务的执行需要一个任务调度的平台,就是yarn。

  一、安装YARN集群

  yarn集群中有两个角色:

  主节点:Resource Manager 1台

  从节点:Node Manager N台

  Resource Manager一般安装在一台专门的机器上

  Node Manager应该与HDFS中的data node重叠在一起

  修改配置文件:yarn-site.xml

  成都学大数据教程--MapReduce

  然后scp到所有机器,修改主节点hadoop的slaves文件,列入要启动nodemanager的机器,配好免密

  然后,就可以用脚本启动yarn集群:

  sbin/start-yarn.sh

  停止:

  sbin/stop-yarn.sh

  页面:http://主节点:8088 看看node manager节点是否识别

  开发一个提交job到yarn的客户端类,mapreduce所有jar和自定义类,打成jar包上传到Hadoop集群中的任意一台机器上,运行jar包中的(YARN客户端类

  hadoop jar ......JobSubmitter

  二、开发mapreduce程序

  主要需要开发:

  map阶段的进、出数据,

  reduce阶段的进、出数据,

  类型都应该是实现了HADOOP序列化框架的类型,如:

  String对应Text

  Integer对应IntWritable

  Long对应LongWritable

  例子wordcount代码:

  WordcountMapper

  public class WordcountMapper extends Mapper{

  @Override

  protected void map(LongWritable key, Text value, Context context)

  throws IOException, InterruptedException {

  // 切单词

  String line = value.toString();

  String[] words = line.split(" ");

  for(String word:words){

  context.write(new Text(word), new IntWritable(1));

  }

  }

  }

  WordcountReducer

  public class WordcountReducer extends Reducer{

  @Override

  protected void reduce(Text key, Iterable values,Context context) throws IOException, InterruptedException {

  int count = 0;

  Iterator iterator = values.iterator();

  while(iterator.hasNext()){

  IntWritable value = iterator.next();

  count += value.get();

  }

  context.write(key, new IntWritable(count));

  }

  }

  public class JobSubmitter {

  public static void main(String[] args) throws Exception {

  // 在代码中设置JVM系统参数,用于给job对象来获取访问HDFS的用户身份

  System.setProperty("HADOOP_USER_NAME", "root");

  Configuration conf = new Configuration();

  // 1、设置job运行时要访问的默认文件系统

  conf.set("fs.defaultFS", "hdfs://hdp-01:9000");

  // 2、设置job提交到哪去运行

  conf.set("mapreduce.framework.name", "yarn");

  conf.set("yarn.resourcemanager.hostname", "hdp-01");

  // 3、如果要从windows系统上运行这个job提交客户端程序,则需要加这个跨平台提交的参数

  conf.set("mapreduce.app-submission.cross-platform","true");

  Job job = Job.getInstance(conf);

  // 1、封装参数:jar包所在的位置

  job.setJar("d:/wc.jar");

  //job.setJarByClass(JobSubmitter.class);

  // 2、封装参数: 本次job所要调用的Mapper实现类、Reducer实现类

  job.setMapperClass(WordcountMapper.class);

  job.setReducerClass(WordcountReducer.class);

  // 3、封装参数:本次job的Mapper实现类、Reducer实现类产生的结果数据的key、value类型

  job.setMapOutputKeyClass(Text.class);

  job.setMapOutputValueClass(IntWritable.class);

  job.setOutputKeyClass(Text.class);

  job.setOutputValueClass(IntWritable.class);

  Path output = new Path("/wordcount/output");

  FileSystem fs = FileSystem.get(new URI("hdfs://hdp-01:9000"),conf,"root");

  if(fs.exists(output)){

  fs.delete(output, true);

  }

  // 4、封装参数:本次job要处理的输入数据集所在路径、最终结果的输出路径

  FileInputFormat.setInputPaths(job, new Path("/wordcount/input"));

  FileOutputFormat.setOutputPath(job, output); // 注意:输出路径必须不存在

  // 5、封装参数:想要启动的reduce task的数量

  job.setNumReduceTasks(2);

  // 6、提交job给yarn

  boolean res = job.waitForCompletion(true);

  System.exit(res?0:-1);

  }

  }

  MR还有一些高级的用法:自定义类型,自定义Partitioner,Combiner,排序,倒排索引,自定义GroupingComparator

  成都学大数据教程--MapReduce

  三、mapreduce与yarn的核心机制

  yarn是一个分布式程序的运行调度平台

  yarn中有两大核心角色:

  1、Resource Manager

  接受用户提交的分布式计算程序,并为其划分资源

  管理、监控各个Node Manager上的资源情况,以便于均衡负载

  2、Node Manager

  管理它所在机器的运算资源(cpu + 内存)

  负责接受Resource Manager分配的任务,创建容器、回收资源

  Mapreduce工作机制:

  划分输入切片——》 环形缓冲区 ——》 分区排序 ——》Combiner 局部聚合——》shuffle ——》GroupingComparator——》输出

  在这个世界上,最重要的不是你所处的位置,而是你前进的方向!

(责任编辑:范老师)

在不久的将来,多智时代一定会彻底走入我们的生活,有兴趣入行未来前沿产业的朋友,可以收藏多智时代,及时获取人工智能、大数据、云计算和物联网的前沿资讯和基础知识,让我们一起携手,引领人工智能的未来!

大数据 数据集 分布式计算
0
为您推荐
大数据技术改变城市的运作方式,智慧城市呼之欲出

大数据技术改变城市的运作方式,智慧城市呼

纽奥良虽像大多数城市一样有火灾侦测器安装计划,但直到最近还是要由市民主动申装。纽…...

大数据分析面临生死边缘,未来之路怎么走?

大数据分析面临生死边缘,未来之路怎么走?

大数据分析开始朝着营销落地,尤其像数果智能这类服务于企业的大数据分析供应商,不仅…...

什么是工业大数据,要通过3B和3C来理解?

什么是工业大数据,要通过3B和3C来理解?

核心提示:工业视角的转变如果说前三次工业革命分别从机械化、规模化、标准化、和自动…...

大数据普及为什么说肥了芯片厂商?

大数据普及为什么说肥了芯片厂商?

科技界默默无闻的存在,芯片行业年规模增长到了3520亿美元。半导体给无人驾驶汽车带来…...

大数据技术有哪些,为什么说云计算能力是大数据的根本!

大数据技术有哪些,为什么说云计算能力是大

历史规律告诉我们,任何一次大型技术革命,早期人们总是高估它的影响,会有一轮一轮的…...

个人征信牌照推迟落地,大数据 重新定义个人信用!!

个人征信牌照推迟落地,大数据 重新定义个

为金融学的基础正日益坚实。通过互联网大数据精准记录海量个人行为,进而形成分析结论…...