頭兩節講完HDFS & MapReduce,這一部分聊一聊它們之間的「人物關係」。html
其中也討論下k8s的學習必要性。node
Ref: [Distributed ML] Yi WANG's talkshell
Goto: 3 萬容器,知乎基於Kubernetes容器平臺實踐apache
Goto: 如何學習、瞭解kubernetes?app
Goto: 選K8S是對的,可是用很差就是你的不對了分佈式
全部node啓動以下命令,能記錄mapreduce應用程序的記錄。(對做業信息進行記錄)oop
mr-jobhistory-daemon.sh start historyserver
寫與第三方結合的日誌服務數據(好比spark等),是更細粒度的信息記錄。。post
任務在哪一個隊列中運行;學習
運行任務時設置的用戶是哪一個用戶;大數據
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,回收運算資源。
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查看:
Ref:Big Data: Google Replaces YARN with Kubernetes to Schedule Apache Spark
Ref: Running Spark on Kubernetes
The Kubernetes scheduler is currently experimental. In future versions, there may be behavioral changes around configuration, container images and entrypoints. - 2019/10/28
既然這樣,暫時不提。
End.