amazon-s3 - 在 AWS EMR 上的 Hadoop 输出上使用 LZO 时,它是否为文件(存储在 S3 上)编制索引以供将来自动拆分?

标签 amazon-s3 amazon-web-services elastic-map-reduce lzo

我想对存储在 S3 上的 Elastic Map Reduce 作业的输出使用 LZO 压缩,但不清楚文件是否自动编制索引,以便将来在此数据上运行的作业会将文件拆分为多个任务。

例如,如果我的输出是一堆 TSV 数据行,在一个 1GB LZO 文件中, future 的映射作业将只创建 1 个任务,或类似 (1GB/blockSize) 任务(即文件未压缩时的行为) ,或者目录中是否有 LZO 索引文件)?

编辑:如果这不是自动完成的,有什么建议可以让我的输出被 LZO 索引?在将文件上传到 S3 之前进行索引吗?

最佳答案

我的第一个问题的简短回答: AWS 不进行自动索引。我已经用我自己的工作证实了这一点,并且从 Andrew@AWS on their forum 中也读到了同样的内容。 .

以下是您如何进行索引:

要索引一些 LZO 文件,您需要使用我自己的 Jar 构建自 Twitter hadoop-lzo项目。如果您想直接使用 EMR 建立索引,您需要在某处构建 Jar,然后上传到 Amazon S3。

另外,Cloudera 对 setting this up on your own cluster 的所有步骤都有很好的说明。 .我在我的本地集群上做了这个,这让我可以构建 Jar 并上传到 S3。如果您不想自己构建它,您可能可以在网上找到一个预先构建的 Jar。

从 Hadoop 作业输出数据时,请确保使用 LzopCodec 而不是 LzoCodec,否则文件不可索引(至少根据我的经验)。示例 Java 代码(相同的想法延续到 Streaming API):

import com.hadoop.compression.lzo.LzopCodec;
TextOutputFormat.setCompressOutput(job, true); 
TextOutputFormat.setOutputCompressorClass(job, LzopCodec.class)

一旦您的 hadoop-lzo Jar 在 S3 上,并且您的 Hadoop 作业已输出 .lzo 文件,请在输出目录上运行您的索引器(下面的说明让您运行 EMR 作业/集群):
elastic-mapreduce -j <existingJobId> \
  --jar s3n://<yourBucketName>/hadoop-lzo-0.4.17-SNAPSHOT.jar \
    --args com.hadoop.compression.lzo.DistributedLzoIndexer \
    --args s3://<yourBucketName>/output/myLzoJobResults \
    --step-name "Lzo file indexer Jar"

那么当你在以后的工作中使用数据时,一定要指定输入是LZO格式,否则不会发生 split 。示例 Java 代码:
import com.hadoop.mapreduce.LzoTextInputFormat;
job.setInputFormatClass(LzoTextInputFormat.class);

关于amazon-s3 - 在 AWS EMR 上的 Hadoop 输出上使用 LZO 时,它是否为文件(存储在 S3 上)编制索引以供将来自动拆分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13019996/

相关文章:

python - 使用策展人python API无法过滤和删除Elasticsearch的旧索引

hadoop - Hadoop 的 DynamoDB 输入格式

amazon-web-services - 带有 cronjob + API 的 Amazon MapReduce

amazon-web-services - 自动从 DynamoDB 表和 S3 中删除数据

amazon-web-services - 按需 Linux t2.micro 实例时间

amazon-s3 - 无法在Raspberry Pi 3上编译Riak

amazon-web-services - AWS Lambda 上的 Apollo graphql 服务无法读取 null 的属性 'Accept'

hadoop - 使用 MapReduce 编程模型比较两个大型数据集

java - Amazon S3 GET 对象

amazon-web-services - S3 静态网站是否不再通过 HTTPS 访问?