麻省理工硬核課程——分布式系統lab_1解析

2021-03-02 艾迪威姆
MIT6.824 lab_1 MapReduce

這個Lab並不是真的讓我們去實現MapReduce的分布式並行框架,而是通過本地開啟不同的進程(線程),來模擬集群執行MapReduce程序。

課程相關文獻

建議優先使用官方的相關資料,進行完成課程,本文章僅供參考。

•MIT 6.824 分布式系統課程官網mit 6.824 Distributed Systems[1]•MIT6.824 分布式系統實驗一 MapReduce mit 6.824 Lab1 MapReduce[2]•谷歌MapReduce論文MapReduce Paper[3]

原始碼

•作者代碼倉庫連結🔗[4]

https://gitee.com/eddievim/eddievim_-mit6.824_lab

定義角色

Master(調度)

Worker(進行具體的Map、Reduce)(默認初始化3個)

流程

•通過Master角色接收到用戶傳進來的文件路徑,找到需要進行MapReduce處理的原始文件。•我們這邊簡單對輸入進行任務切分(一個文件對應一個MapTask)。•若輸入文件有M個,則開啟M個MapTask,Master調度Worker來領取任務並執行Map;•Map執行後的結果需要進行排序,並寫到磁碟中去;•Shuffle :將MapTask的輸出,改造成ReduceTask的輸入。•直至所有MapTask全部執行完畢後,開啟ReduceTask,ReduceTask的任務是到讀取MapTask產生的磁碟文件中,抓取出對應分區的Key出來,再將相同的Key與List(value)執行Reduce方法,得出結果後,最終再將結果寫出到結果文件中。

初始化工作

定義各種數據結構,及數據的交換格式。

狀態的定義

•-1: TaskWait• 0: JobOver•1: MapPhrase•2: ReducePhrase

const TaskWait, JobOver, MapPhrase, ReducePhrase = -1, 0, 1, 2

Master
type Master struct {
Phrase int // 用於定義當前階段
NReduce int // ReduceTask並行度
NMap int // MapTask並行度

MapTaskQueue chan MapTask // 用於存儲MapTask的隊列,線程安全
ReduceTaskQueue chan ReduceTask // 用於存儲ReduceTask的隊列,線程安全

MapOutFilePaths [][]string // MapTask輸出的路徑
ReduceOutFilePaths []string // ReduceTask輸出的路徑

mutex sync.Mutex // 鎖,用於防止並發問題的產生
}

MapTask
type MapTask struct {
No int // 編號
Filepath string
}

ReduceTask
type ReduceTask struct {
No int // 編號
Filepaths []string
}

用於RPC通信的實體類
type RPCArgs struct {
// 狀態
// 1: MapPhrase
// 2: ReducePhrase
Phrase int
OutPaths []string
}

type RPCReply struct {
// 狀態
// 1: MapPhrase
// 2: ReducePhrase
// 3:JobOver
Phrase int
HoldTask bool

MapTask MapTask
ReduceTask ReduceTask
}

任務調度Worker獲取任務

在Worker處於空閒狀態(沒有任務正在執行時)進行調用。

Worker通過RPC調用Master的方法SendTask,獲取任務,如果獲取則進行執行,若為reply.HoldTask為false,則本次RPC調用,並沒有獲取到對應的任務。

// send task to worker
func (m *Master) SendTask(args *RPCArgs, reply *RPCReply) error {
m.mutex.Lock()
reply.Phrase = m.Phrase
m.mutex.Unlock()

reply.HoldTask = true
switch reply.Phrase {
case MapPhrase:
reply.MapTask = <-m.MapTaskQueue
case ReducePhrase:
reply.ReduceTask = <-m.ReduceTaskQueue
case TaskWait:
reply.HoldTask = false
default:
reply.HoldTask = false
}

return nil
}

Worker匯報任務

在Worker完成一次任務的時候進行調用。

Worker通過RPC調用Master的ReportTask,匯報任務。

•若在MapTask階段,所有任務被處理完畢,則進入shuffle狀態。•若在ReduceTask階段,所有任務被處理完畢後,將狀態舍為JobOver,這將會通知Worker,使其結束進程。

