2017-05-31 137 views
0

我想要访问配置单元拼花地板表并将其加载到熊猫数据框。我使用pyspark和我的代码如下:Java堆空间问题

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堆问题:

Exception in thread "task-result-getter-2" java.lang.OutOfMemoryError: Java heap space

下面是其他一些关于环境的信息:

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 

回答

0

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

但是在spark工作完成后,应用程序挂在toPandas上,有没有人知道什么具体属性需要设置用于将数据帧转换为Pandas?

-Rahul