2017-05-08 103 views
0

我是一個新手,以Apache的火花,並試圖從我的應用程序(Tomcat)的創建SparkConf和我注意到下面的錯誤阿帕奇星火無法創建臨時目錄

ERROR [RMI TCP Connection(4)-127.0.0.1] DiskBlockManager.logError(91) | Failed to create local dir in /opt/software/apache-tomcat-7.0.70/temp. Ignoring this directory. 
java.io.IOException: Failed to create a temp directory (under /opt/software/apache-tomcat-7.0.70/temp) after 10 attempts! 
    at org.apache.spark.util.Utils$.createDirectory(Utils.scala:285) 

我還沒有配置SPARK_LOCAL_DIRS在spark-env.sh中。它按照默認安裝註釋掉。

我認爲我的問題與apache spark, 「failed to create any local dir」有關,但不是很確定。我應該將SPARK_LOCAL_DIRS配置爲每個主/工作節點中的有效目錄嗎?如果是這樣,目錄必須具有的最小磁盤空間是多少?

回答

1
  • 我還沒有在spark-env.sh中配置SPARK_LOCAL_DIRS。根據默認安裝,它被評論爲 。

    如果你沒有配置,那麼它會採取默認位置/TEMP

  • 我應該配置SPARK_LOCAL_DIRS在每個 主/工人節點有效的目錄? 是的,它可以更好地配置到您的應用程序可能需要的體面空間的位置。

  • 如果是這樣,目錄必須具有的最小磁盤空間是多少?

取決於應用程序的大小,你預計要運行,記錄每個工人產生,你要處理的數據量的數量(中間洗牌的數據將存儲在這裏),緩存數量的就業崗位數以及您即將緩存的數據量等。 我在我的應用程序中配置了體面的100 + GB空間,它的確定取決於我剛纔提到的參數。

0

我解決了類似的問題,如下所示。

  1. 您可以創建SparkConfWithEnv類並擴展SparkConf。

    import java.util.Map; 
    import org.apache.spark.SparkConf; 
    import scala.Tuple2; 
    public class SparkConfWithEnv extends SparkConf { 
    
        private static final long serialVersionUID = 1L; 
    
        private Map<String, String> env = null; 
    
        public SparkConfWithEnv(Map<String, String> env) { 
         this.env = env; 
        } 
    
        public String getenv(String name) { 
         String val = env.get(name); 
         if (val == null) { 
          return super.getenv(name); 
         } 
         return val; 
        } 
    
        public SparkConf clone() { 
         SparkConf conf = new SparkConfWithEnv(env); 
         Tuple2<String, String>[] all = getAll(); 
         for (Tuple2<String, String> tuple2 : all) { 
          conf.set(tuple2._1, tuple2._2); 
         } 
         return conf; 
        } 
    } 
    
  2. 套裝SPARK_LOCAL_DIRS在初始化類:

    static SparkConf conf=null; 
    static SparkContext sc = null; 
    
    static { 
        Map<String,String> map=Maps.newHashMap(); 
        map.put("SPARK_LOCAL_DIRS", "/opt/tars/apps/spark"); 
        conf=new SparkConfWithEnv(map).setMaster("local").setAppName(appId); 
        sc = new SparkContext(conf); 
    } 
    
相關問題