当前位置: 首页 > news >正文

企业网站架构/百度学术论文查重官网入口

企业网站架构,百度学术论文查重官网入口,哪个网站可以做任务赚钱的,百姓网如何创建位置闭包:作用域内访问自己的函数变量、属性(包括表达式等)(个人理解) spark中的闭包理解我们可以通过一个小例子 object Test { def main(args:Array[String]):Unit { val conf new SparkConf().setAppName(&…

闭包:作用域内访问自己的函数变量、属性(包括表达式等)(个人理解)

spark中的闭包理解我们可以通过一个小例子

object Test {
  def main(args:Array[String]):Unit = {
      val conf = new SparkConf().setAppName("test");
      val sc = new SparkContext(conf)

      val rdd = sc.parallelize(List(1,2,3))
      var counter = 0
      //warn: don't do this
      rdd.foreach(x => counter += x)
      println("Counter value: "+counter)

      sc.stop()
    }
}
如上所示程序打印的结果是0不是6.

问题分析:counter是在foreach函数外部定义的,也就是在driver程序中定义,而foreach函数是属于rdd对象的,rdd函数的执行位置是各个worker节点(或者说worker进程),main函数是在driver节点上(或者说driver进程上)执行的,所以当counter变量在driver中定义,被在rdd中使用的时候,出现了变量的“跨域”问题,也就是闭包问题。
问题解释: 
对于上面程序中的counter变量,由于在main函数和在rdd对象的foreach函数是属于不同“闭包”的,所以,传进foreach中的counter是一个副本,初始值都为0。foreach中叠加的是counter的副本,不管副本如何变化,都不会影响到main函数中的counter,所以最终打印出来的counter为0.

当用户提交了一个用scala语言写的Spark程序,Spark框架会调用哪些组件呢?首先,这个Spark程序就是一个“Application”,程序里面的mian函数就是“Driver Program”, 前面已经讲到它的作用,只是,dirver程序的可能运行在客户端,也有可有可能运行在spark集群中,这取决于spark作业提交时参数的选定,比如,yarn-client和yarn-cluster就是分别运行在客户端和spark集群中。在driver程序中会有RDD对象的相关代码操作,比如下面代码的newRDD.map()

class Test{
  def main(args: Array[String]) {
    val sc = new SparkContext(new SparkConf())
    val newRDD = sc.textFile("")

    newRDD.map(data => {
      //do something
      println(data.toString)
    })
  }
}
涉及到RDD的代码,比如上面RDD的map操作,它们是在Worker节点上面运行的,所以spark会透明地帮用户把这些涉及到RDD操作的代码传给相应的worker节点。如果在RDD map函数中调用了在函数外部定义的对象,因为这些对象需要通过网络从driver所在节点传给其他的worker节点,所以要求这些类是可序列化的,比如在Java或者scala中实现Serializable类,除了java这种序列化机制,还可以选择其他方式,使得序列化工作更加高效。worker节点接收到程序之后,在spark资源管理器的指挥下运行RDD程序。不同worker节点之间的运行操作是并行的。

​ 在worker节点上所运行的RDD中代码的变量是保存在worker节点上面的,在spark编程中,很多时候用户需要在driver程序中进行相关数据操作之后把该数据传给RDD对象的方法以做进一步处理,这时候,spark框架会自动帮用户把这些数据通过网络传给相应的worker节点。除了这种以变量的形式定义传输数据到worker节点之外,spark还另外提供了两种机制,分别是broadcast和accumulator。相比于变量的方式,在一定场景下使用broadcast比较有优势,因为所广播的数据在每一个worker节点上面只存一个副本,而在spark算子中使用到的外部变量会在每一个用到它的task中保存一个副本,即使这些task在同一个节点上面。所以当数据量比较大的时候,建议使用广播而不是外部变量。

 

参考博客:

https://blog.csdn.net/liangyihuai/article/details/56840473

http://www.jmfq.cn/news/4854835.html

相关文章:

  • 专业网站制作设/网站推广步骤
  • 南通代办公司注册连锁/谷歌优化是什么意思
  • 湖南做网站360o/游戏推广平台代理
  • 企业做网站需要什么/域名注册需要多少钱
  • 营销型网站有哪些app/中企动力做网站推广靠谱吗
  • 网站前端/百度开户
  • 上海网站建设网络推广/百度网站制作联系方式
  • 交互式网站开发技术/百度竞价包年推广公司
  • 网站对于企业的好处/seo标签优化
  • 服装设计自学零基础/网站的seo如何优化
  • 厦门百度推广优化排名/seo去哪里学
  • 网站页面设计图是用什么软件画的/影响关键词优化的因素
  • 泰兴做网站/厦门网络营销推广
  • 专注做动漫的门户网站/如何seo推广
  • wordpress 后台进不去_如何替换主题/合肥百度推广排名优化
  • 外贸独立网站做仿品/整站优化和关键词优化的区别
  • 企业信息管理系统案例/台州seo排名优化
  • 如何自己办网站/域名注册多少钱
  • 杭州招标信息网/电脑网络优化软件
  • 网站搭建团队/淘宝指数在线查询
  • 网站托管服务适合/微信推广怎么弄
  • 图解asp.net网站开发实战/今天新闻头条新闻
  • 在线看网站建设/湖南平台网站建设制作
  • 怎样做购物网站/游戏加盟
  • 小程序做网站/天津优化公司
  • 品牌型网站建设哪里好/网站百度不收录的原因
  • 团购做的好的网站/线上营销平台
  • 手机网站跟pc网站有什么不同/百度怎么注册自己的网站
  • 记事本网站开发/建站模板网站
  • 织梦做音乐网站/合肥网站快速排名提升