spark入门学习(2)---利用akka建立基于心跳基础的通信框架

Scala第二十章节(Akka并发编程框架、Akka入门案例、Akka定时任务代码实现、两个进程间通信的案例以及简易版spark通信框架案例) 1. 理解Akka并发编程框架简介 2. 掌握Akka入门案例 3. 掌握Akka定时任务代码实现 4. 掌握两个进程间通信的案例 5. 掌握简易版spark通信框架案例 阅读详情

1、架构图

这里写图片描述

2、业务要求

通信业务逻辑:
首先启动master,然后启动所有的worker
1.worker启动后,在preStart方法中与master建立连接,向master发送注册,将worker的信息通过case class封装起来发送给master
2.master接受到worker的注册消息后将worker的消息保存起来,然后向worker反馈注册成功
3.worker向master定期发送心跳,报活
4.master定时清理超时的worker

3、代码实现

3.1、master

Master.scala

package org.tianjun.rpc

import akka.actor.{Props, ActorSystem, Actor}
import com.typesafe.config.ConfigFactory

import scala.collection.mutable
import scala.concurrent.duration._


/**
 * 基于akka的rpc
 * Created by tianjun on 2017/1/11 0011.
 */
class Master(val host:String,val port:Int) extends Actor{

//  println("constructor invoked!")

  //workerId-->workerInfo
  val idToWorker = new mutable.HashMap[String,WorkInfo]()
  //workerINfo
  val workes = new mutable.HashSet[WorkInfo]
  //超时检测的间隔
  val CHECK_INTERVAL = 15000

  override def preStart(): Unit = {
    println("preStart invoked!")
    //导入隐式转换
    import context.dispatcher
    context.system.scheduler.schedule(0 millis,CHECK_INTERVAL millis,self,CheckTimeOutWorker)
  }

  override def receive: Receive = {

    case RegisterWorker(id,memory,cores) => {
      //判断是否已经注册
      if(!idToWorker.contains(id)){
        //没有注册,就把worker的信息封装保存到内存中
        val workerInfo = new WorkInfo(id,memory,cores)
        idToWorker(id) = workerInfo
        workes+=workerInfo
        sender ! RegisteredWorker(s"akka.tcp://MasterSystem@$host:$port/user/Master")
      }
    }
    case HeartBeat(id)=>{
      if(idToWorker.contains(id)){
        val workInfo = idToWorker(id)
        //报活
        val currentTime = System.currentTimeMillis()
        workInfo.lastHearBeatTime = currentTime
      }
    }

    case CheckTimeOutWorker => {
      val currentTime = System.currentTimeMillis()
      val toRemove = workes.filter(x=>currentTime-x.lastHearBeatTime > CHECK_INTERVAL)
      for(w <- toRemove){
        workes -= w
        idToWorker -= w.id
      }

      println(workes.size)
    }
  }
}

object Master{

  def main(args: Array[String]) {

    val host = args(0)
    val port = args(1).toInt

    val configStr =
      s"""
         |akka.actor.provider = "akka.remote.RemoteActorRefProvider"
         |akka.remote.netty.tcp.hostname = "$host"
         |akka.remote.netty.tcp.port = "$port"
       """.stripMargin
    val config = ConfigFactory.parseString(configStr)
    //ActorSystem老大,辅助创建和监控actor,它是单例的
    val actorSystem = ActorSystem("MasterSystem",config)

    val master = actorSystem.actorOf(Props(new Master(host,port)),"Master")


    actorSystem.awaitTermination()

  }
}

3.2、worker

Worker.scala

package org.tianjun.rpc

import java.util.UUID

import akka.actor.{Props, ActorSystem, ActorSelection, Actor}
import com.typesafe.config.ConfigFactory
import scala.concurrent.duration._

/**
 * rpc入门
 * Created by tianjun on 2017/1/11 0011.
 */
class Worker(val masterHost:String,val masterPort:Int,val memory:Int,val cores:Int) extends Actor{

  var master:ActorSelection = _

  val workId = UUID.randomUUID().toString

  val Heart_INTERVAL=10000

