这是我的java代码,我在其中使用apachesparksql从hive查询数据。
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();
当我运行这段代码时,它抛出java.lang.outofmemoryerror:gc开销超出了限制。如何解决这个问题,或者如何在spark配置中增加内存。
2条答案
按热度按时间qxsslcnc1#
如果您正在使用
spark-shell
要运行它,您可以使用driver-memory
要突破内存限制:spark-shell --driver-memory Xg [other options]
如果执行器有问题,那么您可以使用--executor-memory XG
您可以在指南中找到有关如何正确设置它们的更多信息:提交执行器内存、配置驱动程序内存。@编辑:因为您是从netbeans运行它,所以应该能够将它们作为jvm参数传递
-Dspark.driver.memory=XG
以及-Dspark.executor.memory=XG
. 我想是在Project Properties
低于Run
.bq9c1y662#
你找到解决问题的办法了吗?如果你有:d,请分享
我的想法是:rdd和javardd都有一个方法
toLocalIterator()
一份文件说迭代器将消耗与此rdd中最大分区相同的内存。
这意味着迭代器将消耗比列表更少的内存。如果rdd被划分为多个分区,您可以这样尝试:
附言:这只是一个想法,我还没有测试过