2017-05-31 155 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