Ошибка задания клея AWS при разбиении больших файлов - PullRequest
0 голосов
/ 17 октября 2019

У меня есть скрипт Python Glue:

from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job
from pyspark.sql.functions import col,year,month,dayofmonth,to_date,from_unixtime
from awsglue.dynamicframe import DynamicFrame

# .... default glue stuff

df = dropnullfields3.toDF()

new_df = df.withColumn('datestamp', to_date(from_unixtime(col('timestamp')))) \
    .withColumn('year', year(col('datestamp'))) \
    .withColumn('month', month(col('datestamp'))) \
    .withColumn('day', dayofmonth(col('datestamp'))) \
    .drop(col('datestamp')) \
    .repartition(1)

dynamic_frame = DynamicFrame.fromDF(new_df, glueContext, 'enriched')

## @type: DataSink
## @args: [connection_type = "s3", connection_options = {"path": "s3://bucket/dms/folder"}, format = "parquet", transformation_ctx = "datasink4"]
## @return: datasink4
## @inputs: [frame = dropnullfields3]
datasink4 = glueContext.write_dynamic_frame.from_options(frame=dynamic_frame,
                                                         connection_type="s3",
                                                         connection_options={
                                                             "path": "s3://bucket/dms/folder",
                                                             "partitionKeys": ["year", "month", "day"]
                                                         },
                                                         format="parquet",
                                                         transformation_ctx="datasink4")
job.commit()

Я пытаюсь разбить 17 ГБ файлов паркета, разбить на 17 файлов с максимальным объемом 1,2 ГБ на файл, сгенерированных AWS DMS изБаза данных MySQL по годам, месяцам и дням извлекается из отметки времени.

Когда я работал с 5 DPU, я получил следующее:

An error occurred while calling o114.pyWriteDynamicFrame. 
Job aborted due to stage failure: Task 0 in stage 2.0 failed 4 times, most recent failure: Lost task 0.3 in stage 2.0 (TID 142, <REDACTED>.compute.internal, executor 10): ExecutorLostFailure (executor 10 exited caused by one of the running tasks) Reason: Container killed by YARN for exceeding memory limits. 5.8 GB of 5.5 GB physical memory used. 
Consider boosting spark.yarn.executor.memoryOverhead or disabling yarn.nodemanager.vmem-check-enabled because of YARN-4714.

Затем я попытался повысить до 20DPU:

An error occurred while calling o113.pyWriteDynamicFrame. 
Slow Down (Service: Amazon S3; Status Code: 503; Error Code: 503 Slow Down; Request ID: 0E....135; S3 Extended Request ID: FhR...Is=)

Как мне разобрать большие таблицы, подобные этой? Потому что эта таблица даже не самая большая, которую нам придется разделить.

...