我们可以使用 Hadoop MapReduce 进行实时数据处理吗?
Posted
技术标签:
【中文标题】我们可以使用 Hadoop MapReduce 进行实时数据处理吗?【英文标题】:Can we use Hadoop MapReduce for real-time data process? 【发布时间】:2018-12-18 13:06:24 【问题描述】:Hadoop map-reduce 和它的 echo-systems(如 Hive..)我们通常用于批处理。但我想知道是否有任何方法可以使用 hadoop MapReduce 进行实时数据处理示例,例如实时结果、实时推文。
如果不是,实时数据处理或分析的替代方案是什么?
【问题讨论】:
【参考方案1】:带有 Map-Reduce 的实时应用程序 让我们尝试使用 Hadoop 实现一个实时应用程序。为了理解这个场景,让我们考虑一个温度传感器。假设传感器继续工作,我们将不断获得新的读数。所以数据永远不会停止。
我们不应该等待数据完成,因为它永远不会发生。那么也许我们应该继续定期进行分析(例如每小时)。我们可以每小时运行 Spark 并获取最后一小时的数据。
如果我们每小时都需要最近 24 小时的分析,该怎么办?我们是否应该每小时重新处理过去 24 小时的数据?也许我们可以计算每小时的数据,存储它,然后用它们来计算 24 小时的数据。它会起作用,但我必须编写代码才能做到这一点。
我们的问题才刚刚开始。让我们迭代一些使我们的问题复杂化的要求。
如果温度传感器放置在核电站内部,并且 我们的代码创建警报。一小时后创建警报 可能不是最好的处理方式。我们可以在 1 内收到警报吗 第二个? 如果你想在小时边界计算读数,而它 数据到达存储需要几秒钟。现在你不能 在你的边界开始工作,你需要观察磁盘和 当数据到达小时边界时触发作业。 嗯,您可以快速运行 Hadoop。作业会在 1 秒内完成吗? 我们可以将数据写入磁盘,读取数据,处理它,然后 产生结果,并与其他 23 小时的数据重新组合在一起 第二?现在事情开始变得紧张了。 你开始感觉到摩擦的原因是因为你不是 为工作使用正确的工具。您使用的是平头螺丝刀 当您有内六角扳手螺丝时。流处理 解决此类问题的正确工具称为“流处理”。这里的“Stream”指的是数据流。将继续出现的数据序列。 “流处理”可以在数据进入时对其进行观察、处理并在毫秒内做出响应。
以下是我们想要超越批处理 (Hadoop/Spark)、我们的舒适区并考虑流处理的原因。
某些数据自然而然地以永无止境的事件流形式出现。去做 批处理,你需要存储它,在某些时候切断它 处理数据。然后你必须做下一批然后担心 关于跨多个批次的聚合。相比之下,流 优雅自然地处理永无止境的数据流。你可以 有条件,看多层次的关注(会讨论这个 当我们到达 windows 时),还可以轻松查看来自多个 同时流式传输。 使用流式传输,您可以更快地响应事件。你可以生产 收到事件(更新)后的几毫秒内的结果。和 批处理这通常需要几分钟。 流处理自然适合时间序列数据和检测 随着时间的推移模式。例如,如果您试图检测 永无止境的流中网络会话的长度(这是一个示例 试图检测一个序列),很难做到这一点 批次,因为某些会话将分为两个批次。流处理 可以轻松处理。如果你退后一步考虑一下, 大多数连续数据系列是时间序列数据。例如,几乎 所有物联网数据都是时间序列数据。因此,使用 很自然的编程模型。 Batch 让数据建立起来并尝试同时处理它们 流处理数据,因为它们进来,因此传播处理 随着时间的推移。因此流处理可以使用更少的硬件 而不是批处理。 有时数据量很大,甚至无法存储。 流处理让您处理大型火马式数据和 只保留有用的位。 最后,有很多可用的流数据(例如客户 交易、活动、网站访问),它们将增长得更快 物联网用例(各种传感器)。流媒体更多 用于思考和编程这些用例的自然模型。【讨论】:
我看到你的回答和这篇文章 medium.com/stream-processing/… 之间有惊人的相似之处!!!【参考方案2】:在 HDP 3.1 中,引入了 Hive-Kafka 集成以处理实时数据。有关详细信息,请参阅文档:Apache Hive-Kafka Integration
您可以add Apache Druid to a Hadoop cluster 处理对事件数据的OLAP 查询,您可以将Hive 和Kafka 与Druid 一起使用。
【讨论】:
【参考方案3】:Hadoop/Spark 在处理大量数据和批处理的情况下大放异彩,但当您的用例围绕实时分析需求展开时, Kafka Steams 和 druid 是不错的选择。
这是了解类似用例的良好参考链接: https://www.youtube.com/watch?v=3NEQV5mjKfY
Hortonworks 还提供 HDF 堆栈 (https://hortonworks.com/products/data-platforms/hdf/),最适合与动态数据相关的用例。
Kafka 和 Druid 文档是了解这两种技术优势的好地方。以下是他们的文档链接:
卡夫卡:https://kafka.apache.org/documentation/streams/ 德鲁伊:http://druid.io/docs/latest/design/index.html#when-to-use-druid
【讨论】:
以上是关于我们可以使用 Hadoop MapReduce 进行实时数据处理吗?的主要内容,如果未能解决你的问题,请参考以下文章
使用Eclipse编译运行MapReduce程序 Hadoop2.6.0_Ubuntu/CentOS
Hadoop(十七)之MapReduce作业配置与Mapper和Reducer类