我需要使用map reduce逐个解析Apache访问日志和tomcat日志。从tomcat日志中提取的字段很少,而从Apache日志中提取的字段很少。我需要根据时间戳合并/map提取的字段,并将这些映射字段导出到传统的关系数据库(例如,MySQL )。
我可以使用正则表达式或pig来解析和提取信息。我面临的挑战是如何将从两个日志中提取的信息映射到单个聚合格式或文件,以及如何将这些数据导出到MYSQL。
我正在考虑的几种方法
1)将解析的Apache访问日志和tomcat日志的map reduce输出写入单独的文件,并将这些文件合并为单个文件(同样基于时间戳)。将此数据导出到MySQL。
2)在hadoop中使用Hbase或Hive以表格的形式存储数据,并导出到MySQL
3)使用JDBC将map reduce的输出直接写入MySQL。
哪种方法是最可行的,也请提出你所知道的任何其他替代解决方案。
发布于 2010-07-11 07:24:34
拥有较小、更简单的MR作业并将它们链接在一起,几乎总是比拥有大型、复杂的作业更可取。我认为你最好的选择是像#1这样的东西。换句话说:
您可能可以在同一步骤中执行连接和转换(1和2)。使用map进行转换并执行reduce侧连接。
这听起来不像你需要/想要随机访问的开销,所以我不会考虑HBase。这并不是它的强项(尽管在随机访问的意义上,您可以通过时间戳查找HBase中的每条记录,查看它是否存在,合并记录,或者如果它不存在,则简单地插入它,但相对来说,这非常慢)。Hive可以很好地存储两种格式的“统一”结果,但您仍然需要将记录转换为这种格式。
您绝对不希望让reducer直接写入MySQL。这实际上会在数据库上创建DDOS攻击。考虑一个由10个节点组成的集群,每个节点运行5个reducers,您将有50个并发编写器写入同一个表。随着集群的增长,很快就会超过最大连接数,并阻塞RDBMS。
尽管如此,如果您正在考虑完整的日志记录,请问问自己,将如此多的数据放入数据库是否有意义。这些数据量正是Hadoop本身要长期存储和处理的案例类型。如果您正在计算这些数据的聚合,请务必将其放入MySQL中。
希望这能有所帮助。
https://stackoverflow.com/questions/3080592
复制相似问题