gpt4 book ai didi

hadoop - 将目录而不是文件传递给 hadoop-streaming?

转载 作者:可可西里 更新时间:2023-11-01 14:15:18 24 4
gpt4 key购买 nike

在我的工作中,我需要解析许多历史日志集。个别客户(有数千个)可能有数百个按日期划分的日志子目录。例如:

  • 日志/Customer_One/2011-01-02-001
  • 日志/Customer_One/2012-02-03-001
  • 日志/Customer_One/2012-02-03-002
  • 日志/Customer_Two/2009-03-03-001
  • 日志/Customer_Two/2009-03-03-002

每个单独的日志集本身可能有五到六个级别的深度,并且包含数千个文件。

因此,我实际上希望各个映射作业处理遍历子目录:简单地枚举各个文件是我的分布式计算问题的一部分!

不幸的是,当我尝试将仅包含日志子目录的目录传递给 Hadoop 时,它会提示我无法将这些子目录传递给我的映射器。 (同样,我写了接受子目录作为输入):

$ <strong>hadoop jar "${HADOOP_HOME}/contrib/streaming/hadoop-streaming-${HADOOP_VERSION}.jar" -input file:///mnt/logs/Customer_Name/ -file mapper.sh -mapper "mapper.sh" -file reducer.sh -reducer "reducer.sh" -output .</strong>



<p>[ . . . ]</p>

12/04/10 12:48:35 ERROR security.UserGroupInformation: PriviledgedActionException as:cloudera (auth:SIMPLE) cause:java.io.IOException: Not a file: file:/mnt/logs/Customer_Name/2011-05-20-003
12/04/10 12:48:35 ERROR streaming.StreamJob: Error Launching job : Not a file: file:/mnt/logs/Customer_Name/2011-05-20-003
Streaming Command Failed!
[cloudera@localhost ~]$

有没有一种直接的方法可以说服 Hadoop-streaming 允许我将目录分配为工作项?

最佳答案

我猜你需要研究编写一个自定义的 InputFormat,你也可以传递根目录,它会为每个客户创建一个拆分,然后每个拆分的记录读取器将执行目录遍历并将文件内容推送到你的映射器

关于hadoop - 将目录而不是文件传递给 hadoop-streaming?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10095717/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com