为什么RDD使用sparklyr的spark_read_csv持久化到磁盘?

时间:2017-06-01 13:10:58

标签: r apache-spark apache-spark-sql sparklyr

我有一个带有两个工作线程的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)

enter image description here

修改:添加配置文件内容

火花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

Edit2 - 添加了执行者窗格 enter image description here

1 个答案:

答案 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可能以某种方式决定它本身。