模仿分布计算

学习spark的时候
先学的做了一个小实例
用来模仿分布计算
项目结构
就是5个文件
在这里插入图片描述

创建一个数据结构

package bigdata.sparkCore.sparkTest01

/**
 * 数据结构
 */
class dataStructure extends Serializable {
  //数据
  val datas=List(1,2,3,4)
  //计算逻辑
  val logic:(Int) =>Int=_*2
}

创建一个任务

package bigdata.sparkCore.sparkTest01

/**
 * 任务
 */
class task extends Serializable {
  var datas:List[Int]=_
  var logic:(Int) =>Int=_

  def compute() : List[Int]={
      datas.map(logic)
  }
}

创建服务器1

package bigdata.sparkCore.sparkTest01

import java.io.ObjectInputStream
import java.net.ServerSocket

/**
 * 相当于服务器1
 */
object Executor1 {
  def main(args: Array[String]): Unit = {
    //启动一个端口是9999的服务
    val server =new ServerSocket(9999)
    println("服务器启动,等待接收数据")
    //等待客户端连接
    val client = server.accept()
    //对象输入流
    val in = client.getInputStream
    val objIn = new ObjectInputStream(in)
    val task = objIn.readObject().asInstanceOf[task]
    val ints = task.compute()
    println("9999计算节点计算的结果是:"+ints)
    objIn.close()
    client.close()
    server.close()
  }
}


创建服务器2

package bigdata.sparkCore.sparkTest01

import java.io.ObjectInputStream
import java.net.ServerSocket
/**
 * 相当于服务器2
 */
object Executor2 {
  def main(args: Array[String]): Unit = {
    //启动一个端口是8888的服务
    val server =new ServerSocket(8888)
    println("服务器启动,等待接收数据")
    //等待客户端连接
    val client = server.accept()
    //对象输入流
    val in = client.getInputStream
    val objIn = new ObjectInputStream(in)
    val task = objIn.readObject().asInstanceOf[task]
    val ints = task.compute()
    println("8888计算节点计算的结果是:"+ints)
    objIn.close()
    client.close()
    server.close()
  }
}

创建客户端

package bigdata.sparkCore.sparkTest01

import java.io.ObjectOutputStream
import java.net.Socket

/**
 * 相当于客户端
 */
object Driver {
  def main(args: Array[String]): Unit = {
    //连接我们的服务器9999和8888
    val client1=new Socket("localhost",9999)
    val client2=new Socket("localhost",8888)

    val dataStructures =new dataStructure()

    //给服务器发送对象输出流
    val out1 = client1.getOutputStream
    val objOut1=new ObjectOutputStream(out1)

    val task1 =new task();
    task1.logic=dataStructures.logic
    task1.datas=dataStructures.datas.take(2)

    objOut1.writeObject(task1)
    objOut1.flush()
    objOut1.close()
    client1.close()



    val out2 = client2.getOutputStream
    val objOut2=new ObjectOutputStream(out2)

    val task2 =new task();
    task2.logic=dataStructures.logic
    task2.datas=dataStructures.datas.takeRight(2)

    objOut2.writeObject(task2)
    objOut2.flush()
    objOut2.close()
    objOut2.close()


    println("客户端数据发送完毕")


  }
}

先启动服务器1,服务器2,
然后启动客户端
执行结果
客户端:
在这里插入图片描述
服务器1:
在这里插入图片描述
服务器2:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

人济紫顶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值