2016-10-03 151 views
2

我基本上有2個保存操作要在我的數據框上執行。這項工作運行良好。但是當我看到Spark UI中的事件時間軸時,我明白第一個動作1完成,然後動作2開始並完成。如何在觸發器中觸發2個寫操作

由於這兩個操作是相互獨立的,有沒有什麼辦法可以一起執行它們。以下是我的代碼。

processedDF.write.format("ORC").options(Map("path" -> 
integrationFullPath)).mode(SaveMode.Overwrite).saveAsTable(HIVE_SCHEMA + "." 
+ hiveTableName + "_int") 
errorDF.write.format("ORC").options(Map("path" -> 
errorFullPath)).mode(SaveMode.Overwrite).saveAsTable(HIVE_SCHEMA + "." + 
hiveTableName + "_error") 

我想同時處理「processDF」和「errorDF」寫入HDFS。

回答

1

你可以在不同的線程啓動這些:

new Thread() { 
     override def run(): Unit = { 
     processedDF.write.format("ORC").options(Map("path" -> 
integrationFullPath)).mode(SaveMode.Overwrite).saveAsTable(HIVE_SCHEMA + "." 
+ hiveTableName + "_int") 
     } 
    }.start() 



    new Thread() { 
      override def run(): Unit = { 
      errorDF.write.format("ORC").options(Map("path" -> 
errorFullPath)).mode(SaveMode.Overwrite).saveAsTable(HIVE_SCHEMA + "." + 
hiveTableName + "_error") 
      } 
     }.start() 
0

請參閱調度文檔here。再現相關部分逐字:

內的規定星火應用(例如SparkContext),如果他們從不同的線程提交多個並行作業可以同時運行[...]默認情況下,星火的調度運行在FIFO工作時尚。每個工作分爲「階段」(例如地圖和縮小階段),第一項工作優先考慮所有可用資源,其階段有任務啓動,然後第二項工作得到優先考慮,等等。 Spark 0.8,也可以配置作業之間的公平共享。在公平分享下,Spark以「循環」方式在作業之間分配任務,以便所有作業獲得大致相等的羣集資源份額。這意味着在長時間工作時提交的短工可以立即開始接收資源,並且仍然可以獲得良好的響應時間,而無需等待長時間的工作。

val conf = new SparkConf().setMaster(...).setAppName(...) 
conf.set("spark.scheduler.mode", "FAIR") 
val sc = new SparkContext(conf) 

要啓用公平調度器,只需配置SparkContext當spark.scheduler.mode屬性設置爲FAIR