// worker report task to master
func (m *Master) ReportTask(args *RPCArgs, reply *RPCReply) error {
m.mutex.Lock()
switch m.Phrase {
case MapPhrase:
m.MapOutFilePaths = append(m.MapOutFilePaths, args.OutPaths)
// Map階段完成了所有任務,進入Reduce階段
if len(m.MapOutFilePaths) == m.NMap {
m.Phrase = TaskWait
m.shuffle()
m.Phrase = ReducePhrase
}
case ReducePhrase:
m.ReduceOutFilePaths = append(m.ReduceOutFilePaths, args.OutPaths[0])
// Reduce階段結束
if len(m.ReduceOutFilePaths) == m.NReduce {
m.Phrase = JobOver
fmt.Println(m.Phrase)
}
}

m.mutex.Unlock()

return nil
}

階段的過渡Shuffle(MapPhrase -> ReducePhrase)

將MapTask的輸出,將其「改造」為ReduceTask的輸入。將MapTask輸出的結果,根據不同的組,將同組的數據組合在一起。

// MapPhrase -> ReducePhrase
func (m *Master) shuffle() {
for i := 0; i < m.NReduce; i++ {
task := ReduceTask{
No: i,
}
for j := 0; j < m.NMap; j++ {
task.Filepaths = append(task.Filepaths, m.MapOutFilePaths[j][i])
}
m.ReduceTaskQueue <- task
}
}

Done

用於判斷所有任務流程是否結束,只需要判斷Phrase是否是JobOver即可。

func (m *Master) Done() bool {
return m.Phrase == JobOver
}

Worker的工作模式

持續對Master進行輪詢,從而持續地獲取任務及狀態,當到達JobOver階段時,則結束。

func Worker(mapf func(string, string) []KeyValue,
reducef func(string, []string) string) {
for {
reply := getTask()
switch reply.Phrase {
case MapPhrase:
opaths, ok := MapProcess(mapf, reply)
if ok {
fmt.Printf("mapProcess %v OK.\n", reply.MapTask.No)
call("Master.ReportTask", &RPCArgs{MapPhrase, opaths}, reply)
} else {
fmt.Printf("mapProcess %v failed.\n", reply.MapTask.No)
}
case ReducePhrase:
path, ok := ReduceProcess(reducef, reply)
if ok {
fmt.Printf("ReduceProcess %v OK.\n", reply.ReduceTask.No)
call("Master.ReportTask", &RPCArgs{ReducePhrase, []string{path}}, reply)
} else {
fmt.Printf("ReduceProcess %v Fail.\n", reply.ReduceTask.No)
}
case TaskWait:
time.Sleep(time.Millisecond)
case JobOver:
return
}
}
}

其餘的操作

剩下的步驟都是Worker獲取文件路徑後,對文件內容進行讀取,然後進行相應操作Mapf/Reducef,然後再輸出,持久化到磁碟中,這裡不過多闡述,需要的同學可以到我的Gitee代碼倉庫進行查看。連結🔗[5]

References

[1] mit 6.824 Distributed Systems: https://pdos.csail.mit.edu/6.824/
[2] mit 6.824 Lab1 MapReduce: https://pdos.csail.mit.edu/6.824/labs/lab-mr.html
[3] MapReduce Paper: http://static.googleusercontent.com/media/research.google.com/zh-CN//archive/mapreduce-osdi04.pdf
[4] 作者代碼倉庫連結🔗: https://gitee.com/eddievim/eddievim_-mit6.824_lab
[5] 連結🔗: https://gitee.com/eddievim/eddievim_-mit6.824_lab

