apache-spark - Spark中间文件存储在磁盘的什么位置?

标签 apache-spark hadoop pyspark apache-spark-sql hadoop-yarn

在洗牌期间,映射器将其输出转储到本地磁盘, reducer 从本地磁盘获取输出。这些文件到底转储到磁盘上的哪个位置?我正在 YARN 上运行 pyspark 集群。

到目前为止我已经尝试过:

我认为中间文件可能所在的位置是(按可能性的降序排列):

  1. hadoop/spark/tmp。根据documentation在由 yarn 定义的 LOCAL_DIRS 环境变量中。 但是,在启动集群后(我正在传递 master --yarn),我无法使用 os.environ 找到任何 LOCAL_DIRS env 变量,但是,我可以看到 SPARK_LOCAL_DIRS 这应该只发生在 mesos 或独立的情况下,根据文档(知道为什么会出现这种情况吗?)。无论如何,我的 SPARK_LOCAL_DIRShadoop/spark/tmp
  2. tmpspark.local.dir的默认值
  3. /home/用户名。我尝试在使用 --conf Spark.local.dir=/home/username
  4. 启动 pyspark 时将自定义值发送到 spark.local.dir
  5. hadoop/yarn/nm-local-dir。这是yarn-site.xml 中的yarn.nodemanager.local-dirs 属性的值

我正在运行以下代码,并通过导航到工作节点上的每个位置来检查在上述 4 个位置创建的任何中间文件。

我正在运行的代码:

from pyspark import storagelevel
df_sales = spark.read.load("gs://monsoon-credittech.appspot.com/spark_datasets/sales_parquet")
df_products = spark.read.load("gs://monsoon-credittech.appspot.com/spark_datasets/products_parquet")
df_merged = df_sales.join(df_products,df_sales.product_id==df_products.product_id,'inner')
df_merged.persist(storagelevel.StorageLevel.DISK_ONLY)
df_merged.count()

上面列出的 4 个位置都没有创建任何文件

正如答案之一所建议的,我尝试通过以下方式在终端中获取目录信息:

  1. 在位于 $SPARK_HOME/conf/ 的 log4j.properties 文件末尾添加 log4j.logger.or.apache.spark.api.python.PythonGatewayServer=INFO 这没有帮助。以下是我的终端的屏幕截图,日志记录设置为 INFO

enter image description here

spark 中间文件(映射器的输出、持久化等)存储在哪里?

最佳答案

在不深入了解 Spark 源代码的情况下,也许您可​​以快速实时查看它。像这样的事情:

>>> irdd = spark.sparkContext.range(0,100,1,10)                                                                                                          
>>> def wherearemydirs(p):
...   import os
...   return os.getenv('LOCAL_DIRS')                                                                                                
... 
>>> 
>>> irdd.map(wherearemydirs).collect()
>>>

...将在终端中显示本地目录

/data/1/yarn/nm/usercache//appcache/,/data/10/yarn/nm/usercache//appcache/,/data/11/yarn/nm/usercache//appcache/,...

但是,是的,它基本上会指向由 DiskBlockManager 创建的 UUID 随机子目录的父目录(由 YARN 创建),正如 @KoedIt 提到的:

:
23/01/05 10:15:37 INFO storage.DiskBlockManager: Created local directory at /data/1/yarn/nm/usercache/<your-user-id>/appcache/application_xxxxxxxxx_xxxxxxx/blockmgr-d4df4512-d18b-4dcf-8197-4dfe781b526a
:

关于apache-spark - Spark中间文件存储在磁盘的什么位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75018669/

相关文章:

apache-spark - 在多个字段上加入两个 Spark 数据帧

scala - 使用 Spark 窗口函数计算移动平均值时丢弃前几个值

hadoop - Hive 更新效率(版本 0.14)

hadoop - 比较 2 个配置单元表以查找没有任何唯一列/时间戳的更新/插入/删除记录并将其附加到 Hadoop 中的基表

python - 如何在 ipython 中将 Spark RDD 转换为 pandas 数据帧?

scala - 通过一些列值拆分 Spark 数据帧,然后独立于其他数据帧旋转每个生成的数据帧

Scala Spark - 任务不可序列化

hadoop - 如何使用关系来过滤组?

Hadoop 3.0.3 worker 文件与奴隶

python - 如何对多列、不同类型、不同长度进行爆破?