• spark学习笔记(一)——模拟分布式计算


    目录

    pom.xml

    Task:封装数据和逻辑

    Subtask:分享Task的数据和逻辑进行计算

    driver:模拟client,分配计算任务

    executer:接收driver传输的数据执行计算

    测试


    pom.xml

    
        
            org.apache.spark
            spark-core_2.12
            3.0.0
        
    
    
        
            
            
                net.alchim31.maven
                scala-maven-plugin
                3.2.2
                
                    
                        
                        
                            testCompile
                        
                    
                
            
            
                org.apache.maven.plugins
                maven-assembly-plugin
                3.1.0
                
                    
                        jar-with-dependencies
                    
                
                
                    
                        make-assembly
                        package
                        
                            single
                        
                    
                
            
        
    

    Task:封装数据和逻辑

    1. class Task extends Serializable {
    2. //数据
    3. val datas = List(2,4,6,8)
    4. //逻辑:x2
    5. val logic = ( num:Int) => {num * 2}
    6. }

    Subtask:分享Task的数据和逻辑进行计算

    1. class SubTask extends Serializable {
    2. var datas: List[Int] = _
    3. var logic: (Int) => Int = _
    4. //计算
    5. def compute(): List[Int] = {
    6. datas.map(logic)
    7. }
    8. }

    driver:模拟client,分配计算任务

    1. object driver {
    2. def main(args: Array[String]): Unit = {
    3. //连接服务器
    4. val client1 = new Socket("localhost",9999)
    5. val client2 = new Socket("localhost",8888)
    6. val task = new Task()
    7. val subTask1 = new SubTask()
    8. //取Task逻辑
    9. subTask1.logic = task.logic
    10. //取Task的数据
    11. subTask1.datas = task.datas.take(2)
    12. val out1: OutputStream = client1.getOutputStream
    13. val objOut1 = new ObjectOutputStream(out1)
    14. //写人数据、刷新、关闭
    15. objOut1.writeObject(subTask1)
    16. objOut1.flush()
    17. objOut1.close()
    18. client1.close()
    19. println("客服端[9999]发送数据完成!")
    20. val subTask2 = new SubTask()
    21. //取Task逻辑
    22. subTask2.logic = task.logic
    23. //取Task的数据
    24. subTask2.datas = task.datas.takeRight(2)
    25. val out2: OutputStream = client2.getOutputStream
    26. val objOut2 = new ObjectOutputStream(out2)
    27. //写人数据、刷新、关闭
    28. objOut2.writeObject(subTask2)
    29. objOut2.flush()
    30. objOut2.close()
    31. client2.close()
    32. println("客服端[8888]发送数据完成!")
    33. }
    34. }

    executer:接收driver传输的数据执行计算

    executer1

    1. object Executer {
    2. def main(args: Array[String]): Unit = {
    3. //启动服务器接收数据
    4. val server = new ServerSocket(9999)
    5. println("服务器启动,等待接收数据!")
    6. //等待客服端连接
    7. val client: Socket = server.accept()
    8. val in: InputStream = client.getInputStream
    9. val objIn = new ObjectInputStream(in)
    10. val task: SubTask = objIn.readObject().asInstanceOf[SubTask]
    11. val ints: List[Int] = task.compute()
    12. println("计算节点[9999]计算的结果为:" + ints)
    13. objIn.close()
    14. client.close()
    15. server.close()
    16. }
    17. }

    executer2

    1. object Executer2 {
    2. def main(args: Array[String]): Unit = {
    3. //启动服务器接收数据
    4. val server = new ServerSocket(8888)
    5. println("服务器启动,等待接收数据!")
    6. //等待客服端连接
    7. val client: Socket = server.accept()
    8. val in: InputStream = client.getInputStream
    9. val objIn = new ObjectInputStream(in)
    10. val task: SubTask = objIn.readObject().asInstanceOf[SubTask]
    11. val ints: List[Int] = task.compute()
    12. println("计算节点[8888]计算的结果为:" + ints)
    13. objIn.close()
    14. client.close()
    15. server.close()
    16. }
    17. }

    测试

    启动顺序executer1----->executer2------>driver

    查看executer1和executer2

     

  • 相关阅读:
    想要查看员工与客户聊天记录和跟进情况,有什么工具推荐吗?
    Linux之进程间通信
    【Vue基础七】--- 组件和模块概念
    nuxt ssr时如何在component组件中进行异步数据获取
    雪花算法实现
    redis进阶
    python面向对象小练习-学员管理系统-eval()、__dict__
    学习记录——ipv4、ipv6与ip、DNS、网络协议
    Rockland丨Rockland多克隆抗体阶段执行方案
    基于SpringBoot框架的网上购物商城系统的设计与实现
  • 原文地址:https://blog.csdn.net/qq_55906442/article/details/125892925