Spark和Scala中的多核用法和内存共享

时间:2015-07-23 19:51:41

标签: scala apache-spark

我是Spark,Scala的新手,我有几个问题 -

  1. 当我将master设置为local[2]时,是否意味着每当我执行rdd.map( ... ).collect()之类的操作时,map函数将在2个内核上执行?
  2. 跟进1,如果RDD中的项目数等于核心数,它会是最佳的吗? (以便每个地图都在一个核心中完成。)
  3. 如果我重用值,内存是如何共享的?

    val conf = new SparkConf().setMaster("local["+cores+"]")
    val sc = new SparkContext(conf)
    
    // in practice the following will be sparse matrix which I want shared between threads
    val myHugeValue = 100
    
    // in practice the following would interact with myHugeValue
    sc.parallelize(Array.range(0, cores)).map(myHugeValue + _).collect()
    

    在上文中,myHugeValue会在使用myHugeValue时将其复制到每个映射器函数吗?如果是这样,我如何更改impl以使其不被复制?

  4. 编辑1:

    更具体的2., 假设我的集群中有10个节点或工作核心,那么如果我的数据被分成10个部分以便每个节点可以处理其批处理,那么处理是否最有效?是否有理由将数据拆分为较小的块并增加网络开销?

    我不想复制值myHugeValue的原因是因为它是一个巨大的对象,需要时间复制每个地图操作。地图操作被调用了很多次迭代。我宁愿每个群集缓存一次对象,然后重复调用map函数。有这样做的Spark方法吗?

0 个答案:

没有答案