Lambda 架构 - 为什么使用批处理层
Lambda Architecture - Why batch layer
我正在研究 lambda 架构并了解如何使用它来构建容错大数据系统。
我想知道当一切都可以存储在实时视图中并从中生成结果时,批处理层有何用处?是不是因为实时存储不能用于存储所有数据,那么它就不是实时的,因为检索数据所花费的时间取决于 space 数据存储所花费的时间。
Why batch layer
节省时间和金钱!
它基本上有两个功能,
- 管理主数据集(假设是不可变的)
- 预先计算临时查询的批处理视图
Everything can be stored in realtime view and generate the results out of it - NOT TRUE
以上当然是可能的,但不可行,因为数据可能是 100 到 1000 PB 并且生成结果可能需要时间......很多时间!
此处的关键是实现对大型数据集的低延迟查询。批处理层用于创建批处理视图(低延迟查询),实时层用于 recent/updated 通常很小的数据。现在,任何临时查询都可以通过合并来自批处理视图和实时视图的结果来回答,而不是计算所有主数据集。
此外,想想一个查询(相同的查询?)运行 一次又一次地在庞大的数据集上..浪费时间和金钱!
根据 提供的答案,可以通过三种方式处理数据处理 - 批处理、交互式和实时/流式处理。
我相信,您对实时的参考更多是交互式响应而不是流式传输,因为并非所有用例都与流式传输相关。
交互式响应是指响应时间从亚秒到几秒到几分钟不等,具体取决于用例。这里的关键是理解处理是对静态数据完成的,即已经存储在存储介质上。用户在处理时与系统交互,因此等待响应。 Hive on Tez、Impala、Spark core 等所做的所有努力都是为了解决这个问题并尽可能快地做出响应。
另一端的流式传输是数据实时流入系统的地方 - 例如 Twitter 提要、点击流等,并且需要在数据生成后立即进行处理。 Storm、Spark Streaming 等框架解决了这个问题 space。
批处理的案例是为了解决需要事先在庞大的数据集上完成一些繁重工作的场景,这样用户就会相信他看到的响应是实时的。例如,将大量文档索引到 Apache Solr 中是一项批处理作业,根据数据集,索引将 运行 持续几分钟或可能几个小时。但是,查询 Solr 索引的用户将在亚秒级延迟内获得响应。如您所见,索引无法实时实现,因为可能会有大量的数据。 Google 搜索也是如此,其中索引将以批处理模式完成,结果以交互模式呈现。
任何应对数据挑战的组织都可能涉及所有三种数据处理模式。 Lambda 架构 有效应对了这一挑战,将相同的数据源用于多个数据处理要求
您可以查看没有单独的批处理层的 Kappa 架构。
一切都在流层中进行分析。您可以在正确的配置中使用 Kafka 作为 master-datasetstorage 并将计算的数据保存在数据库中作为您的视图。
如果你想重新计算,你可以启动一个新的流处理作业,将你的视图从 Kafka 重新计算到你的数据库中,并替换你的旧视图。
可以仅使用实时视图作为即席查询的主要存储,但正如其他答案中已经提到的那样,如果您有大量数据来单独进行批处理和流处理而不是进行批处理作业,则速度会更快作为流工作。这取决于您的数据大小。
此外,拥有像 hdfs 这样的存储而不是用于批处理的数据库更便宜。
最后一点,在许多情况下,批处理和流处理的算法不同,因此您需要分开处理。但基本上也可以只使用 "realtime view" 作为你的批处理和流层,而不使用 Kafka 作为主集。这取决于您的用例。
我正在研究 lambda 架构并了解如何使用它来构建容错大数据系统。
我想知道当一切都可以存储在实时视图中并从中生成结果时,批处理层有何用处?是不是因为实时存储不能用于存储所有数据,那么它就不是实时的,因为检索数据所花费的时间取决于 space 数据存储所花费的时间。
Why batch layer
节省时间和金钱!
它基本上有两个功能,
- 管理主数据集(假设是不可变的)
- 预先计算临时查询的批处理视图
Everything can be stored in realtime view and generate the results out of it - NOT TRUE
以上当然是可能的,但不可行,因为数据可能是 100 到 1000 PB 并且生成结果可能需要时间......很多时间!
此处的关键是实现对大型数据集的低延迟查询。批处理层用于创建批处理视图(低延迟查询),实时层用于 recent/updated 通常很小的数据。现在,任何临时查询都可以通过合并来自批处理视图和实时视图的结果来回答,而不是计算所有主数据集。
此外,想想一个查询(相同的查询?)运行 一次又一次地在庞大的数据集上..浪费时间和金钱!
根据
我相信,您对实时的参考更多是交互式响应而不是流式传输,因为并非所有用例都与流式传输相关。
交互式响应是指响应时间从亚秒到几秒到几分钟不等,具体取决于用例。这里的关键是理解处理是对静态数据完成的,即已经存储在存储介质上。用户在处理时与系统交互,因此等待响应。 Hive on Tez、Impala、Spark core 等所做的所有努力都是为了解决这个问题并尽可能快地做出响应。
另一端的流式传输是数据实时流入系统的地方 - 例如 Twitter 提要、点击流等,并且需要在数据生成后立即进行处理。 Storm、Spark Streaming 等框架解决了这个问题 space。
批处理的案例是为了解决需要事先在庞大的数据集上完成一些繁重工作的场景,这样用户就会相信他看到的响应是实时的。例如,将大量文档索引到 Apache Solr 中是一项批处理作业,根据数据集,索引将 运行 持续几分钟或可能几个小时。但是,查询 Solr 索引的用户将在亚秒级延迟内获得响应。如您所见,索引无法实时实现,因为可能会有大量的数据。 Google 搜索也是如此,其中索引将以批处理模式完成,结果以交互模式呈现。
任何应对数据挑战的组织都可能涉及所有三种数据处理模式。 Lambda 架构 有效应对了这一挑战,将相同的数据源用于多个数据处理要求
您可以查看没有单独的批处理层的 Kappa 架构。 一切都在流层中进行分析。您可以在正确的配置中使用 Kafka 作为 master-datasetstorage 并将计算的数据保存在数据库中作为您的视图。
如果你想重新计算,你可以启动一个新的流处理作业,将你的视图从 Kafka 重新计算到你的数据库中,并替换你的旧视图。 可以仅使用实时视图作为即席查询的主要存储,但正如其他答案中已经提到的那样,如果您有大量数据来单独进行批处理和流处理而不是进行批处理作业,则速度会更快作为流工作。这取决于您的数据大小。 此外,拥有像 hdfs 这样的存储而不是用于批处理的数据库更便宜。
最后一点,在许多情况下,批处理和流处理的算法不同,因此您需要分开处理。但基本上也可以只使用 "realtime view" 作为你的批处理和流层,而不使用 Kafka 作为主集。这取决于您的用例。