【问题标题】:Apache Spark Failed to create Temp DirectoryApache Spark 无法创建临时目录
【发布时间】:2017-10-06 11:28:25
【问题描述】:

我是 Apache-Spark 的新手,正在尝试从我的应用程序 (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-env.sh 中配置 SPARK_LOCAL_DIRS。按照默认安装,它被注释掉了。

我认为我的问题与apache spark, “failed to create any local dir” 有关,但不太确定。我应该将 SPARK_LOCAL_DIRS 配置为每个主/工作节点中的有效目录吗?如果是这样,该目录必须具有的最小磁盘空间是多少?

【问题讨论】:

    标签: apache-spark


    【解决方案1】:
    • 我没有在 spark-env.sh 中配置 SPARK_LOCAL_DIRS。评论了 按照默认安装退出。

      如果不配置,则默认位置/temp

    • 我是否应该将 SPARK_LOCAL_DIRS 配置为每个目录中的有效目录 主/工作节点? 是的。最好配置到您的应用程序可能需要大量空间的位置。

    • 如果是这样,该目录必须具有的最小磁盘空间是多少?

    取决于您的应用程序大小、您预计要运行的作业数量、每个工作人员生成的日志量、您要处理的数据量(中间混洗数据将存储在这里)、缓存数量和您的数据量即将缓存等。 我在我的应用程序中配置了不错的 100+GB 空间,这当然取决于我刚才提到的参数。

    【讨论】:

      【解决方案2】:

      我解决了一个类似的问题如下。

      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);
        }
        

      【讨论】:

        【解决方案3】:

        我也遇到过这个问题。 如果内存已满,得到这个错误,寻找节点上的可用空间 mkdir:无法创建目录“test”:设备上没有剩余空间

        已清除内存并能够执行作业。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-07-17
          • 2017-01-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多