【问题标题】:How to control the number of hadoop streaming output files如何控制hadoop流输出文件的数量
【发布时间】:2013-10-19 06:56:38
【问题描述】:

详情如下:

输入文件在hdfs路径/user/rd/input,hdfs输出路径为/user/rd/output 在输入路径中,part-00000到part-19999有20000个文件,每个文件大约64MB。 我要做的是编写一个hadoop流作业,将这20,000个文件合并为10,000个文件。

有没有办法使用 hadoop 流作业将这 20,000 个文件合并为 10,000 个文件?或者换句话说,有没有办法控制hadoop流输出文件的数量?

提前致谢!

【问题讨论】:

    标签: hadoop hadoop-streaming


    【解决方案1】:

    看起来您现在有一个仅限地图的流式传输作业。仅映射作业的行为是每个映射任务有一个输出文件。对于改变这种行为,您无能为力。

    您可以通过添加 reduce 阶段来利用 MapReduce 的工作方式,使其拥有 10,000 个 reducer。然后,每个reducer 将输出一个文件,因此您剩下10,000 个文件。请注意,您的数据记录将“分散”在 10,000 个中......它不会只是连接两个文件。为此,请在命令行参数中使用-D mapred.reduce.tasks=10000 标志。

    这可能是默认行为,但您也可以将身份归约器指定为归约器。除了传递记录之外,这不会做任何事情,这就是我认为你想要的。使用此标志执行此操作:-reducer org.apache.hadoop.mapred.lib.IdentityReducer

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-18
      • 2023-03-21
      • 2017-01-04
      相关资源
      最近更新 更多