我需要关于,如何计算在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();
}
我应该做什么配置?我遗漏了什么吗?提前谢谢。
1条答案
按热度按时间0s7z1bwu1#
java 语
collect
方法返回包含此rdd中所有元素的数组。所以在您的例子中,它将创建一个包含340000个元素的数组,这将导致
Java Heap Error
,您可能需要对您的数据和collect
或者您可能希望将其直接保存到磁盘。有关javardd的更多信息,您可以随时参阅官方文档。