yarn是什么?
1、它是一个资源调度及提供作业运行的系统环境平台
资源:cpu、mem等
作业:map task、reduce Task

yarn产生背景?
它是从hadoop2.x版本才引入
1、hadoop1.x版本它是如何资源调度及作业运行机制原理
a、JobTracker(主节点)
(a):接受客户端的作业提交
(b):交给任务调度器安排任务的执行
(c):通知空闲的TaskTracker去处理
(d): 与TaskTracker保持心跳机制

b、TaskTracker(从节点)
(a):执行map task和reduce task
(b): 与JobTracker保持心跳机制

缺点:
1、单点故障问题
2、负载压力
3、只能运行mapreduce的程序

引入了yarn机制
1、减少负载压力
2、主备机制
3、支持不同的程序运行

yarn整体的架构?


yarn主要的核心组件?

resourcemanager


作用:
(1)接受客户端提交作业
(2)启动一个app master去处理
资源分配
(3)监控nodemanager


nodemanager


作用:
(1)管理单个节点上的资源
(2)接受resourcemanager发送过来的指令
(3)接受app master发送过来的指令
(4) 启动Container


app master


(1)运行作业的主控者
(2)获取切片数据
(3)从resourcemanager审请运行作业资源
(4)监控作业运行的状态


Container:


它其实就是一个虚拟主机的抽象,分配cpu和内存,主要运行作业

app master
Container
Client


yarn的工作机制(重点)
1、连接运行器平台
根据mapreduce.framework.name变量配置
如果等于yarn:则创建YARNRunner对象
如果等于Local:则创建LocalJobRunner对象

