[Hadoop] Yarn & k8s

寫在前面


1、大數據全棧

頭兩節講完HDFS & MapReduce,這一部分聊一聊它們之間的「人物關係」。html

其中也討論下k8s的學習必要性。node

Ref: [Distributed ML] Yi WANG's talkshell

 

2、知識點

容器技術與Kubernetes

Goto: 3 萬容器,知乎基於Kubernetes容器平臺實踐apache

Goto: 如何學習、瞭解kubernetes?app

Goto: 選K8S是對的,可是用很差就是你的不對了分佈式

 

 

 

Yarn資源管理


1、重要概念

  • ResouceManager
  • ApplicationMaster
  • NodeManager
  • Container
  • JobHistoryServer
  • Timeline Server

 

JobHistoryServer

全部node啓動以下命令,能記錄mapreduce應用程序的記錄。(對做業信息進行記錄)oop

mr-jobhistory-daemon.sh start historyserver

 

Timeline Server

寫與第三方結合的日誌服務數據(好比spark等),是更細粒度的信息記錄。。post

任務在哪一個隊列中運行;學習

運行任務時設置的用戶是哪一個用戶;大數據

 

 

2、啓動流程

Ref: 實戰案例玩轉Hadoop系列11--運行Map Reduce程序

在真實的生產環境中,MAP REDUCE程序應該提交到Yarn集羣上分佈式運行,這樣才能發揮出MAP REDUCE分佈式並行計算的效果。

MAP REDUCE程序提交給Yarn執行的過程以下:

一、客戶端代碼中設置好MAP REDUCE程序運行時所要使用的Mapper類、Reducer類、程序Jar包所在路徑、Job名稱、Job輸入數據的切片信息、Configuration所配置的參數等資源,統一提交給Yarn所指定的位於HDFS上的Job資源提交路徑

二、客戶端向Yarn中的Resource Manager請求運行Jar包中MRAppMaster進程的資源容器Container;

分配application id、輸出是否存在、輸入 --> split(一個分片對應一個map task)

三、Yarn將提供Container的任務指派給某個擁有空閒資源的 Node Manager節點,Node Manager接受任務後建立資源容器(即所謂的Container);

容器所需分配的「資源描述信息」 ---> 某個空閒的Node Manager節點 ---> 啓動一個contrainer

四、客戶端向建立好容器的Node Manager發送啓動MRAppMaster進程的shell腳本命令,啓動MRAppMaster

五、MRAppMaster啓動後,讀取 job相關配置及程序資源,向Resource Manager請求N個資源容器來啓動若干個Map Task進程和若干個Reduce Task進程,並監控這些Map Task進程和Reduce Task進程的運行狀態;

六、當整個Job的全部Map Task進程和Reduce Task進程任務處理完成後,整個Job的全部進程所有註銷,Yarn則銷燬Container,回收運算資源。

 

 

 

3、Yarn調度器

FIFO Scheduler

Capacity Scheduler

Fair Scheduler

 

新建一個capacity-scheduler.xml,也要同步拷貝到其餘node中。

<configuration>

  <property>

    <name>yarn.scheduler.capacity.root.queues</name>

    <value>prod,dev</value>

  </property>

  <property>

    <name>yarn.scheduler.capacity.root.dev.queues</name>

    <value>hdp,spark</value>

  </property>

  <property>

    <name>yarn.scheduler.capacity.root.prod.capacity</name>

    <value>40</value>

  </property>

    <property>

    <name>yarn.scheduler.capacity.root.dev.capacity</name>

    <value>60</value>

  </property>

    <property>

    <name>yarn.scheduler.capacity.root.dev.maximum-capacity</name>

    <value>75</value>

  </property>

  <property>

    <name>yarn.scheduler.capacity.root.dev.hdp.capacity</name>

    <value>50</value>

  </property>

    <property>

    <name>yarn.scheduler.capacity.root.dev.spark.capacity</name>

    <value>50</value>

  </property>

</configuration>

 

MR程序中添加代碼:

Configuration configuration = new Configuration();
configuration.set("mapreduce.job.queuename", "hdp")
Job job
= Job.getInstance(configuration, WordCountMain.class.getSimpleName());

 

Cluster UI在運行的MR查看:

 

 

 

Kubernetes


Ref:Big Data: Google Replaces YARN with Kubernetes to Schedule Apache Spark

Ref: Running Spark on Kubernetes

Ref: Running Spark on YARN

 

 The Kubernetes scheduler is currently experimental. In future versions, there may be behavioral changes around configuration, container images and entrypoints.  - 2019/10/28

 

 既然這樣,暫時不提。

  

End. 

相關文章
相關標籤/搜索