2012-12-21 40 views
0

我的EMR集群中的路径为'hdfs:/// logs'的日志文件很多。每个日志条目都是多行,但有一个起始和结束标记来划分两个条目。 现在,在有或没有使用Hive的情况下处理Amazon EMR中的日志

  1. 未在日志文件中的所有条目都是有用
  2. 其是有用的需要,待转化的条目和输出需要被存储在一个输出文件,让我可以有效地查询(使用配置单元)稍后输出日志。

我有一个python脚本,可以简单地采取一个日志文件,并做一部分。和b。如上所述,但我没有编写任何映射器或缩减器。

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

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

回答

1

在这里,我看到你有两方面的问题:

1

长期正确的方式来做到这一点,因为阿马尔说,写一个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的答案。

1

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

相关问题