Hadoop之資源調度框架YARN

1.YARN產生背景

1.1 MapReduce1.x 存在一些問題

在這裏插入圖片描述

  • JobTracker 是單點的,自身的壓力很大,而且會成爲系統擴展的瓶頸,並且不健壯,一掛全掛
  • 僅僅只能夠支持mapreduce作業

1.2 優化資源利用率和降低運維成本

所有的計算框架運行在一個集羣中,共享一個集羣的資源,按需分配!
在這裏插入圖片描述

2.YARN概述

2.1 關鍵詞彙概念

  • YARN:Yet Another Resource Negotiator 的簡稱
  • Client:向RM提交任務、殺死任務等
  • RM:ResourceManager (RM),集羣中同一時刻對外提供服務的只有1個,負責分配資源相關;處理來自客戶端的請求:提交、殺死任務;啓動/監控AM;監控NM
  • AM:ApplicationMaster (AM),每個應用程序對應一個AM,AM向RM申請資源用於在NM上啓動對應的Task;數據切分;爲每個task向RM申請資源(container);NodeManager通信;任務的監控
  • NM:NodeManager (NM),多個,幹活的;向RM發送心跳信息、任務的執行情況;接收來自RM的請求來啓動任務;處理來自AM的命令
  • Container: 任務的運行抽象,memory、cpu…;task是運行在container裏面的;可以運行AM、也可以運行map/reduce task
    在這裏插入圖片描述

2.2 執行流程

在這裏插入圖片描述

  • 步驟1Client提交JobRM
  • 步驟2 + 步驟3RM分配一個NM啓動第一個Container來運行AM,因爲一個task對應一個AM,所以首先得啓動一個AM
  • 步驟4AMRM上面註冊自己,並且向RM申請資源
  • 步驟5 + 步驟6AM申請到資源之後,通知相應的NM啓動Container來運行JobAM會監控Job的執行情況

3.YARN的部署

文檔地址:https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/SingleCluster.html,按照文檔編輯對應的hadoop配置文件即可
在這裏插入圖片描述
在這裏插入圖片描述在這裏插入圖片描述

4.提交Job到YARN運行

4.1 運行hadoop內置mapreduce-examples任務

cd $HADOOP_HOME/share/hadoop/mapreduce,可以看的有個 hadoop-mapreduce-examples-2.6.0-cdh5.15.1.jar,看看有哪些任務?

hadoop jar hadoop-mapreduce-examples-2.6.0-cdh5.15.1.jar

在這裏插入圖片描述
執行wordcount 任務

hadoop jar hadoop-mapreduce-examples-2.6.0-cdh5.15.1.jar wordcount /wordsCount/input/h.txt /wordsCount/output

在這裏插入圖片描述
在這裏插入圖片描述
控制檯:
在這裏插入圖片描述
在這裏插入圖片描述

4.2 運行自己編寫的任務

4.2.1 AccessYARNApp

改寫上篇文章裏的流量統計任務,輸入目錄和輸出目錄改成讀取參數

package com.zc.bigdata.mapreduce;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.NullWritable;
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 AccessYARNApp {
    public static void main(String[] args) throws Exception{
        Configuration configuration = new Configuration();
        Job job = Job.getInstance(configuration);
        job.setJarByClass(AccessYARNApp.class);
        job.setMapperClass(AccessMapper.class);
        job.setReducerClass(AccessReducer.class);
        // 設置自定義分區規則
        job.setPartitionerClass(AccessPartitioner.class);
        // 設置reduce個數
        job.setNumReduceTasks(3);
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(Access.class);
        job.setOutputKeyClass(NullWritable.class);
        job.setOutputValueClass(Access.class);
        FileInputFormat.setInputPaths(job, new Path(args[0]));
        FileOutputFormat.setOutputPath(job, new Path(args[1]));
        job.waitForCompletion(true);
    }

}

4.2.2 打包項目

clean一下,package一下,注意要忽略test,得到 hadoop-dfs-1.0-SNAPSHOT.jar
在這裏插入圖片描述
在這裏插入圖片描述

4.2.3 上傳項目jar

在這裏插入圖片描述在這裏插入圖片描述

4.2.4 執行命令

hadoop jar hadoop-dfs-1.0-SNAPSHOT.jar com.zc.bigdata.mapreduce.AccessYARNApp /access/input/access.log /access/output

jar名 包名+類名 + 輸入路徑+ 輸出路徑
在這裏插入圖片描述
在這裏插入圖片描述
運行結果,分了三個專區:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章