首页 > 解决方案 > 尝试写入 S3 时,Docker 容器中的 Spark 返回“任何本地目录中没有可用空间”

问题描述

我在 SO 上发现了类似的问题,但建议的答案似乎都不适合我的用例——因为它们不起作用。我也是 Spark 的新手,所以请多多包涵。

我正在使用 Jupyter Notebooks 作为开发环境运行基于此映像的 Docker 容器,因此我可以在本地运行 PySpark/Glue 作业,而无需使用 AWS。我已经使用这个容器大约 10 个月了,没有任何问题 - 直到现在。

当我尝试运行此代码以简单地将 CSV 文件转换为 Parquet 时:

from awsglue.transforms import *
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job

sc = SparkContext.getOrCreate()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)

source = glueContext.create_dynamic_frame_from_options(
    connection_type='s3',
    connection_options = {
        'paths': ['s3://datalake_bucket/source/file.csv']
    },
    format='csv',
    format_options={
        'separator': '|',
        'encoding': 'utf-16'},
    transformation_ctx = ''
)

glueContext.write_dynamic_frame_from_options(frame = source,
                                             connection_type = 's3',
                                             connection_options = {
                                                 'path': 's3://datalake_bucket/stage'
                                             },
                                             format = 'parquet',
                                             format_options={
                                                 'compression': 'gzip'
                                             },
                                             transformation_ctx = '')

我收到以下错误(如果需要,可以发布完整的堆栈跟踪):

由于阶段故障而中止作业:阶段 1.0 中的任务 0 失败 1 次,最近一次失败:阶段 1.0 中丢失任务 0.0(TID 1,本地主机,执行程序驱动程序):org.apache.hadoop.util.DiskChecker$DiskErrorException:没有空间可在任何本地目录中使用

我的本地磁盘上有足够的空间,我已经清除了 /tmp,其中有大约 46k 文件 - 但错误仍然存​​在。

所以我的问题是,这个错误指的是什么“本地目录”,我如何才能将其追溯到发生空间不足的地方并解决问题?

标签: pythonamazon-web-servicesdockerapache-sparkamazon-s3

解决方案


推荐阅读