  override def preStart(): Unit = {
    //跟Master建立链接
    master = context.actorSelection(s"akka.tcp://MasterSystem@$masterHost:$masterPort/user/Master")
    //向Master发送注册信息
    master ! RegisterWorker(workId,memory,cores)
  }

  override def receive: Receive = {
    case RegisteredWorker(masterUrl) => {
      println(masterUrl)
      //启动定时器发送心跳
      import context.dispatcher
      context.system.scheduler.schedule(0 millis,Heart_INTERVAL millis,self,SendHeartbeat)
    }

    case SendHeartbeat =>{
      println("send heartbeat to master")
      master ! HeartBeat(workId)
    }
  }
}

object Worker{
  def main(args: Array[String]) {
    val host = args(0)
    val port = args(1).toInt
    val masterHost=args(2)
    val masterPort = args(3).toInt

    val memory = args(4).toInt
    val cores = args(5).toInt

    val configStr =
      s"""
         |akka.actor.provider = "akka.remote.RemoteActorRefProvider"
         |akka.remote.netty.tcp.hostname = "$host"
         |akka.remote.netty.tcp.port = "$port"
       """.stripMargin
    val config = ConfigFactory.parseString(configStr)
    //ActorSystem老大,辅助创建和监控actor,它是单例的
    val actorSystem = ActorSystem("WorkSystem",config)

    actorSystem.actorOf(Props(new Worker(masterHost,masterPort,memory ,cores)),"Worker")

    actorSystem.awaitTermination()
  }
}

RemoteMessage.scala

package org.tianjun.rpc

/**
 * 跨进程通信
 * Created by tianjun on 2017/1/11 0011.
 */
trait RemoteMessage extends Serializable

//Worker-->Master
case class RegisterWorker(id:String,memory:Int,cores:Int) extends RemoteMessage

//worker->master
case class HeartBeat(id:String)


//Master-->Worker
case class RegisteredWorker(masterUrl:String) extends RemoteMessage



//master->self
case object CheckTimeOutWorker
//worker-->self
case object SendHeartbeat

WorkInfo.scala

package org.tianjun.rpc

/**
 * Created by tianjun on 2017/1/11 0011.
 */
class WorkInfo(val id:String,val memory:Int,cores:Int) {

  //TODO 上一次心跳
  var lastHearBeatTime : Long = _

}

4、运行

master:

preStart invoked!
0
1
1

worker:

akka.tcp://MasterSystem@192.168.64.1:8888/user/Master
send heartbeat to master
send heartbeat to master
send heartbeat to master
汽车电子电气架构 控制器:从多独立 ECU → 域控制器(DCU) → 中央计算平台 + 区域控制器,硬件集成度持续提升,冗余减少;算力:从分散无集中算力 → 按域分配算力 → 全域算力集中,算力量级从 MIPS 跃升至 TOPS,支撑高阶智驾;网络:从低速 CAN/LIN 独占 → 以太网为主、总线为辅 → 高速以太网主干,数据传输速率提升千倍;软硬件:从软硬件深度绑定 → 初步解耦 → 完全解耦(SOA),实现 “硬件预埋、软件解锁”;线束。 阅读详情

相关推荐

关系代数表达式优化步骤

关系代数表达式优化步骤 本篇主要讲解怎么画查询语法树并对其优化,因为我在学关系代数的语法树的时候,在网上找不到比较详细的教法或者技巧,最后通过答案反推原理,所以想写一篇技巧来描述一下这类题的解题方法。 先上书内讲解 1、构造查询树 第一步:把用高级语言定义的查询转换为关系代数表达式 ★ 以 SELECT子向对应投影操作,以FROM字向对应笛卡尔积以 WHERE子句对应选择操作,生成原始查询树 ★ SQL语句转化为原始查询树 第二步:把关系代数表达式转换为查询树。 注: 查询树是一种表示关系代数表达式的树形结

m0_51718449的博客 7016

Akka编程讲解之构建高并发与可扩展系统

