本节课主题
1、Spark源码中并发编程源码阅读
2、Scala并发编程实战
早期Spark中是通过Akka进行并发通信,Spark 1.6.x以后是通过Netty,在Scala中是通过Actor来实现并发编程,就相当于收邮件和发邮件机制。
我们通过代码实战Actor
在进行Scala的Actor编程前(Scala 2.11.8版本),需要先引进2个jar包:
scala-actors.jar
scala-actors-migration.jar
参考示例代码:
package com.dt.scala
import scala.actors.Actor
case class Hello(name: String, content: String, sender: Actor)
case class HelloBack(name: String, content: String, sender: Actor)
class HelloActor extends Actor {
var counter = 0
override def act() {
while (true) {
receive {
case content: String => println("Message:" + content)
case Hello(name, content, sender) => {
println("HelloActor:" + name + " content:" + content + counter)
counter += 1
Thread.sleep(3000) //睡眠3s
sender ! HelloBack(name, content, this) // Actor发送消息语法!
}
}
}
}
}
class HelloBackActor(val helloActor: Actor) extends Actor {
var counter = 0
override def act() {
//启动给HelloActor发送信息
helloActor ! Hello("Spark", "Love is here!", this) // this = HelloBackActor
while (true) {
receive {
case content: String => println("Message:" + content)
case HelloBack(name, content, sender) => {
println("HelloBackActor:" + name + " content:" + content + counter)
counter += 1
Thread.sleep(3000) //睡眠3s
sender ! Hello(name, content, this)
}
}
}
}
}
object HelloScalaActor {
def main(args: Array[String]): Unit = {
val helloActor = new HelloActor
helloActor.start() //启动Actor来接收消息
val hellBackActor = new HelloBackActor(helloActor)
hellBackActor.start()
// var counter = 0
// while (true) {
// helloActor ! "Life is short,you need spark!!!" + counter //Actor发消息语法:!
// counter += 1
//
// //发完消息睡眠3s
// Thread.sleep(3000)
// }
//发送消息
//helloActor ! Hello("Spark", "you need spark!!!")
}
}
备注:
资料来源于:DT_大数据梦工厂(Spark"蘑菇云"行动)
更多私密内容,请关注微信公众号:DT_Spark
如果您对大数据Spark感兴趣,可以免费听由王家林老师每天晚上20:00开设的Spark永久免费公开课,
地址YY房间号:68917580