【发布时间】:2016-10-12 03:49:21
【问题描述】:
我正在运行一个 Spark 作业,该作业需要很长时间来处理输入文件。 Gzip 格式的输入文件为 6.8 GB,包含 1.1 亿行文本。我知道它是 Gzip 格式的,所以它是不可拆分的,并且只有一个执行器将用于读取该文件。
作为调试过程的一部分,我决定看看将 gzip 文件转换为 parquet 需要多长时间。我的想法是,一旦我转换为 parquet 文件,然后在该文件上运行我的原始 Spark 作业,在这种情况下,它将使用多个执行程序,并且输入文件将被并行处理。
但即使是很小的工作也比我预期的要花很长时间。这是我的代码:
val input = sqlContext.read.text("input.gz")
input.write.parquet("s3n://temp-output/")
当我在笔记本电脑(16 GB RAM)中提取该文件时,只用了不到 2 分钟。当我在 Spark 集群上运行它时,我的预期是它会花费相同甚至更少的时间,因为我使用的执行器内存是 58 GB。花了大约 20 分钟。
我在这里缺少什么?如果这听起来很业余,我很抱歉,但我在 Spark 中相当新。
在 gzip 文件上运行 Spark 作业的最佳方式是什么?假设我没有选择以其他文件格式(bzip2、snappy、lzo)创建该文件。
【问题讨论】:
-
您好,您说 parquet 文件处理作业(gzip 到 parquet 需要 20 分钟后)是在驱动程序上执行还是作业提交到集群?您可以通过查看该特定工作的 spark-ui 来检查并判断。如果它在集群上运行,它将显示集群上的多个节点。
-
不是,是在集群上提交的。
标签: hadoop apache-spark amazon-s3 spark-dataframe parquet