相關焦點

  • MIT經典課程「分布式系統」視頻版上線!網友:終於有非偷拍版本
    這是MIT」分布式系統課程」(Distributed Systems)的代號,可以說是業內大名鼎鼎,新手入坑分布式系統的首選學習教程。現在,2020年的課程已出爐。與往年不同的是,除了傳統的文字版本介紹,官方還放出了高清課程視頻。
  • 2020 MIT 6.824 分布式系統課程
    MIT 6.824MIT 6.824 是麻省理工的一門關於分布式系統的課程,該課程由 12 個單元組成的核心研究生科目,包括演講、閱讀、編程實驗室、可選項目、期中考試和期末考試。課程介紹了工程分布式系統的抽象和實現技術,主要主題包括容錯、複製和一致性。該課程的大部分內容包括研究和討論分布式系統的案例研究。
  • 麻省理工新開設金融科技課程
  • MIT6.824分布式系統(2020春)及MapReduce
    MIT6.824分布式系統(2020春)及MapReduce內容提要1.6.824課程內容2.Go programming language3.分布式系統4.MapReduce5.分布式MapReduce6.容錯機制7.課程MR
  • 美國麻省理工1800門課程網上公布 完全免費(圖)
    除麻省理工外,馬裡蘭州約翰斯·霍普金斯大學、密西根州大學、印第安納州聖母大學、猶他州大學等都是計劃合作院校。  作為一項「智力慈善事業」,「開放課程計劃」提供教學大綱、視頻和音頻課程、筆記、家庭作業等。參與計劃的院校並不鼓勵學生註冊,只是激發學生的學習熱情。
  • 加州理工 VS 麻省理工,誰才是理工屆的扛把子?
    麻省理工的校園就在波士頓地鐵紅線上的肯德爾站旁邊,周圍有各種美食、娛樂、甚至是其他社交場所。學生們可以很容易地乘坐火車去薩默維爾、波士頓市中心、牙買加平原、羅克斯伯裡等地旅行。 和加州理工一樣,麻省理工也為本科生提供11棟宿舍樓。每個宿舍都配備專門的宿舍管理團隊,在保證學生安全的同時也為學生提供了多樣化的生活需求。
  • 加州理工 VS 麻省理工,誰才是理工界的扛把子?
    麻省理工的校園就在波士頓地鐵紅線上的肯德爾站旁邊,周圍有各種美食、娛樂、甚至是其他社交場所。學生們可以很容易地乘坐火車去薩默維爾、波士頓市中心、牙買加平原、羅克斯伯裡等地旅行。 和加州理工一樣,麻省理工也為本科生提供11棟宿舍樓。每個宿舍都配備專門的宿舍管理團隊,在保證學生安全的同時也為學生提供了多樣化的生活需求。
  • 與麻省理工深度合作的年輕大學:新加坡科技設計大學
    創校之初與美國麻省理工學院深度合作,學校教職工將由麻省理工代為面試、招聘,所有教職工在授課之前會在麻省理工學院進行1年的培訓。同時與麻省理工學院在學科建設,本科生交流,SUTD-MIT雙碩士培養,以及SUTD-MIT聯合博士後等方面有著全方面合作。
  • 聽麻省理工怎麼說
    本期,小編和大家一起來領略麻省理工的3D列印職業教育課程的設置出發點。  這個職業課程的上課地點在今年六月的麻省理工學院的校園裡,課程將探討新興的計算機輔助設計工具的廣泛使用,增材製造技術不僅可以讓CAD系統設計的新形狀被直接創造出來,還有助於加快概念設計,縮短設計迭代過程。隨著新的基於雲的協同CAD軟體發展趨勢,將允許在雲中直接進行開發和設計。
  • 【名校文書集錦】最新MIT麻省理工學院的Essay題目解析
    麻省理工學院(Massachusetts Institute of Technology),簡稱麻省理工(MIT),坐落於美國麻薩諸塞州波士頓都市區劍橋市,是世界著名私立研究型大學 。麻省理工學院創立於1861年,在第二次世界大戰後,藉由美國國防科技研究需要而迅速崛起;在二戰和冷戰期間,麻省理工學院的研究人員對計算機、雷達以及慣性導航系統等科技發展作出了重要貢獻。
  • 加州理工 VS 麻省理工,到底誰才是美國理工大學屆的扛把子?
    麻省理工的校園就在波士頓地鐵紅線上的肯德爾站旁邊,周圍有各種美食、娛樂、甚至是其他社交場所。學生們可以很容易地乘坐火車去薩默維爾、波士頓市中心、牙買加平原、羅克斯伯裡等地旅行。 和加州理工一樣,麻省理工也為本科生提供11棟宿舍樓。
  • 加州理工VS 麻省理工,到底誰才是美國理工大學屆的扛把子?
    加州理工學院位於西海岸加州洛杉磯附近的帕薩迪納市,而麻省理工學院位於東海岸麻薩諸塞州波士頓郊外的劍橋市,兩校相距甚遠。 無論是本科生還是研究生,還是教授數量,麻省理工都比加州理工要多得多。儘管兩所大學的師生比一樣,但麻省理工學院的學生可以接觸到的教授人數是加州理工的三倍多。 那麼,這裡就涉及到兩個因素:班級規模和校園人口。
  • 這些網絡安全公開課都是來自斯坦福、麻省理工等名校
    任何對計算機科學感興趣的人都應該了解網絡安全領域,以下課程都是來自麻省理工、斯坦福等世界高校,涵蓋網絡黑客、網絡戰爭等多個網絡安全相關主題,具體如下:1、MIT:Advanced Topics in Cryptography
  • 麻省理工學院將把所有課程公布網上
    美國百年名校麻省理工學院(MassachusettesInstituteofTech-nology,簡稱MIT)有關人士近日透露,該校將於今年年底前在網上公布學校所提供的全部1800門課程。麻省理工就此成為全美第一所將所有課程上網免費供人瀏覽的大學。
  • 「考不上印度理工才去麻省理工」,你信了嗎?
    最近網上流傳了幾篇內容類似,標題辣眼的文章,類似《「考不上印度理工才去麻省理工」,印度理工為何這麼牛?》,大意就是說印度理工學院是世界頂級名校,在印度人眼中,甚至遠遠勝於舉世聞名的麻省理工學院。該校整體偏重理工科,師生比常年保持在1:6~1:8之間,教學質量較高,尤其是在IT領域擁有較高的聲譽。每年培養大約4000名畢業生,其中70%左右出國留學(美國是其最大目的地),成為美國高科技人才的重要來源地之一。
  • ...遊戲設計課程十佳院校,其中不乏麻省理工、 薩凡納藝術設計學院...
    據美國著名調研機構《普林斯頓評論》一份最新的研究報告顯示,2012年美國開設遊戲設計課程的大學院校已經超過100家,而這一數字在兩年前僅為50家。  以下是《普林斯頓評論》列出的北美遊戲設計課程十佳院校,其中不乏麻省理工、 薩凡納藝術設計學院等世界頂尖院校:  本科專業:  1.美國南加州大學(洛杉磯,加利福尼亞)  2.美國麻省理工學院(劍橋,麻薩諸塞州)  3.猶他大學(鹽湖城,猶他州)  4.迪吉彭理工學院 (雷德蒙市,
  • 強強聯合:麻省理工-清華大學共建未來城市創新網絡
    強強聯合:麻省理工-清華大學共建未來城市創新網絡來源:中國科技網 2018-01-11 王鬱2018年1月9日麻省理工-清華大學未來城市創新網絡 (MIT-THU Future City Innovation Connector) 啟動儀式在清華大學舉行。
  • 區塊鏈分布式系統面臨一致性問題及共識算法的理論知識解析
    區塊鏈分布式系統面臨一致性問題及共識算法的理論知識解析 工程師周亮 發表於 2018-09-17 09:30:40 共識機制已經成為了目前區塊鏈系統性能提升的關鍵瓶頸
  • 向未來學習 引領系統創變-u.lab 1x 2020 歡迎你!
    【導言】u.lab 1x  2020全球課程於9月09日在edx上線,中文版在清華學堂在線上線。
  • 麻省理工-清華大學未來城市創新網絡啟動儀式舉行
    麻省理工-清華大學未來城市創新網絡啟動儀式舉行清華新聞網1月11日電 1月9日,麻省理工-清華大學未來城市創新網絡(MIT-THU Future City Innovation Connector)啟動儀式在清華大學舉行。