Java堆空间问题

时间:2017-05-31 21:46:33

标签: apache-spark pyspark heap

我正在尝试访问hive镶木桌并将其加载到Pandas数据框中。我正在使用pyspark,我的代码如下:

import pyspark
import pandas
from pyspark import SparkConf
from pyspark import SparkContext
from pyspark.sql import SQLContext
from pyspark.sql import HiveContext

conf = (SparkConf().set("spark.driver.maxResultSize", "10g").setAppName("buyclick").setMaster('yarn-client').set("spark.driver.memory", "4g").set("spark.driver.cores","4").set("spark.executor.memory", "4g").set("spark.executor.cores","4").set("spark.executor.extraJavaOptions","-XX:-UseCompressedOops"))

sc = SparkContext(conf=conf)    
sqlContext = HiveContext(sc)
results = sqlContext.sql("select * from buy_click_p")
res_pdf = results.toPandas()

这已经连续失败了,所以我改变了conf参数,并且每当它因Java堆问题而失败时:

  

线程中的异常" task-result-getter-2" java.lang.OutOfMemoryError:Java堆空间

以下是有关环境的其他一些信息:

Cloudera CDH version : 5.9.0
Hive version : 1.1.0
Spark Version : 1.6.0
Hive table size : hadoop fs -du -s -h /path/to/hive/table/folder --> 381.6 M  763.2 M

Free memory on box : free -m 
            total  used    free    shared buffers cached
Mem:        23545 11721   11824        12     258   1773

2 个答案:

答案 0 :(得分:0)

我原来的堆空间问题现已修复,似乎我的驱动程序内存不是最佳的。从pyspark客户端设置驱动程序内存不会生效,因为此时已经创建了容器,因此我必须在CDH管理器控制台中将其设置为spark environmerent属性。设置我去了Cloudera Manager> Spark>配置>网关>高级>用于spark-conf / spark-defaults.conf的Spark Client高级配置代码片段(安全阀)我添加了spark.driver.memory = 10g并解决了Java堆问题。我认为当您在Yarn-Client上运行spark应用程序时,这将有效。

然而,在完成spark工作后,应用程序挂起到了thePandas,是否有人知道需要为dataframe toPandas的转换设置哪些特定属性?

-Rahul

答案 1 :(得分:0)

我遇到了同样的问题。更改驱动程序内存后,它对我有用。 我的代码中的一组:

spark = SparkSession.builder.appName("something").config("spark.driver.memory","10G").getOrCreate()

我设置为10G,但这取决于您的环境,群集的大小。