我有一个带有两个工作线程的Spark集群 - 所有节点都有16GB的RAM。 我正在使用带有MEMORY = TRUE参数的sparklyr spark_read_csv(下面的代码)从S3读取数据到Spark,但是尽管有足够的内存,大部分数据都会溢出到磁盘。 RStudio服务器与Spark master安装在同一节点上。任何想法为什么会发生这种情况,如果这是最佳的?我该如何调整它?谢谢!
flightsFull <- spark_read_csv(sc, "flights_spark",
path = "/s3fs/mypath/multipleFiles",
header = TRUE,
memory = TRUE,
columns = list(
Year = "character",
Month = "character",
DayofMonth = "character",
DayOfWeek = "character",
DepTime = "character",
CRSDepTime = "character",
ArrTime = "character",
CRSArrTime = "character",
UniqueCarrier = "character",
FlightNum = "character",
TailNum = "character",
ActualElapsedTime = "character",
CRSElapsedTime = "character",
AirTime = "character",
ArrDelay = "character",
DepDelay = "character",
Origin = "character",
Dest = "character",
Distance = "character",
TaxiIn = "character",
TaxiOut = "character",
Cancelled = "character",
CancellationCode = "character",
Diverted = "character",
CarrierDelay = "character",
WeatherDelay = "character",
NASDelay = "character",
SecurityDelay = "character",
LateAircraftDelay = "character"),
infer_schema = FALSE)
修改:添加配置文件内容
火花defaults.conf
spark.master=spark://ip-host.eu-west-1.compute.internal:7077
spark.jars=/opt/bluedata/bluedata-dtap.jar
spark.executor.extraClassPath=/opt/bluedata/bluedata-dtap.jar
spark.driver.extraClassPath=/opt/bluedata/bluedata-dtap.jar
spark-env.sh
SPARK_MASTER_HOST=ip-host.eu-west-1.compute.internal
SPARK_WORKER_CORES=8
SPARK_WORKER_MEMORY=32768m
答案 0 :(得分:2)
我的理解是你使用了spark-submit
你的Spark应用程序的默认内存选项,尽管有足够的内存可供你使用。
384.1
是你用完的默认存储内存,因此Spark开始将块保存到磁盘。
我的理解是,您拥有一个Spark Standalone群集,其中包含独立的Master和一个独立的Worker。这是spark-env.sh
建议的内容(没有指定工人数量)以及我在屏幕截图中的Spark执行器数量中可以看到的内容,因为Spark Standalone提供了与独立的Spark执行器一样多的Spark执行器工人。
我的 guess 是为了增加驱动程序和执行程序的内存属性并重新开始。这将增加内存空间并减少磁盘使用。
我还注意到有问题的RDD的存储级别是磁盘序列化1x 因此,闪耀者本可以决定自己设置存储级别(给定内存限制)。它通常由Spark开发人员指定,但spark_read_csv
可能以某种方式决定它本身。