pyspark memory issue :Caused by: java.lang.OutOfMemoryError: Java heap space
pyspark memory issue :Caused by: java.lang.OutOfMemoryError: Java heap space
各位,
我是 运行 一个 pyspark 代码,用于从 hdfs 读取 500mb 文件并根据文件内容构建一个 numpy 矩阵
集群信息:
9 个数据节点
128 GB 内存 /48 vCore CPU /节点
作业配置
conf = SparkConf().setAppName('test') \
.set('spark.executor.cores', 4) \
.set('spark.executor.memory', '72g') \
.set('spark.driver.memory', '16g') \
.set('spark.yarn.executor.memoryOverhead',4096 ) \
.set('spark.dynamicAllocation.enabled', 'true') \
.set('spark.shuffle.service.enabled', 'true') \
.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer") \
.set('spark.driver.maxResultSize',10000) \
.set('spark.kryoserializer.buffer.max', 2044)
fileRDD=sc.textFile("/tmp/test_file.txt")
fileRDD.cache
list_of_lines_from_file = fileRDD.map(lambda line: line.split(" ")).collect()
错误
Collect 片段出现内存不足错误。
18/05/17 19:03:15 ERROR client.TransportResponseHandler: Still have 1
requests outstanding when connection fromHost/IP:53023 is closed
18/05/17 19:03:15 ERROR shuffle.OneForOneBlockFetcher: Failed while starting block fetches
java.lang.OutOfMemoryError: Java heap space
非常感谢任何帮助。
关于这个问题的一些背景知识
我在 运行 通过 Jupyter Notebook 运行 位于 hadoop 集群的边缘节点上的代码时遇到了这个问题
在 Jupyter 中查找
因为你只能通过客户端模式从Jupyter提交代码,(相当于从edgenode启动spark-shell)spark driver始终是已经打包了其他long [=30的edgenode =]ning 守护进程,其中可用内存总是小于 fileRDD.collect() 在我的文件
上所需的内存
在 spark-submit 中工作正常
我将 Jupyer 中的内容放到一个 .py 文件中,并通过具有相同设置的 spark-submit 调用相同内容哇!! ,它 运行 几秒钟后,原因是,spark-submit 被优化为从集群中需要空闲内存的节点之一中选择驱动程序节点。
spark-submit --name "test_app" --master yarn --deploy-mode cluster --conf spark.executor.cores=4 --conf spark.executor.memory=72g --conf spark.driver.memory=72g --conf spark.yarn.executor.memoryOverhead=8192 --conf spark.dynamicAllocation.enabled=true --conf spark.shuffle.service.enabled=true --conf spark.serializer=org.apache.spark.serializer.KryoSerializer --conf spark.kryoserializer.buffer.max=2044 --conf spark.driver.maxResultSize=1g --conf spark.driver.extraJavaOptions='-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:MaxDirectMemorySize=2g' --conf spark.executor.extraJavaOptions='-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:MaxDirectMemorySize=2g' test.py
下一步:
我们的下一步是看看 Jupyter notebook 是否可以通过 Livy JobServer 或类似方法将 spark 作业提交到 YARN 集群。
各位,
我是 运行 一个 pyspark 代码,用于从 hdfs 读取 500mb 文件并根据文件内容构建一个 numpy 矩阵
集群信息:
9 个数据节点 128 GB 内存 /48 vCore CPU /节点
作业配置
conf = SparkConf().setAppName('test') \
.set('spark.executor.cores', 4) \
.set('spark.executor.memory', '72g') \
.set('spark.driver.memory', '16g') \
.set('spark.yarn.executor.memoryOverhead',4096 ) \
.set('spark.dynamicAllocation.enabled', 'true') \
.set('spark.shuffle.service.enabled', 'true') \
.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer") \
.set('spark.driver.maxResultSize',10000) \
.set('spark.kryoserializer.buffer.max', 2044)
fileRDD=sc.textFile("/tmp/test_file.txt")
fileRDD.cache
list_of_lines_from_file = fileRDD.map(lambda line: line.split(" ")).collect()
错误
Collect 片段出现内存不足错误。
18/05/17 19:03:15 ERROR client.TransportResponseHandler: Still have 1
requests outstanding when connection fromHost/IP:53023 is closed
18/05/17 19:03:15 ERROR shuffle.OneForOneBlockFetcher: Failed while starting block fetches
java.lang.OutOfMemoryError: Java heap space
非常感谢任何帮助。
关于这个问题的一些背景知识
我在 运行 通过 Jupyter Notebook 运行 位于 hadoop 集群的边缘节点上的代码时遇到了这个问题
在 Jupyter 中查找
因为你只能通过客户端模式从Jupyter提交代码,(相当于从edgenode启动spark-shell)spark driver始终是已经打包了其他long [=30的edgenode =]ning 守护进程,其中可用内存总是小于 fileRDD.collect() 在我的文件
上所需的内存在 spark-submit 中工作正常
我将 Jupyer 中的内容放到一个 .py 文件中,并通过具有相同设置的 spark-submit 调用相同内容哇!! ,它 运行 几秒钟后,原因是,spark-submit 被优化为从集群中需要空闲内存的节点之一中选择驱动程序节点。
spark-submit --name "test_app" --master yarn --deploy-mode cluster --conf spark.executor.cores=4 --conf spark.executor.memory=72g --conf spark.driver.memory=72g --conf spark.yarn.executor.memoryOverhead=8192 --conf spark.dynamicAllocation.enabled=true --conf spark.shuffle.service.enabled=true --conf spark.serializer=org.apache.spark.serializer.KryoSerializer --conf spark.kryoserializer.buffer.max=2044 --conf spark.driver.maxResultSize=1g --conf spark.driver.extraJavaOptions='-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:MaxDirectMemorySize=2g' --conf spark.executor.extraJavaOptions='-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:MaxDirectMemorySize=2g' test.py
下一步:
我们的下一步是看看 Jupyter notebook 是否可以通过 Livy JobServer 或类似方法将 spark 作业提交到 YARN 集群。