2、如果是yarn平台,对resoucemanager提交作业审请
3、resourcemanager返回一个jobid和数据保存目录(hdfs://xxx/staging/xxx)
4、客户端根据返回数据保存目录路径,将job.split、job.xml、jar文件提交到hdfs://xxx/staging/xxx目录
5、提交数据资源之后,客户端对resouremanager提交任务运行
6、resourcemanager将任务存储任务队列
7、resourcemanager发送命令nodemanager处理从任务取出的任务
8、nodemanager往resourcemanageer审请我要创建一个app master
a、在nodemanager创建一个container,再启动app master
9、app master读取数据切片处理方案
10、app master往resourcemanager审请运行资源
11、resourcemanager往空闲的nodemanager主机发送指令,要创建Container
12、app master往nodemanger发送运行指令,container运行任务。

如下图:

是否可以直接从本地idea直接将程序运行到yarn平台?

以wordcount为例:

代码如下:

  1. package com.gec.demo;
  2.  
  3. import org.apache.hadoop.io.IntWritable;
  4. import org.apache.hadoop.io.LongWritable;
  5. import org.apache.hadoop.io.Text;
  6. import org.apache.hadoop.mapreduce.Mapper;
  7.  
  8. import java.io.IOException;
  9.  
  10. /*
  11. * 作用:体现mapreduce的map阶段的实现
  12. * KEYIN:输入参数key的数据类型
  13. * VALUEIN:输入参数value的数据类型
  14. * KEYOUT,输出key的数据类型
  15. * VALUEOUT:输出value的数据类型
  16. *
  17. * 输入:
  18. * map(key,value)=偏移量,行内容
  19. *
  20. * 输出:
  21. * map(key,value)=单词,1
  22. *
  23. * 数据类型:
  24. * java数据类型:
  25. * int-------------->IntWritable
  26. * long------------->LongWritable
  27. * String----------->Text
  28. * 它都实现序列化处理
  29. *
  30. * */
  31. public class WcMapTask extends Mapper<LongWritable, Text,Text, IntWritable>
  32. {
  33. /*
  34. *根据拆分输入数据的键值对,调用此方法,有多少个键,就触发多少次map方法
  35. * 参数一:输入数据的键值:行的偏移量
  36. * 参数二:输入数据的键对应的value值:偏移量对应行内容
  37. * */
  38. @Override
  39. protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
  40.  
  41. String line=value.toString();
  42.  
  43. String words[]=line.split(" ");
  44.  
  45. for (String word : words) {
  46.  
  47. context.write(new Text(word),new IntWritable(1));
  48. }
  49.  
  50. }
  51. }
  1. package com.gec.demo;
  2.  
  3. import org.apache.hadoop.io.IntWritable;
  4. import org.apache.hadoop.io.Text;
  5. import org.apache.hadoop.mapreduce.Reducer;
  6.  
  7. import java.io.IOException;
  8.  
  9. /*
  10. * 此类:处理reducer阶段
  11. * 汇总单词次数
  12. * KEYIN:输入数据key的数据类型
  13. * VALUEIN:输入数据value的数据类型
  14. * KEYOUT:输出数据key的数据类型
  15. * VALUEOUT:输出数据value的数据类型
  16. *
  17. *
  18. * */
  19. public class WcReduceTask extends Reducer<Text, IntWritable,Text,IntWritable>
  20. {
  21. /*
  22. * 第一个参数:单词数据
  23. * 第二个参数:集合数据类型汇总:单词的次数
  24. *
  25. * */
  26. @Override
  27. protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
  28.  
  29. int count=0;
  30.  
  31. for (IntWritable value : values) {
  32.  
  33. count+=value.get();
  34. }
  35.  
  36. context.write(key,new IntWritable(count));
  37.  
  38. }
  39. }
  1. package com.gec.demo;
  2.  
  3. import org.apache.hadoop.io.IntWritable;
  4. import org.apache.hadoop.io.Text;
  5. import org.apache.hadoop.mapreduce.Reducer;
  6.  
  7. import java.io.IOException;
  8.  
  9. public class WcCombiner extends Reducer<Text, IntWritable,Text,IntWritable> {
  10. private IntWritable sum=new IntWritable();
  11. @Override
  12. protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
  13. int count=0;
  14.  
  15. for (IntWritable value : values) {
  16. count+=value.get();
  17. }
  18. sum.set(count);
  19. context.write(key,sum);
  20. }
  21. }
  1. package com.gec.demo;
  2.  
  3. import org.apache.hadoop.conf.Configuration;
  4. import org.apache.hadoop.fs.Path;
  5. import org.apache.hadoop.io.IntWritable;
  6. import org.apache.hadoop.io.Text;
  7. import org.apache.hadoop.mapreduce.Job;
  8. import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
  9. import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
  10.  
  11. import java.io.IOException;
  12.  
  13. /**
  14. * Hello world!
  15. *
  16. */
  17. public class App
  18. {
  19. public static void main( String[] args ) throws IOException, ClassNotFoundException, InterruptedException {
  20.  
  21. Configuration conf=new Configuration();
  22. // conf.set("fs.defaultFS","hdfs://hadoop-001:9000");
  23. // conf.set("mapreduce.framework.name","yarn");
  24. // conf.set("yarn.resourcemanager.hostname","hadoop-002");
  25. conf.set("mapred.jar","D:\\JAVA\\projectsIDEA\\BigdataStudy\\mrwordcountbyyarn\\target\\wordcountbyyarn-1.0-SNAPSHOT.jar");
  26. Job job=Job.getInstance(conf);
  27. //设置Driver类
  28. job.setJarByClass(App.class);
  29.  
  30. //设置运行那个map task
  31. job.setMapperClass(WcMapTask.class);
  32. //设置运行那个reducer task
  33. job.setReducerClass(WcReduceTask.class);
  34. job.setCombinerClass(WcCombiner.class);
  35.  
  36. //设置map task的输出key的数据类型
  37. job.setMapOutputKeyClass(Text.class);
  38. //设置map task的输出value的数据类型
  39. job.setMapOutputValueClass(IntWritable.class);
  40.  
  41. job.setOutputKeyClass(Text.class);
  42. job.setOutputValueClass(IntWritable.class);
  43.  
  44. //指定要处理的数据所在的位置
  45. FileInputFormat.setInputPaths(job, "/wordcount/input/big.txt");
  46. //指定处理完成之后的结果所保存的位置
  47. FileOutputFormat.setOutputPath(job, new Path("/wordcount/output7"));
  48. //向yarn集群提交这个job
  49. boolean res = job.waitForCompletion(true);
  50. System.exit(res?0:1);
  51.  
  52. }
  53. }

其中

是因为在resource文件夹中直接添加配置文件

配置文件分别如下:

core-site.xml
hdfs-site.xml
mapred-site.xml
yarn-site.xml

注意:这里的配置文件要和虚拟机中的配置文件一样,否则可能会出错,最好的做法是从虚拟机中直接copy出来

