火花工人记忆不足

时间:2015-08-05 11:10:27

标签: apache-spark spark-cassandra-connector

我有一个spark / cassandra设置,我使用spark cassandra java连接器在表上查询。到目前为止,我有1个火花主节点(2个核心)和1个工作节点(4个核心)。他们都在conf /:

下面有spark-env.sh
#!/usr/bin/env bash
export SPARK_LOCAL_IP=127.0.0.1
export SPARK_MASTER_IP="192.168.4.134"
export SPARK_WORKER_MEMORY=1G
export SPARK_EXECUTOR_MEMORY=2G

这是我的火花执行代码:

    SparkConf conf = new SparkConf();
    conf.setAppName("Testing");
    conf.setMaster("spark://192.168.4.134:7077");
    conf.set("spark.cassandra.connection.host", "192.168.4.129");
    conf.set("spark.logConf", "true");
    conf.set("spark.driver.maxResultSize", "50m");
    conf.set("spark.executor.memory", "200m");
    conf.set("spark.eventLog.enabled", "true");
    conf.set("spark.eventLog.dir", "/tmp/");
    conf.set("spark.executor.extraClassPath", "/home/enlighted/ebd.jar");
    conf.set("spark.cores.max", "1");
    JavaSparkContext sc = new JavaSparkContext(conf);


    JavaRDD<String> cassandraRowsRDD = CassandraJavaUtil.javaFunctions(sc).cassandraTable("testing", "ec")
    .map(new Function<CassandraRow, String>() {
        private static final long serialVersionUID = -6263533266898869895L;
        @Override
        public String call(CassandraRow cassandraRow) throws Exception {
            return cassandraRow.toString();
        }
    });
    System.out.println("Data as CassandraRows: \n" + StringUtils.join(cassandraRowsRDD.toArray(), "\n"));
    sc.close();

现在我在第一个节点上启动主要spark,然后在第二个节点上启动worker,然后我运行代码。它在worker上创建一个执行程序线程,但我在应用程序端日志中看到以下消息:

[Timer-0] WARN org.apache.spark.scheduler.TaskSchedulerImpl  - Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient resources

现在保持相同的设置,当我在主服务器上运行spark / sbin / start-all.sh时,它会在第一个节点上创建主实例和工作实例。再次,当我运行相同的代码并且分配的工作人员是这个新工作者时,它完全正常。

我的原始工作程序在与主节点不同的节点上运行会出现什么问题?

1 个答案:

答案 0 :(得分:0)

找出根本原因。 Master正在为工作人员随机分配端口进行通信。由于master上的防火墙,worker无法向m​​aster发送消息(可能是资源详细信息)。奇怪的工人甚至懒得抛出任何错误。