我的集群:1个主服务器,11个从服务器,每个节点有6 GB内存.
我的设置:
spark.executor.memory=4g, Dspark.akka.frameSize=512
Run Code Online (Sandbox Code Playgroud)
这是问题所在:
首先,我从HDFS到RDD读取了一些数据(2.19 GB):
val imageBundleRDD = sc.newAPIHadoopFile(...)
Run Code Online (Sandbox Code Playgroud)
其次,在这个RDD上做点什么:
val res = imageBundleRDD.map(data => {
val desPoints = threeDReconstruction(data._2, bg)
(data._1, desPoints)
})
Run Code Online (Sandbox Code Playgroud)
最后,输出到HDFS:
res.saveAsNewAPIHadoopFile(...)
Run Code Online (Sandbox Code Playgroud)
当我运行我的程序时,它显示:
.....
14/01/15 21:42:27 INFO cluster.ClusterTaskSetManager: Starting task 1.0:24 as TID 33 on executor 9: Salve7.Hadoop (NODE_LOCAL)
14/01/15 21:42:27 INFO cluster.ClusterTaskSetManager: Serialized task 1.0:24 as 30618515 bytes in 210 ms
14/01/15 21:42:27 INFO cluster.ClusterTaskSetManager: Starting task 1.0:36 as TID 34 on executor 2: Salve11.Hadoop (NODE_LOCAL)
14/01/15 21:42:28 INFO …Run Code Online (Sandbox Code Playgroud) 我的数据集大小为10GB(例如Test.txt).
我写了我的pyspark脚本,如下所示(Test.py):
from pyspark import SparkConf
from pyspark.sql import SparkSession
from pyspark.sql import SQLContext
spark = SparkSession.builder.appName("FilterProduct").getOrCreate()
sc = spark.sparkContext
sqlContext = SQLContext(sc)
lines = spark.read.text("C:/Users/test/Desktop/Test.txt").rdd
lines.collect()
Run Code Online (Sandbox Code Playgroud)
然后我使用以下命令执行上面的脚本:
spark-submit Test.py --executor-memory 12G
Run Code Online (Sandbox Code Playgroud)
然后我收到如下错误:
17/12/29 13:27:18 INFO FileScanRDD: Reading File path: file:///C:/Users/test/Desktop/Test.txt, range: 402653184-536870912, partition values: [empty row]
17/12/29 13:27:18 INFO CodeGenerator: Code generated in 22.743725 ms
17/12/29 13:27:44 ERROR Executor: Exception in task 1.0 in stage 0.0 (TID 1)
java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:3230)
at java.io.ByteArrayOutputStream.grow(ByteArrayOutputStream.java:113)
at java.io.ByteArrayOutputStream.ensureCapacity(ByteArrayOutputStream.java:93)
at …Run Code Online (Sandbox Code Playgroud) 我安装pyspark了pip. 我在jupyter笔记本中编码。一切正常,但不是我java在导出大.csv文件时遇到堆空间错误。
这里有人建议编辑spark-defaults.config. 同样在火花文档中,它说
"注意:在客户端模式下,这个配置不能直接在你的应用程序中通过 SparkConf 设置,因为驱动 JVM 已经启动了。相反,请通过 --driver-memory 命令行选项或在你的默认属性文件。”
但恐怕是在安装时没有这样的文件pyspark有pip。我说得对吗?我该如何解决这个问题?
谢谢!
我正在尝试修复内存不足的问题,我想知道是否需要spark-defaults.conf在spark home文件夹中的默认配置文件()中更改这些设置.或者,如果我可以在代码中设置它们.
我看到了这个问题PySpark:java.lang.OutofMemoryError:Java堆空间,它说它取决于我是否在client模式下运行.我在集群上运行spark并使用独立监控它.
但是,我怎么弄清楚我是否在client模式下运行spark ?
我是 PySpark 的新手。我一直在用测试样本编写代码。一旦我在较大的文件(3GB 压缩)上运行代码。我的代码只是做一些过滤和连接。我不断收到有关 py4J 的错误。
任何帮助都会有用,并表示赞赏。
from pyspark.sql import SparkSession
from pyspark.conf import SparkConf
ss = SparkSession \
.builder \
.appName("Example") \
.getOrCreate()
ss.conf.set("spark.sql.execution.arrow.enabled", 'true')
df = ss.read.csv(directory + '/' + filename, header=True, sep=",")
# Some filtering and groupbys...
df.show()
Run Code Online (Sandbox Code Playgroud)
返回
Py4JJavaError: An error occurred while calling o88.showString.
: org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in
stage 3.0 failed 1 times, most recent failure: Lost task 0.0 in stage 3.0 (TID
1, localhost, executor driver): java.lang.OutOfMemoryError: …Run Code Online (Sandbox Code Playgroud)