在当今的分布式系统中,高并发性、可扩展性和容错性是至关重要的特性。Akka作为一个基于Actor模型的工具包,提供了一种简洁而强大的方式来构建这些特性。通过Akka,开发者能够创建高效的并发应用,处理数百万个并发用户请求,且无需担心系统的稳定性。本文将深入探讨Akka的核心概念,并提供详细的代码示例,帮助您掌握如何利用Akka构建健壮的系统。Akka基于Actor模型,Actor是计算的基本单位,负责处理消息和管理状态。

hello.reader 1546

单细胞分析进阶:sctransform标准化在Seurat中的实战解析

本文深入解析了sctransform标准化方法在Seurat单细胞分析中的实战应用。通过对比传统对数标准化,sctransform能更有效地建模并剔除技术噪音,提升数据质量。文章提供了从环境配置、数据准备、核心参数解析到完整流程整合的详细指南,并针对常见问题给出解决方案,帮助研究者获得更清晰的细胞分群和更可靠的差异表达结果。

weixin_29248313的博客 152

Spark与Akka集成

1.背景介绍 Spark和Akka都是现代大数据处理和分布式系统领域的重要技术。Spark是一个快速、易用的大数据处理框架,可以用于批处理、流处理和机器学习等多种任务。Akka是一个用于构建分布式系统的开源框架,它提供了一组可扩展的工具和库,以实现高性能、可靠性和可伸缩性。 在大数据处理和分布式系统中,Spark和Akka之间的集成非常重要,因为它们可以相互补充,提供更强大的功能。例如,Spa...

AI天才研究院 1175

【Python 实战基础】如何绘制热力图来模拟绘制北京景区热度图

Python如何绘制热力图来模拟绘制北京景区热度图 文件读写 基础语法 字符串处理 文件生成 数据构建

菜鸟实战的博客 3402

(考研湖科大教书匠计算机网络)第四章网络层-第三节3、4:划分子网的IPv4地址和无分类IP地址

子网掩码: 32比特的子网掩码可以表明分类IP地址的主机号部分被借用了几个比特作为子网号子网掩码使用连续的比特1来对应网络号和子网号子网掩码使用连续的比特0来对应主机号将划分子网的IPv4地址与其相应的子网掩码进行逻辑与运算就可得到IPv4地址所在子网的网络地址如下图。

快乐江湖的博客 1348

SPARK-为啥spark用netty替换akka

很多Spark用户也使用Akka,但是由于Akka不同版本之间无法互相通信,这就要求用户必须使用跟Spark完全一样的Akka版本,导致用户无法升级Akka。 Spark的Akka配置是针对Spark自身来调优的,可能跟用户自己代码中的Akka配置冲突。 Spark用的Akka特性很少,这部分特性很容易自己实现。同时,这部分代码量相比Akka来说少很多,debug比较容易。如果遇到什么bug,也可以自己马上fix,不需要等Akka上游发布新版本。而且,Spark升级Akka本身又因为第一点会强制要求用户升.

DCHAO的博客 615

基于Python的房地产评估数据抓取与分析 —— 房价走势与市场报告

在房地产行业中,了解和分析房产价格的变化趋势、各个地区的房价差异以及市场评价报告,可以帮助投资者、购房者以及政策制定者做出更加明智的决策。本文介绍了如何使用Python爬虫技术抓取房地产平台上的房产评估报告、价格走势等数据,并对抓取的数据进行分析。通过这些技术,您可以自动化抓取房地产平台的数据,分析房价走势,获取市场报告,为房地产投资决策提供数据支持。假设我们要从链家网抓取某个房产的价格、房产描述以及历史成交价格,首先需要获取目标房产页面的URL,并发送HTTP请求。伪装为常见浏览器,避免被识别为爬虫。

2201_76125261的博客 847

使用akka框架和scala语言编写简单的RPC通信案例并打包到linux机器上模拟提交到集群上运行

前言 1)akka框架是一个并发的、分布式的、可伸缩性的、高性能的RPC通信框架,大数据开发框架Spark、flink底层原理中或多或少都用到了 2)scala语言真的很强大、好用、方便,结合了面向对象语言和函数式语言的特点 akka的原理图 大多数分布式框架或工具 都遵循着主从节点的架构设计,在这里我们暂不考虑高可用的模式(高可用可参考文章Zookeeper之HDFS-HA高可用模式) 每个机器上的一个进程中只存在着1个通信角色对象 ActorSystem ,也就是说 Acto..

