文章目錄
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 執行流程
- 步驟1:Client提交Job到RM
- 步驟2 + 步驟3:RM分配一個NM啓動第一個Container來運行AM,因爲一個task對應一個AM,所以首先得啓動一個AM
- 步驟4:AM在RM上面註冊自己,並且向RM申請資源
- 步驟5 + 步驟6:AM申請到資源之後,通知相應的NM啓動Container來運行Job,AM會監控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名 包名+類名 + 輸入路徑+ 輸出路徑
運行結果,分了三個專區: