记录大数据以使用 Hadoop 组织和存储它并使用 Hive 查询它的正确方法是啥?

Posted

技术标签:

【中文标题】记录大数据以使用 Hadoop 组织和存储它并使用 Hive 查询它的正确方法是啥?【英文标题】:What's the proper way to log big data to organize and store it with Hadoop, and query it using Hive?记录大数据以使用 Hadoop 组织和存储它并使用 Hive 查询它的正确方法是什么? 【发布时间】:2015-06-04 12:48:33 【问题描述】:

所以基本上我有不同平台上的应用程序将日志数据发送到我的服务器。它是一个节点服务器,本质上接受日志条目的有效负载,并将它们保存到各自的日志文件中(作为写入流缓冲区,因此速度很快),并在日志文件填满时创建一个新的日志文件。

我存储日志的方式本质上是每个“端点”一个文件,每个日志文件都包含与指标相对应的空格分隔值。例如,玩家事件日志结构可能如下所示:

timestamp user mediatype event

然后日志条目将如下所示

1433421453 bob iPhone play

根据阅读文档,我认为这种格式适用于 Hadoop 之类的东西。我认为的工作方式是将这些日志存储在服务器上,然后运行一个定期将这些文件移动到 S3 的 cron 作业。在 S3 中,我可以使用这些日志作为使用 Amazon 的 EMR 的 Hadoop 集群的源。从那里,我可以使用 Hive 查询它。

这种方法有意义吗?我的逻辑有缺陷吗?我应该如何为亚马逊的 EMR 保存/移动这些文件?我需要将所有日志文件连接成一个巨大的文件吗?

另外,如果我以后在日志中添加指标会怎样?这会弄乱我之前的所有数据吗?

我意识到我有很多问题,那是因为我是大数据新手,需要一个解决方案。非常感谢您的宝贵时间,我很感激。

【问题讨论】:

【参考方案1】:

如果您有大量定期更改的日志转储,那么您制定的方法是有意义的。使用 EMRFS,您可以直接处理来自 S3 的日志(您可能知道)。

当您将新的日志事件“附加”到 Hive 时,将生成部分文件。因此,您不必在将它们加载到 Hive 之前将它们连接起来。

(在第 0 天,日志以某种分隔的形式加载到 Hive,由于各种转换而产生了部分文件。在随后的循环中,新的事件/日志将附加到这些部分文件。)

持续添加新字段是一项挑战。您可以创建新的数据结构/集和 Hive 表并加入它们。但是连接会很慢。因此,您可能需要在架构中定义填充符/占位符。

如果您要接收日志流(大量小日志文件/事件)并且需要运行近乎实时的分析,请查看 Kinesis。

(也可以试驾 Impala。它更快)

.. 我的 2c.

【讨论】:

我实际上并不关心解析和索引日志文件...我已经编写了一个服务,它需要自定义。我的问题更多的是如何使用 Amazon 的 Elastic Map Reduce 对这些数据运行 Hive 查询

以上是关于记录大数据以使用 Hadoop 组织和存储它并使用 Hive 查询它的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

大数据以及Hadoop相关概念介绍

处理大数据以执行随机森林分类

大数据以及大数据技术都包括哪些内容

基于Hadoop生态系统的大数据项目

大数据实战——hadoop集群实现免密登录和文件互传

大数据干货基于Hadoop的大数据平台实施——整体架构设计