Spark失败,java.lang.OutOfMemoryError:超出GC开销限制?

Spark失败,java.lang.OutOfMemoryError:超出GC开销限制?,java,hadoop,apache-spark-sql,Java,Hadoop,Apache Spark Sql,这是我的java代码,其中我使用ApacheSparkSQL从配置单元查询数据 JavaSparkContext ctx = new JavaSparkContext(new SparkConf().setAppName("LoadData").setMaster("MasterUrl")); HiveContext sqlContext = new HiveContext(ctx.sc()); List<Row> result = sqlContext.sql("Select *

这是我的java代码,其中我使用ApacheSparkSQL从配置单元查询数据

JavaSparkContext ctx = new JavaSparkContext(new SparkConf().setAppName("LoadData").setMaster("MasterUrl"));
HiveContext sqlContext = new HiveContext(ctx.sc());
List<Row> result = sqlContext.sql("Select * from Tablename").collectAsList();
JavaSparkContext ctx=newjavasparkcontext(new SparkConf().setAppName(“LoadData”).setMaster(“MasterUrl”);
HiveContext sqlContext=新的HiveContext(ctx.sc());
List result=sqlContext.sql(“Select*fromtablename”).collectAsList();

当我运行这段代码时,它抛出java.lang.OutOfMemoryError:超出了GC开销限制。如何解决此问题或如何在Spark配置中增加内存。

如果您正在使用
Spark shell
运行它,则可以使用
驱动程序内存来降低内存限制:

spark shell——驱动程序存储器Xg[其他选项]

如果执行器出现问题,则可以使用
--executor memory XG

您可以在指南中找到有关如何准确设置它们的更多信息:对于执行器内存,对于驱动程序内存


@编辑:因为您是从Netbeans运行它,所以应该能够将它们作为JVM参数传递
-Dspark.driver.memory=XG
-Dspark.executor.memory=XG
。我想它是在
项目属性
下的
运行

您找到解决问题的方法了吗? 如果你有:D,请分享

我的想法是:rdd和javaRDD都有一个方法
toLocalitator()
, 星火文件说,

迭代器将消耗的内存与内存中最大的分区一样多 这是RDD

这意味着迭代器将比列表消耗更少的内存。如果将rdd划分为多个分区,您可以这样尝试:

Iterator<Row> iter = sqlContext.sql("Select * from Tablename").javaRDD().toLocalIterator();
while (iter.hasNext()){
    Row row = iter.next();
    //your code here
}
Iterator iter=sqlContext.sql(“Select*fromtablename”).javaRDD().tolocaterator();
while(iter.hasNext()){
行=iter.next();
//你的代码在这里
}

ps:这只是一个想法,我还没有测试它

,但我将它作为Java应用程序运行。在那种情况下怎么办that@wazza您不是正在构建一个jar并将其提交给spark吗?不,我是在netbeans中直接运行上述代码的itself@wazza您可以尝试从我的编辑器中添加参数。我遇到了相同的异常。该表包含100万行,有没有其他方法可以在没有内存问题的情况下查询这些行