Apache Spark 1.2.1独立集群,给出了Java堆空间错误

时间:2015-04-28 13:13:15

标签: hadoop apache-spark

我需要有关如何计算在spark独立集群中运行x mb(假设x表示600 mb)需要多少堆空间(内存)的信息。

情景:

我有独立的群集,内存为14GB,内核为8个。我想在600 MB的数据上操作(从文件读取数据并将其写入Cassandra)。

对于此任务,我将SparkConfig设为:

.SET( “spark.cassandra.output.throughput_mb_per_sec”, “800”)

.set(“spark.storage.memoryFraction”,“0.3”)

在提交任务时--executor-memory = 5g --total-executor-cores 6 --driver-memory 6g。

尽管有上述配置,我在向Cassandra写入数据时遇到了java堆空间错误。

以下是java代码:

    public static void main(String[] args) throws Exception {
    String fileName = args[0];

    Long now = new Date().getTime();

    SparkConf conf = new SparkConf(true)
            .setAppName("JavaSparkSQL_" +now)
            .set("spark.cassandra.connection.host", "192.168.1.65")
            .set("spark.cassandra.connection.native.port", "9042")
            .set("spark.cassandra.connection.rpc.port", "9160")
            .set("spark.cassandra.output.throughput_mb_per_sec","800")
            .set("spark.storage.memoryFraction", "0.3");

    JavaSparkContext ctx = new JavaSparkContext(conf);


    JavaRDD<String> input =ctx.textFile    
("hdfs://abc.xyz.net:9000/figmd/resources/" + fileName, 12);
    JavaRDD<PlanOfCare> result = input.mapPartitions(new 
ParseJson()).filter(new PickInputData());

    System.out.print("Count --> "+result.count());
    System.out.println(StringUtils.join(result.collect(), ","));


 javaFunctions(result).writerBuilder("ks","pt_planofcarelarge",
 mapToRow(PlanOfCare.class)).saveToCassandra();

}

我想要做什么配置?我错过了什么吗? 提前致谢。

1 个答案:

答案 0 :(得分:1)

JavaRDD collect方法返回一个包含此RDD中所有元素的数组。

因此,在您的情况下,它会创建一个包含340000个元素的数组,这将导致Java Heap Error,您可能需要获取一小部分数据并collect它或者您可能想要将其直接保存到磁盘上。

有关JavaRDD的更多信息,您始终可以参考official documentation