加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

对Spark的那些【魔改】

发布时间:2018-08-17 00:38:59 所属栏目:教程 来源:祝威廉
导读:技能沙龙 | 邀您于8月25日与国美/AWS/转转三位专家配合切磋小措施电商拭魅战 媒介 这两年做 streamingpro 时,不行停止的必要对Spark做大量的加强。就犹如我之前吐槽的,Spark大量行使了new举办工具的建设,导致内里的实现根基没有步伐举办替代。 好比SparkEn

接着我们必要再封装一个LocalNonOpSerializer,

  1. class LocalNonOpSerializer(conf: SparkConf) extends Serializer with Externalizable { 
  2.   val javaS = new JavaSerializer(conf) 
  3.  
  4.   override def newInstance(): SerializerInstance = { 
  5.     new LocalNonOpSerializerInstance(javaS.newInstance()) 
  6.   } 
  7.  
  8.   override def writeExternal(out: ObjectOutput): Unit = Utils.tryOrIOException { 
  9.     javaS.writeExternal(out) 
  10.   } 
  11.  
  12.   override def readExternal(in: ObjectInput): Unit = Utils.tryOrIOException { 
  13.     javaS.readExternal(in) 
  14.   } 

此刻,万事俱备,只欠春风了,我们怎么才气把这些代码让Spark运行起来。详细做法很是魔幻,实现一个enhance类:

  1. def enhanceSparkEnvForAPIService(session: SparkSession) = { 
  2.       val env = SparkEnv.get 
  3.    //建设一个新的WowSparkEnv工具,然后将内里的Serializer替代成我们本身的LocalNonOpSerializer 
  4.     val wowEnv = new WowSparkEnv( 
  5.  ..... 
  6.       new LocalNonOpSerializer(env.conf): Serializer, 
  7.  ....) 
  8.     // 将SparkEnv object里的实例替代成我们的 
  9.     //WowSparkEnv 
  10.     SparkEnv.set(wowEnv) 
  11.   //可是许多处地址SparkContext启动后都已经在行使之前就已经天生的SparkEnv,我们必要做些调解 
  12. //我们先把之前已经启动的LocalSchedulerBackend里的scheduer停掉 
  13.     val localScheduler = session.sparkContext.schedulerBackend.asInstanceOf[LocalSchedulerBackend] 
  14.  
  15.     val scheduler = ReflectHelper.field(localScheduler, "scheduler") 
  16.  
  17.     val totalCores = localScheduler.totalCores 
  18.     localScheduler.stop() 
  19.  
  20.   //建设一个新的LocalSchedulerBackend 
  21.     val wowLocalSchedulerBackend = new WowLocalSchedulerBackend(session.sparkContext.getConf, scheduler.asInstanceOf[TaskSchedulerImpl], totalCores) 
  22.     wowLocalSchedulerBackend.start() 
  23.  //把SparkContext里的_schedulerBackend替代成我们的实现 
  24.     ReflectHelper.field(session.sparkContext, "_schedulerBackend", wowLocalSchedulerBackend) 
  25.   } 

落成。

着实尚有许多

好比在Spark里,Python Worker默认一分钟没有被行使是会被杀死的,可是在StreamingPro里,这些python worker由于都要加载模子,以是启动本钱长短常高的,杀了之后再启动就没步伐忍受了,通过相同的方法举办魔改,从而使得空闲时刻是可设置的。假如各人感乐趣,可以翻看StreamingPro相干代码。

【编辑保举】

  1. 一文理清Apache Spark内存打点脉络
  2. 深度:Hadoop对Spark五大维度正面比拼陈诉!
  3. 呆板进修实践:怎样将Spark与Python团结?
  4. Spark机能优化:开拓调优篇
  5. 大数据处理赏罚引擎Spark与Flink大比拼
【责任编辑:未丽燕 TEL:(010)68476606】
点赞 0

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读