周星星 350

Test软件:Keysight二次开发_(1).Keysight软件开发概述

VISA(Virtual Instrument Software Architecture)库是Keysight提供的一种标准化的仪器控制接口,支持多种编程语言和开发环境。仪器通信:通过GPIB、USB、以太网等接口与仪器进行通信。数据采集:从仪器中获取测量数据。命令发送:向仪器发送控制命令。错误处理:处理通信过程中可能出现的错误。测试自动化是指通过编写脚本或程序来自动执行测试任务,从而提高测试效率和减少人为错误。Keysight的测试设备和仪器支持多种编程语言和开发环境,使得测试自动化变得相对容易。

2401_87715305的博客 1359

自定义View系列教程04--Draw源码分析及其实践

通过之前的详细分析,我们知道:在measure中测量了View的大小,在layout阶段确定了View的位置。 完成这两步之后就进入到了我们相对熟悉的draw阶段,在该阶段真正地开始对视图进行绘制。按照之前的惯例,我们来瞅瞅View中draw( )的源码 public void draw(Canvas canvas) { final int privateFlags = mPriv

谷哥的小弟 2万+

利用akka模拟Spark的Master与Worker通信

利用akka模拟Spark的Master与Worker通信,Master与Worker通信过程,Master实现,Worker实现

Maverick_曲流觞的博客 838

南 京 农 业 大 学 试 题 纸 附表(rape.csv)是25个油菜材料,测得每个材料的千粒重、亚油酸等的含量. (1) 对物质含量的八个指标作主成分分析,画出碎石图和主成分得分图; (2) 选

(1)请用n1

Mrrunsen的博客 498

Akka事件驱动——模拟Spark注册、心跳

文章目录Akka事件驱动——模拟Spark心跳Akka简介事件驱动示意图 Akka事件驱动——模拟Spark心跳 Akka简介 对于Netty封装的网络通信框架 基于事件驱动模型:异步、非阻塞、高性能 Actor的并发模型,单个线程内可以共存多个Actor,不需要为每个连接维护一个线程 由Scala编写 事件驱动示意图 ...

蒋含竹的博客 1219

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

使用Akka实现一个简易版的spark通信框架

需求实现逻辑 启动master和worker 在worker端对应的preStart方法中拿到master的引用对象,通过这个master引用向master发送注册信息,注册信息包含workerId, workCores, workMemory等信息 master接受worker注册信息,保存注册信息在一个map集合当中,key为workerId,value为注册信息样例类。master将w...

MannerXu的博客 331

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

【Scala】利用akka实现Spark启动通信

文章目录思路分析步骤一、创建maven工程,导包二、master进程代码开发三、worker进程代码开发 思路分析 1.首先启动master,然后依次启动worker 2.启动worker时,向master发送注册信息(使用case class封装注册信息——workerID,memory,cores) 3.接收注册信息,保存注册的worker信息,返回注册成功的消息 4.worker需要定时向...

关于我转生变成程序猿这档事 406

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Akka模拟Spark Master和Worker通信

Akka模拟Spark Master和Worker通信案例案例意义需求分析Spark Master和Worker通信案例Master代码Worker代码样例类结果 学习Saprk的源代码,那么对Akka的通信原理一定要熟悉,我们通过Akka模拟Spark Master和Worker之间的通信过程,从而深入Spark的Master和Worker的通讯机制。学习Spark Master和Worker如何通信之前需要了解 Akka网络编程案例. 案例意义 深入理解Spark的Master和Worker的通讯机制

secret2316352792的博客 510

基于Akka模拟Spark中Master和Worker的通信过程

一、Spark中Master与Worker之间的通信过程 1、在启动时,Worker会向Master注册自己的信息(内存、核数等),以便 2、Master收到各Worker的注册信息后,会回复Worker已注册成功的信息 3、worker收到master的注册成功信息后,会定期向Master发送心跳包,回报自己的状态信息 4、Master定期收到Worker的心跳信息后,会更新各个Wo...

zp的博客 1077

用Akka实现spark底层的通信框架

基本思路 Master: package com.ycit.akka.rpc import akka.actor.{Actor,ActorSystem, Props} import com.typesafe.config.ConfigFactory import scala.concurrent.duration._ import scala.collection.mutable /*...

qq_40068214的博客 477

Akka简介与实现RPC通信流程

1、akka通信: ①akka是一个通信框架,基于Actor编程模型实现,底层使用Netty来实现远程RPC通信; ②可以是单机的,也可以是分布式的;Akka中内置了许多的mailboxes; ③在akka里,Actor之间通信的唯一机制就是消息传递; ④spark1.6版本之前,spark分布式节点之间的消息传递使用的就是Akka,底层也就是actor实现的;1.6之后底层使用的netty传输。 2、Actor简介: ①Actor是用来收发消息,处理逻辑的,Actor就是通过收发消息实现并发的; ②Act

weixin_45484707的博客 1449

Akka模拟Spark通信架构过程

本文我们深度剖析了Spark架构演变过程中使用到的多种RPC实现,以及其使用技术的原理,具体的架构设计思路,并且模拟其实现案例,希望可以具体详实说明内容。

weixin_38650574的博客 527

Netty下的spark网络通信框架

1 前言 分布式系统必备的基础组件之一, 就是分布式网络通信框架。Spark 是一个通用的分布式计算系统,既然是分布式的,必然存在很多节点之间的通信,那么Spark 不同组件之间就会通过RPC (Remote Procedure Call)进行点对点通信。 01、driver 和master的通信,比如driver会向master发送RegisterApplication消息 02、master 和worker的通信,比如worker会向master上报worker上运行的Executor信息 03、exe

weixin_38650574的博客 2217

Spark技术内幕:Client,Master和Worker 通信源码解析

本文分析了Spark1.0.0的Client,Master和Worker之间是如何通信的。通过对通信的分析,可以清楚的理解各个角色的作用和责任,和它在集群中扮演的不同角色。 当然了,为了便于源码分析,本文开始分析了akka,一个非常优秀的actor的实现:高性能,易于编程,可扩展和弹性无中心。

anzhsoft的技术专栏 3万+

scala_Akka并发编程框架

文章目录Akka并发编程框架简介Akka介绍Akka特性Akka通信过程创建ActorAPI介绍入门案例实现步骤1. 创建Maven模块2. 创建并加载Actor3. 发送/接收消息Akka定时任务使用方式示例一示例二实现两个进程之间的通信案例介绍1. Worker实现2. Master实现简易版spark通信框架案例案例介绍实现思路1. 工程搭建2. 构建Master和Worker3. Work...

Imflash的博客 641

为什么 spark 2.0 底层通信不用 Akka 而转用 netty

在大数据处理领域,Apache Spark 无疑是最为炙手可热的框架之一。从最初的版本到如今的 Spark 3.x,Spark 的每一次迭代都带来了性能和功能上的显著提升。然而,在这些变化中,有一个重要的技术决策特别引人关注:Spark 2.0 为什么放弃了 Akka 而转而使用 Netty 作为底层通信框架?这个问题不仅关系到 Spark 的性能优化,还涉及到了更广泛的分布式系统设计原则。本文将深入探讨这一决策的背后原因,并通过数据和实例来支持我们的分析。

yjq125931902的博客 433

使用Akka实现简易的spark通信框架 实战(二)

使用Akka实现简易的spark通信框架 实战(二)1. 架构图2. 代码实现2.1 Master类package cn.cheng.sparkimport akka.actor.{Actor, ActorRef, ActorSystem, Props} import com.typesafe.config.ConfigFactoryimport scala.collection.mutable i

Running_Tiger的博客 975
上一篇: spark入门学习(1)---利用akka建立最基础的通信框架
下一篇: 修改Linux的基本配置
tianjun2012
博客等级 码龄16年 140粉丝 152原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值