【问题标题】:Why does RDD is persisted to disk using sparklyr's spark_read_csv?为什么使用 sparklyr 的 spark_read_csv 将 RDD 持久化到磁盘?
【发布时间】:2017-11-02 15:49:43
【问题描述】:

我有一个包含两个工作人员的 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)

编辑:添加配置文件内容

spark-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 - 添加了执行器面板

【问题讨论】:

  • 我无法重现错误,您可以添加spark配置文件吗? spark-default.conf 和 spark-env.sh
  • 你也可以附加环境吗?你怎么spark-submit这个应用程序?
  • sparklyr 只是打电话给CACHE TABLE 所以它可能是环境/默认问题

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


【解决方案1】:

我的理解是,您使用默认内存选项来spark-submit 您的 Spark 应用程序,尽管有足够的内存可以使用您不使用。

384.1 是您用完的默认存储内存,因此 Spark 开始将块持久化到磁盘。

我的理解是,您有一个 Spark Standalone 集群,其中包含独立的 Master 和 一个 独立的 Worker。这就是spark-env.sh 的建议(没有指定工作人员的数量),这就是我可以在屏幕截图中看到的 Spark 执行程序的数量,因为 Spark Standalone 提供的 Spark 执行程序与独立工作人员的数量一样多。

我的猜测是增加驱动程序和执行程序的内存属性并重新开始。这将增加内存空间并减少磁盘使用量。

我还注意到,有问题的 RDD 的存储级别是 Disk Serialized 1x,因此 sparklyr 可能已决定自行设置存储级别(给定内存限制)。它通常由 Spark 开发人员指定,但spark_read_csv 可能以某种方式自行决定。

【讨论】:

  • 如果你真的检查了文档会更有用,但为了更容易,这里涉及到CACHE TABLE (spark_read_csv -> spark_partition_register_df) 不要问我为什么@987654329 @决定使用它:)
  • 感谢所有提示。 spark_read_csv 确实有一个名为 options 的参数,但是 doc 并没有说明哪些参数可以在那里传递。连接本身也可以在spark_connect 配置参数中进行修改。我会看看这个并进行实验。
猜你喜欢
  • 2011-02-14
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
  • 2020-10-08
  • 1970-01-01
  • 2018-01-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多