2017-05-08 15 views
0

の作成に失敗しました。私は、Apache-スパークへの初心者です、私のアプリケーション(Tomcatの)からSparkConfを作成しようとしていると私はSPARK_LOCAL_DIRSを設定していないApacheのスパークが一時ディレクトリ

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) 

以下のエラーに気づく in spark-env.sh。デフォルトのインストールごとにコメントアウトされています。

私の問題はapache spark, “failed to create any local dir”に関連しているとは思いますが、あまりよくありません。 SPARK_LOCAL_DIRSを各マスター/ワーカーノードの有効なディレクトリに設定する必要がありますか?もしそうなら、ディレクトリには最低限のディスク容量が必要ですか?

答えて

1
  • 私はspark-env.shでSPARK_LOCAL_DIRSを設定していません。既定のインストールでは がコメントアウトされています。あなたが設定しない場合、私は マスター/ワーカーノードのそれぞれに有効なディレクトリに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. のinitクラスに設定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); 
    } 
    
関連する問題