scala分布式計算

2021-10-09 08:37:18 字數 3196 閱讀 4912

-- 乙個傳送端向多個接收端傳送資料,接收端接收資料以後並進行處理,最後將資料返回給傳送端,傳送端將計算結果收回並列印在控制台。
-- 乙個傳送端連線多個接收端,然後分別進行傳送資料,此時存在的問題:

-- 當伺服器接收到資料以後,計算需要很長一段時間時,如果客戶端一直等著伺服器返回資料,這是不合理的。

-- 客戶端傳送資料給服務端以後,斷開連線,等伺服器計算資料完成以後,伺服器去連線客戶端,將計算完成以後的結果返回

因為分布式計算的台數是根據實際的資料量來定的,資料量大,那我們就多一些伺服器來進行計算,如果數量少一些,那麼伺服器就少一些,所以建立乙個資源管理的中心,客戶端需要多少資源就告訴資源管理中心,然後資源管理中心就建立多少個伺服器來進行運算。

-- 暫時不傳資料,只傳任務和資料處理的邏輯
--客戶端和資源管理中心建立網路連線,客戶端將自己的埠號、位址和需要的伺服器台數傳送給資源管理中心
-- 資源管理中心根據客戶端發來的埠號和位址就可以建立伺服器,使用乙個迴圈來建立伺服器台數
-- 在伺服器類中,宣告乙個方法,方法中宣告輸入流,計算,輸出流,並把結果輸出等**
-- 在客戶端處,建立傳送資料的執行緒中,接收來自執行器的資料
1. 將driver的host、port、執行器的數量資訊傳遞給資源中心,關閉與資源中心的連線

2. 建立乙個serversocket,並獲取輸出流

a、將需要輸出的任務傳送給執行器;

b、關閉輸出流

c、獲取輸入流

d、使用乙個集合來接收執行器返回的資料

4. 建立另外乙個執行緒,用於判定是否所有的執行器已經返回結果,並列印所有執行器的計算結果

1.  獲取driver的host、port、exerutorsnum

2. 根據exerutorsnum,建立對應數量的executor

3. 並將driver的host、port傳遞給executor

4. 前三步在乙個執行緒裡面執行

-- 將driver的host、port、執行器的資料封裝成乙個樣例類。
1. 通過資源中心傳入的引數,獲取driver的host、port以及執行器的id

2. 建立乙個方法,在方法內:

a、建立乙個socket,並獲取輸入流

b、獲取driver的資料

c、進行資料處理,並建立輸出流

d、將結果和執行器id返回給driver

-- 將資料處理的邏輯封裝成乙個普通類

object driver &driverhost=$&driverport=$"

)// 1.2 與resourcecenter連線,並將準備的資料傳送給資源中心

val socket =

new socket(

"localhost"

,6666

)val out =

new objectoutputstream(socket.getoutputstream)

out.writeobject(message)

out.flush(

) socket.close(

)// 2. 建立乙個伺服器,任務傳輸給執行器

val receiver =

new serversocket(driverport)

// todo 接收executor端的資料

// 執行緒安全問題

val start = system.currenttimemillis(

)val results: array[

int]

= array.fill(executornum)(-

1)new thread(

new runnable

else}}

}).start(

)while

(true

)&result=$i

// executorid

// id

// result

// i

results(datas(1)

.toint-1)

= datas(3)

.toint

//println("獲取計算結果 = " + result)}}

).start()}

}}

object resourcecenter }}

).start()}

}}

package com.atguigu.scala_chapter01.scala_distributecom

case

class message(m :

string

)

class executor(

val id:

int,

val driverport:

int,

val driverhost:

string

)&result=$"))

executorout.flush(

) driverref.close()}

}

class task 

}

tstream(driverref.getoutputstream)

executorout.writeobject(message(s"exerutor=katex parse error: expected 'eof', got '&' at position 5: &̲result="))

executorout.flush()

driverref.close()

### 5.5 任務

```scala

class task

}

分布式計算

定義 研究如何把乙個需要非常巨大的計算能力才能解決的問題分成許多小的部分,然後把這些部分分配給許多計算機進行處理,最後把這些計算結果綜合起來得到最終的結果。什麼是分布式系統 分布式系統 distributed system 是由多台計算機和通訊的軟體通過計算機網路連線組成 本地區域網或者廣域網 分布...

分布式計算0

分布式系統可以建立精確的數學模型,其上的演算法與性質都是可以證明的,這是最近看一本分布式演算法的專著的感受。其中在論及分布式系統的時間概念時,談到其邏輯時鐘是整個系統上的乙個序關係 這個序關係可以把系統中的事件序列對映到乙個自然數集合上 event 除因果事件外,則還有平行事件的存在。故這種對映關係...

分布式計算概述

分布式系統 在 網 絡 計 算 平台 上 開 發 部 署 管 理 和 維 護 以 資 源 共 享 和 協 同 工 作 為 主 要 應 用 目 標 的 分 布 式 應 用 系 統。分布式系統的主要特徵 包含任意個數的系統程序和使用者程序 體系結構模組化,它由數目可變的多個處理部件組成 通過共享通訊結構...