使用或不使用Hive在Amazon EMR中处理日志

时间:2012-12-21 04:43:35

标签: hadoop hive hadoop-streaming emr

我的EMR集群中的路径'hdfs:/// logs'中有很多日志文件。每个日志条目都是多行,但有一个起始和结束标记,用于在两个条目之间划分。 现在,

  1. 并非日志文件中的所有条目都有用
  2. 有用的条目需要转换,输出需要存储在输出文件中,以便我以后可以有效地查询(使用Hive)输出日志。
  3. 我有一个python脚本,可以简单地获取一个日志文件并做一个部分。和b。如上所述,但我没有写过任何地图制作者或缩减者。

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

    我是Map Reduce的新手,已经看过一些Word计数的例子,但他们都有一个输入文件。我在哪里可以找到包含多个输入文件的示例?

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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的答案。

答案 2 :(得分:1)

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