0

我的 EMR 集群中有很多日志文件,路径为“hdfs:///logs”。每个日志条目是多行,但有一个开始和结束标记来区分两个条目。现在,

  1. 并非日志文件中的所有条目都有用
  2. 有用的条目需要转换,输出需要存储在输出文件中,以便我以后可以有效地查询(使用 Hive)输出日志。

我有一个 python 脚本,它可以简单地获取一个日志文件并执行 a 部分。和 b。上面提到了,但我没有写任何映射器或减速器。

Hive 负责 Mappers 和 Reducers 的查询。请告诉我是否以及如何使用 python 脚本在所有日志上运行它并将输出保存在 'hdfs:///outputlogs' 中?

我是 Map Reduce 的新手,看过一些字数的例子,但它们都有一个输入文件。在哪里可以找到具有多个输入文件的示例?

4

3 回答 3

1

在这里,我看到您有两个问题:

于 2012-12-21T09:22:42.223 回答
1

正如 Amar 所说,长期正确的做法是编写一个 MapReduce 作业来完成它。

但是,如果这是一次性的事情,并且数据不是太大,那么使用简单的 bash 脚本执行此操作可能是最简单/最容易的,因为您已经有了 python 脚本:

hadoop fs -text /logs/* > input.log
python myscript.py input.log output.log
hadoop fs -copyFromLocal output.log /outputlogs
rm -f input.log output.log

如果这是一个重复的过程——你想要可靠和高效的东西——或者如果你只是想学习更好地使用 MapReduce,那么坚持使用 Amar 的答案。

于 2012-12-21T22:40:38.250 回答
1

如果您已经编写了逻辑,并且您想使用 EMR 和/或 vanilla Hadoop 进行并行处理 - 您可以使用 Hadoop 流:http ://hadoop.apache.org/docs/r0.15.2/streaming.html 。简而言之 - 您的脚本将数据输入标准输入并输出到标准输出可以成为映射器。
因此,您将使用集群在 HDFS 中运行数据处理,而无需重新打包您的代码。

于 2012-12-23T11:23:52.573 回答