使用或不使用hive在amazon emr中处理日志

4sup72z8  于 2021-06-03  发布在  Hadoop
关注(0)|答案(3)|浏览(406)

我的emr集群中有很多日志文件,路径为'hdfs:///logs'。每个日志条目都有多行,但有一个开始和结束标记来区分两个条目。现在,
并非日志文件中的所有条目都有用
有用的条目需要转换,输出需要存储在输出文件中,这样我以后就可以高效地查询(使用hive)输出日志。
我有一个python脚本,它可以简单地获取一个日志文件并执行a部分。和b。上面提到过,但我没有写任何Map器或还原器。
hive负责其查询的Map器和还原器。请告诉我是否以及如何使用python脚本在所有日志上运行它,并将输出保存在“hdfs:///outputlogs”中?
我是一个新的Map减少,并看到了一些单词计数的例子,但他们都有一个单一的输入文件。在哪里可以找到有多个输入文件的示例?

kmbjn2e3

kmbjn2e31#

我看到你有两个问题:
有多个文件作为输入
如果您传入多个文件作为输入,那么同样的字数计算示例也会起作用。事实上你很容易通过考试 folder name 作为输入而不是文件名 hdfs:///logs .
您甚至可以传递一个以逗号分隔的路径列表作为输入,而不是使用以下命令: FileInputFormat.setInputPaths(conf, new Path(args[0])); 您可以使用以下选项: FileInputFormat.setInputPaths(job, args[0]); 请注意,只传递逗号分隔的列表 args[0] 就足够了。
如何将逻辑转换为mapreduce
这确实有一个陡峭的学习曲线,因为你需要考虑关键和价值观。但我觉得你可以把所有的逻辑都放在Map器里,然后 IdentityReducer ,如下所示: conf.setReducerClass(IdentityReducer.class); 如果你花一些时间阅读以下地点的例子,你应该能够更好地做出这些决定:
hadoop map reduce示例(http://hadoop-map-reduce-examples.googlecode.com/svn/trunk/hadoop-examples/src/ )
http://developer.yahoo.com/hadoop/tutorial/module4.html
http://www.michael-noll.com/tutorials/writing-an-hadoop-mapreduce-program-in-python/
http://kickstarthadoop.blogspot.in/2011/04/word-count-hadoop-map-reduce-example.html

ylamdve6

ylamdve62#

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

wqsoz72f

wqsoz72f3#

长期正确的方法是,正如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的答案。

相关问题