apachespark1.2.1独立集群提供java堆空间错误

nxowjjhe  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(292)

我需要关于,如何计算在spark独立集群中需要多少堆空间(内存)来操作xmb(假设x意味着600mb)。
脚本:
我有14 GB内存和8核的独立群集。我想对600MB的数据进行操作(从文件中读取数据并将其写入cassandra)。
对于此任务,我将sparkconfig配置为:
.set(“spark.cassandra.output.throughput\u mb\u per\u sec”,“800”)
.set(“spark.storage.memoryfraction”,“0.3”)
并且--executor memory=5g--提交任务时执行器内核总数6--驱动程序内存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();

}

我应该做什么配置?我遗漏了什么吗?提前谢谢。

0s7z1bwu

0s7z1bwu1#

java 语 collect 方法返回包含此rdd中所有元素的数组。
所以在您的例子中,它将创建一个包含340000个元素的数组,这将导致 Java Heap Error ,您可能需要对您的数据和 collect 或者您可能希望将其直接保存到磁盘。
有关javardd的更多信息,您可以随时参阅官方文档。

相关问题