场景

两个Executor,分别接收来自Driver分发的任务(数据和计算逻辑)

代码

Executor1

package com.zxl.bigdata.spark.core.testimport java.io.{InputStream, ObjectInputStream}
import java.net.{ServerSocket, Socket}object Executor {def main(args: Array[String]): Unit = {// 启动服务器,接收数据val server = new ServerSocket(9999)println("服务器启动,等待接收数据")// 等待客户端的连接val client: Socket = server.accept()val in: InputStream = client.getInputStreamval objIn = new ObjectInputStream(in)val task: SubTask = objIn.readObject().asInstanceOf[SubTask]val ints: List[Int] = task.compute()println("计算节点[9999]计算的结果为:" + ints)objIn.close()client.close()server.close()}
}

Executor2

package com.zxl.bigdata.spark.core.testimport java.io.{InputStream, ObjectInputStream}
import java.net.{ServerSocket, Socket}object Executor2 {def main(args: Array[String]): Unit = {// 启动服务器,接收数据val server = new ServerSocket(8888)println("服务器启动,等待接收数据")// 等待客户端的连接val client: Socket = server.accept()val in: InputStream = client.getInputStreamval objIn = new ObjectInputStream(in)val task: SubTask = objIn.readObject().asInstanceOf[SubTask]val ints: List[Int] = task.compute()println("计算节点[8888]计算的结果为:" + ints)objIn.close()client.close()server.close()}
}

Task

package com.zxl.bigdata.spark.core.testclass Task extends Serializable {val datas = List(1,2,3,4)//val logic = ( num:Int )=>{ num * 2 }val logic : (Int)=>Int = _ * 2}

SubTask

package com.zxl.bigdata.spark.core.testclass SubTask extends Serializable {var datas : List[Int] = _var logic : (Int)=>Int = _// 计算def compute() = {datas.map(logic)}
}

Driver

package com.zxl.bigdata.spark.core.testimport java.io.{ObjectOutputStream, OutputStream}
import java.net.Socketobject Driver {def main(args: Array[String]): Unit = {// 连接服务器val client1 = new Socket("localhost", 9999)val client2 = new Socket("localhost", 8888)val task = new Task()val out1: OutputStream = client1.getOutputStreamval objOut1 = new ObjectOutputStream(out1)val subTask = new SubTask()subTask.logic = task.logicsubTask.datas = task.datas.take(2)objOut1.writeObject(subTask)objOut1.flush()objOut1.close()client1.close()val out2: OutputStream = client2.getOutputStreamval objOut2 = new ObjectOutputStream(out2)val subTask1 = new SubTask()subTask1.logic = task.logicsubTask1.datas = task.datas.takeRight(2)objOut2.writeObject(subTask1)objOut2.flush()objOut2.close()client2.close()println("客户端数据发送完毕")}
}

程序运行日志


Scala模拟Spark分布式计算流程示例代码相关推荐

  1. Spark 部署及示例代码讲解

    Spark 部署 考虑到读者可能使用"ssh secure shell"这样的工具登陆 Linux,所以解释一下如何设置工具支持中文. 如何设置 ssh secure shell ...

  2. Linkis1.0用户使用文档:JAVA和SCALA调用Linkis的接口示例代码

    Linkis 提供了方便的JAVA和SCALA调用的接口,只需要引入linkis-computation-client的模块就可以进行使用,1.0后新增支持带Label提交的方式,下面将对兼容0.X的 ...

  3. php post 二维数组,php curl模拟post请求和提交多维数组的示例代码

    这篇文章主要介绍了php curl模拟post请求和提交多维数组的示例代码,需要的朋友可以参考下 下面一段代码给大家介绍php curl模拟post请求的示例代码,具体代码如下: 'tanteng' ...

  4. python模拟登陆 验证码el_python 模拟登陆github的示例

    # -*- coding: utf-8 -*- # @Author: CriseLYJ # @Date: 2020-08-14 12:13:11 import re import requests c ...

  5. 模拟数字时钟,python代码

    这是一个使用 Python 创建模拟数字时钟的示例代码: importtime import oswhile True:# 获取当前时间current_time = time.strftime(&qu ...

  6. 用spark自带的示例SparkPi测试scala和spark集群

    在按照王家林的文档安装完scala,spark集群和idea-IC开发工具后,用spark自带的示例SparkPi测试scala和spark集群 1.按照王家林文档中的方法把spark自带的Spark ...

  7. python登录网页账号密码_Python 通过爬虫实现GitHub网页的模拟登录的示例代码

    1. 实例描述 通过爬虫获取网页的信息时,有时需要登录网页后才可以获取网页中的可用数据,例如获取 GitHub 网页中的注册号码时,就需要先登录账号才能在登录后的页面中看到该信息,如下图所示.那么该如 ...

  8. Spark SQL JOIN操作代码示例

    title: Spark SQL JOIN操作 date: 2021-05-08 15:53:21 tags: Spark 本文主要介绍 Spark SQL 的多表连接,需要预先准备测试数据.分别创建 ...

  9. python登录各种网页示例_Python 通过爬虫实现GitHub网页的模拟登录的示例代码

    1. 实例描述 通过爬虫获取网页的信息时,有时需要登录网页后才可以获取网页中的可用数据,例如获取 GitHub 网页中的注册号码时,就需要先登录账号才能在登录后的页面中看到该信息,如下图所示.那么该如 ...

最新文章

  1. 面对不同用户,数据中心如何将服务做到极致
  2. Java学习lesson 14
  3. protobuf---messge嵌套get set
  4. 关于 .NET 与 JAVA 在 JIT 编译上的一些差异
  5. 小程序 获取腾讯地图计算两经纬度的实际距离(可批量)_多地打卡
  6. 支付宝支付内容 尚未完成
  7. xercesimpl做什么用的_一体化泵站是用来做什么的有什么用
  8. kernel command line 参数详解
  9. ORB-SLAM2双目开源框架 (4) LoopClosing解析
  10. 奇怪的比赛|2012年蓝桥杯B组题解析第四题-fishers
  11. Bolt界面引擎元对象(UIObject)的动态创建
  12. 云计算对21世纪IT人的挑战
  13. phpcms修改了配置文件之后出现Warning: date() expects parameter 2 to be long..错误
  14. 此计算机无法连接道家庭组,无法加入家庭组怎么办
  15. oracle中alter index,oracle alter index rebuild online和alter index rebuild的區別
  16. 百度移动开放平台上线
  17. Linux 网络编程学习笔记——二、IP 协议详解
  18. win10 取消系统自动更新的方法-3种(所有最新版本都适用)
  19. 15款免费又好用的安全软件
  20. html5 geolocation 百度地图,html5 geolocation配合百度地图api实现定位

热门文章

  1. java joda 获取utc时间_java – 使用JodaTime以毫秒为单位的UTC到本地时间
  2. PyTorch随笔-2
  3. 趣学python3(40)--TCP服务器和客户端(socketserver类)
  4. 【Python】Python爬虫快速入门,BeautifulSoup基本使用及实践
  5. 【数据竞赛】十组不同类型的组合特征!
  6. 【算法】吴忠强:刷LeetCode的正确姿势!
  7. 【深度学习】翻译:60分钟入门PyTorch(四)——训练一个分类器
  8. 【深度学习】Tensorflow2.x入门(一)建立模型的三种模式
  9. 荣获中国音视频产业大会「科技创新奖」,网易云信彰显行业领先水平
  10. 被压缩的视觉:视频编解码技术