在EMR上读取.gz文件变得挂起并且非常缓慢

时间:2019-01-24 08:57:33

标签: python pyspark amazon-emr

我正在使用m3.2xlarge实例类型运行EMR cluster5.18。输入文件的格式为.gz,文件大小小于200MB。该集群有200个节点,总输入文件约为2500-3k。作业要花很长时间才能执行,有时在最后阶段会介于两者之间。

在运行pyspark应用程序时,以下是我在aws控制台上可以看到的阶段:

ID  Status      Description                                 Duration    stages      Tasks
5   Running     parquet at NativeMethodAccessorImpl.java:0  15 min      0 / 2       0 / 2,157
4   Succeeded   run at ThreadPoolExecutor.java:1149         1 s         1 / 1       1 / 1
3   Succeeded   json at NativeMethodAccessorImpl.java:0     15 min      1 / 1       1,957 / 1,957
2   Succeeded   text at NativeMethodAccessorImpl.java:0     19 s        1 / 1       2,543 / 2,543
1   Succeeded   load at NativeMethodAccessorImpl.java:0     2 s         1 / 1       2 / 2
0   Succeeded   load at NativeMethodAccessorImpl.java:0     11 s        1 / 1       1 / 1

代码段:

in_files = open("input.txt", "r")
logs = in_files.read().splitlines()
df= spark.read.text(logs)
df_rdd= df.rdd.flatMap(lambda row: function_name(row.value))
df = spark.read.json(df_rdd)
-----
Other transformation like adding removing columns, & perforing a join against csv data set
-----
df.write.parquet(out_path, mode='append', partitionBy='day')

我遇到的问题是工作太慢了,最慢的步骤是上面提到的#3和#5。因此,有人可以帮我理解AWS控制台中显示的各个步骤吗?我的代码中有什么我可以改进的地方,以使此工作更快地运行? 我已经读过* .gz文件是不可拆分的,那么有什么办法可以解决这个问题?另外,当我在作业运行时随机检查一些节点时,CPU使用率正在100%运行。 请告知我是否需要其他详细信息。

0 个答案:

没有答案