Spark能否预先解决重型第三方图书馆的问题?

时间:2017-02-10 15:23:59

标签: java apache-spark shared-libraries

我有一个相当重的金属库,可以通过Java / JNI连接器访问,我希望通过集群中的Spark使用它。但是,库需要在首次使用之前进行初始化,这需要大约30秒。 所以我的问题是Spark是否有一些机制在作业开始时预先初始化这些库,以便实际使用时不需要这个初始化开销?

1 个答案:

答案 0 :(得分:1)

  

问题 是Spark是否有一些预先初始化的机制   作业开始时的库,这样就不会产生初始化开销   实际使用需要吗?

AFAIK&截至目前...... Spark没有提供这样的设施,请看SPARK-650像sc.init ......

但是,如果您想要使用RDD转换进行预初始化,那么在运行作业之前需要空RDD,并且您可以重置和/或初始化群集...

map-reduce有setupclean方法来初始化和清理...... 您可以使用相同的方法将map-reduce样式代码转换为spark,例如:

  

注意:可以重新分区空RDD。所以我想下面是   如果您正在使用动作进行转换,则可以使用   foreachPartition

     

mapPartitions示例:

val rdd = sc.emptyRDD.repartition(sc.defaultParallelism)    
rdd.mapPartitions(partition -> 
        setup() //library initialization like map-reduce setup method
        partition.map( item => 
            val output = process(item) // your logic here.
            if (!partition.hasNext) {
               // cleanup here
            }
        )
    )
  

foreachPartition示例:

 if (rdd.isEmpty) {
      rdd.repartition(sc.defaultParallelism).foreachPartition(_ => yourUtils.initOnce())
    }

注意:mapartitions(转换)和foreachPartition(动作)在上述示例方式中可能很有用。