hadoop - Hadoop中的分布式文件处理?

标签 hadoop apache-spark batch-processing apache-flink

我有大量压缩的 tar 文件,其中每个 tar 本身包含几个文件。我想提取这些文件,我想使用 hadoop 或类似的技术来加速处理。有没有解决此类问题的工具?据我所知,hadoop 和类似的框架(如 spark 或 flink)不直接使用文件,也不会让您直接访问文件系统。我还想对提取的文件进行一些基本的重命名,并将它们移动到适当的目录中。

我可以想象一个创建所有 tar 文件列表的解决方案。然后将该列表传递给映射器,并且单个映射器从列表中提取一个文件。这是一种合理的方法吗?

最佳答案

可以指示 MapReduce 使用输入格式,其中每个 Mapper 的输入是单个文件。 (来自https://code.google.com/p/hadoop-course/source/browse/HadoopSamples/src/main/java/mr/wholeFile/WholeFileInputFormat.java?r=3)

public class WholeFileInputFormat extends FileInputFormat<NullWritable, BytesWritable> {

  @Override
  protected boolean isSplitable(JobContext context, Path filename) {
    return false;
  }

  @Override
  public RecordReader<NullWritable, BytesWritable> createRecordReader(
    InputSplit inputSplit, TaskAttemptContext context) throws IOException,
  InterruptedException {
    WholeFileRecordReader reader = new WholeFileRecordReader();
    reader.initialize(inputSplit, context);
    return reader;
  }
}

然后,在您的映射器中,您可以使用 Apache commons 压缩库来解压缩 tar 文件 https://commons.apache.org/proper/commons-compress/examples.html

您不需要将文件列表传递给 Hadoop,只需将所有文件放在一个 HDFS 目录中,然后使用该目录作为您的输入路径。

关于hadoop - Hadoop中的分布式文件处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31827040/

相关文章:

python - 任务队列设置精确/近似执行时间

asp.net-web-api - webapi 批处理和委托(delegate)处理程序

maven - Hadoop核心的Maven Central与Cloudera存储库

apache-spark - Spark 将数据拉入 RDD 或数据框或数据集中

scala - 将 S3(法兰克福)与 Spark 结合使用

scala - 使用作为字符串数组的行字段过滤 Spark 数据帧

hadoop - 如何在 pig 中运行说明命令?

hadoop - Hadoop的WORM原理..具体是什么意思?

hadoop - Spark 1.4 缺少 Kafka 库

sql - 运行目录中的所有 SQL 文件