SimpleDistributedPlatform純 Java 的可視化分布式計(jì)算平臺(tái)
一個(gè)簡(jiǎn)單卻實(shí)用的分布式計(jì)算平臺(tái),通過(guò)提交任務(wù) jar 包來(lái)執(zhí)行分布式任務(wù)。
NameNode 和 DataNode 這兩個(gè)名字是直接引用的 Hadoop 里面的概念,但是更加簡(jiǎn)化:
NameNode:用于分發(fā)可執(zhí)行 jar 包,收集中間計(jì)算結(jié)果,合并匯總最終計(jì)算結(jié)果。
DataNode:用于接收可執(zhí)行 jar 包,執(zhí)行指定的任務(wù)方法,上報(bào)計(jì)算(中間)結(jié)果。
MyZooKeeper:用于注冊(cè)與查找 MQ 服務(wù)。
NameNode 和 DataNode 通過(guò) MQ 進(jìn)行異步通信。
運(yùn)行原理:
DataNode 上線時(shí),向 MQ 發(fā)送一條 DataNode 上線的消息,NameNode 監(jiān)聽該消息,并在 NameNode 本地維護(hù)一個(gè) List<DataNode> 的列表。 當(dāng) NameNode 下發(fā)可執(zhí)行 jar 包時(shí),NameNode 依次向本地的 List<DataNode> 每條記錄發(fā)送一條可執(zhí)行任務(wù)的消息,消息內(nèi)包含 jar 包的url地址。每個(gè) DataNode 收到消息后執(zhí)行可執(zhí)行 jar 包的指定方法,并上報(bào)中間數(shù)據(jù)。當(dāng)每個(gè) DataNode 執(zhí)行完畢后,要執(zhí)行一個(gè) end() 方法,代表該 DataNode 已經(jīng)執(zhí)行完畢了。當(dāng) Namenode 收到了所有的 DataNode 的自己執(zhí)行完畢的消息后,開始對(duì)所有的中間結(jié)果計(jì)算合并,最終算出匯總的值。
