【发布时间】:2014-10-04 13:41:15
【问题描述】:
我正在对存储在 S3 中的一些 LZO 压缩日志文件运行 EMR Spark 作业。有多个日志文件存储在同一个文件夹中,例如:
...
s3://mylogfiles/2014-08-11-00111.lzo
s3://mylogfiles/2014-08-11-00112.lzo
...
在 spark-shell 中,我正在运行一项计算文件中行数的作业。如果我为每个文件单独计算行数,则没有问题,例如像这样:
// Works fine
...
sc.textFile("s3://mylogfiles/2014-08-11-00111.lzo").count()
sc.textFile("s3://mylogfiles/2014-08-11-00112.lzo").count()
...
如果我使用通配符以单行方式加载所有文件,则会出现两种异常。
// One-liner throws exceptions
sc.textFile("s3://mylogfiles/*.lzo").count()
例外情况是:
java.lang.InternalError: lzo1x_decompress_safe returned: -6
at com.hadoop.compression.lzo.LzoDecompressor.decompressBytesDirect(Native Method)
和
java.io.IOException: Compressed length 1362309683 exceeds max block size 67108864 (probably corrupt file)
at com.hadoop.compression.lzo.LzopInputStream.getCompressedData(LzopInputStream.java:291)
在我看来,解决方案是由最后一个例外给出的文本暗示的,但我不知道如何继续。 LZO 文件的大小是否有限制,或者有什么问题?
我的问题是:我能否运行 Spark 查询,将所有 LZO 压缩文件加载到 S3 文件夹中,而不会出现与 I/O 相关的异常?
有 66 个文件,每个文件大约 200MB。
编辑: 仅在使用 Hadoop2 核心库(ami 3.1.0)运行 Spark 时才会发生异常。使用 Hadoop1 核心库(ami 2.4.5)运行时,一切正常。两种情况均使用 Spark 1.0.1 进行了测试。
【问题讨论】:
-
您是否仔细检查了所有文件确实没有损坏?
-
我和 Pimin 坐在这里 :) @samthebest:文件没有损坏; lzop -d 提取它们就好了。
标签: hadoop apache-spark elastic-map-reduce lzo