Hadoop yarn工作流程详解的更多相关文章

  1. git概念及工作流程详解

    git概念及工作流程详解 既然我们已经把gitlab安装完毕[当然这是非必要条件],我们就可以使用git来管理自己的项目了,前文也多多少少提及到git的基本命令,本文就先简单对比下SVN与git的区别 ...

  2. Hadoop MapReduce八大步骤以及Yarn工作原理详解

    Hadoop是市面上使用最多的大数据分布式文件存储系统和分布式处理系统, 其中分为两大块分别是hdfs和MapReduce, hdfs是分布式文件存储系统, 借鉴了Google的GFS论文. MapR ...

  3. K8s工作流程详解

    在学习k8s工作流程之前,我们得再次认识一下上篇k8s架构与组件详解中提到的kube-controller-manager一个k8s中许多控制器的进程的集合. 比如Deployment 控制器(Dep ...

  4. SSL协议(HTTPS) 握手、工作流程详解(双向HTTPS流程)

    原文地址:http://www.cnblogs.com/jifeng/archive/2010/11/30/1891779.html SSL协议的工作流程: 服务器认证阶段:1)客户端向服务器发送一个 ...

  5. Ansible工作流程详解

    1:Ansible的使用者 ------>Ansible的使用者来源于多种维度,(1):CMDB(Configuration Management Database,配置管理数据库),CMDB存 ...

  6. SSL协议握手工作流程详解(双向HTTPS流程)

    参考学习文档:http://www.cnblogs.com/jifeng/archive/2010/11/30/1891779.html SSL协议的工作流程: 服务器认证阶段: 1)客户端向服务器发 ...

  7. 看完你也能独立负责项目!产品经理做APP从头到尾的所有工作流程详解!

    (一)项目启动前 从事产品的工作一年多,但自己一直苦于这样或者那样的困惑,很多人想要从事产品,或者老板自己创业要亲自承担产品一职,但他们对产品这个岗位的认识却不明晰,有的以为是纯粹的画原型,有的是以为 ...

  8. Spring MVC 工作流程详解

    1.首先先来一张图 开始流程----------------> 1.用户发送请求到前端控制器,前端控制器会过滤用户的请求,例如我们在web.xml里面配置的内容: <!-- 配置Sprin ...

  9. hadoop应用开发技术详解

    <大 数据技术丛书:Hadoop应用开发技术详解>共12章.第1-2章详细地介绍了Hadoop的生态系统.关键技术以及安装和配置:第3章是 MapReduce的使用入门,让读者了解整个开发 ...

随机推荐

  1. ES脑裂问题

    脑裂:一个集群中的不同节点对于集群的状态有了不一样的理解 ES集群的总体状态是red,本来9个节点的集群在结果中只显示4个节点在线: 正常情况下,集群中的所有节点应该对集群中的master的选择是一致 ...

  2. session_id 生成原理

    PHPSESSID生成 生成规则是根据hash_func散列来生成的,相关的参数有: - 客户端IP - 当前时间(秒) - 当前时间(微妙) - PHP自带的随机数生产器 hash_func是php ...

  3. Delphi 10.3.1拍照遇到的问题

    procedure TAddOrderCamera.CameraActionExecute(Sender: TObject); var Service: IFMXCameraService; Para ...

  4. 解释生成器(generator)于函数的不同,并实现和使用简单generator?

    生成器和函数的主要区别在于函数return avalue,生成器yield  a  value,同事标记或记忆point of the yield 以便在下次调用时从标记点恢复执行,yield使用函数 ...

  5. Ubuntu16.04下通过tar.gz包安装MySQL5.5.52

    1.下载  tar.gz包 : https://dev.mysql.com/downloads/mysql/ 2. // 安装依赖 sudo apt-get install libaio-dev // ...

  6. svn 创建branch merge

    使用TortoiseSVN 创建分支 1.TortoiseSVN(右键)->Repo-browser进入仓库 2.选择需要创建分支的文件->Copy to 3.将新创建branch pat ...

  7. python自定义异常抛出接受多个数值

    在使用Python的时候,有时候想自己自定义异常错误,同时抛出多个参数,比如对数据库查找一条数据,如果没有找到,返回 {"errCode":"-1", &quo ...

  8. 学习Java JDBC,看这篇就够了

    JDBC (Java DB Connection)---Java数据库连接 JDBC是一种可用于运行SQL语句的JAVA API(ApplicationProgramming Interface应用程 ...

  9. 【一题多解】Python 字符串逆序

    https://blog.csdn.net/seetheworld518/article/details/46756639 https://blog.csdn.net/together_cz/arti ...

  10. MySQL篇,第二章:数据库知识2

    MySQL 数据库 2 名词介绍 1.DB(Database) DB就是数据库,存储数据的仓库 2.DBMS(Database Management System) 数据库管理系统 管理数据库的软件, ...