在纱线簇模式下运行多次的Spark应用程序

时间:2018-07-19 14:45:31

标签: scala apache-spark parallel-processing yarn

我有一个spark应用程序,可以对各种文件夹中的文件执行某些任务“ x”。任务“ x”对于每个文件夹都是独立的。所以我想并行运行。以下是我如何使用并行集合实现示例代码。

//Get list of file prefixes
//e.g., [hello1_, hello2_, hello3_]
var prefixNamesList = getPrefixNameList(envVar.getFolderListFilePath()).par

prefixNamesList.foreach { prefixname =>
      println("prefixname is  " + prefixname)

      // Get all the filenames starting with the prefixname
      // e.g., [hello1_xyz.txt, hello1_abc.txt]
      var fileNamesList = dirUtils.findMultipleFiles(source, prefixname)

      if (fileNamesList == "" || fileNamesList.isEmpty) {
        println("FilesNamesList is Empty")

      } else {

        println("list of files are " + fileNamesList)
        // Has to print 'hello1_xyz.txt' & 'hello1_abc.txt' in the first iteration
        for (fileName <- fileNamesList) {

          println("filename is  " + fileName)
        }
      }
}

例如,如果我有70个文件夹,并且每个文件夹都有2个文件,它们以相应的前缀(“ hello1_”)开头,则逻辑应执行最后一条打印消息“文件名是“ 140次。

当我在本地模式下运行应用程序时:

spark-submit  --class "com.test.DataMover" --driver-memory 4g --master "local[*]"  Spark-test-jar-with-dependencies.jar

该消息出现140次,这是正确的。但 当我以纱线簇模式运行应用程序时:

spark-submit  --class "com.test.DataMover" --driver-memory 4g --master yarn --deploy-mode cluster  Spark-test-jar-with-dependencies.jar

该消息出现了700次,这意味着循环重复了5次。有人可以帮我解决问题吗?

谢谢。

0 个答案:

没有答案