Google 数据流与 Apache Spark

Google Dataflow vs Apache Spark

我正在调查 Google DataflowApache Spark 以决定哪一个更适合我们的大数据分析业务需要。

我发现spark平台里面有Spark SQLMLlib做结构化数据查询和机器学习。

不知道GoogleDataflow平台有没有对应的解决方案?

我都试过了:

Dataflow 还很年轻,没有 "out-of-the-box" 使用它进行 ML 的解决方案(即使您可以在转换中实现算法),您可以将流程数据输出到云存储并稍后使用另一个工具。

建议使用 Spark,但您必须自己管理集群。 然而,有一个很好的选择:Google Dataproc

您可以使用 spark 开发分析工具并在您的集群上使用一个命令部署它们,dataproc 将管理集群本身而无需调整配置。

如果您可以对您的特定用例进行一些扩展,将会有所帮助。关于 "Bigdata analysis",您想要完成什么?简短的回答......这取决于:-)

以下是与 Google Cloud Dataflow v. Spark 和 Hadoop MR 相关的一些关键架构要点。

  • 资源管理:Cloud Dataflow 是一个完全按需执行的环境。具体来说 - 当您在 Dataflow 中执行作业时,资源只会按需分配给该作业。没有 sharing/contention 跨作业的资源。与 Spark 或 MapReduce 集群相比,您通常会部署一个 X 节点集群,然后提交作业,然后跨作业调整节点资源。当然,您可以建立和拆除这些集群,但数据流模型适用于与资源管理相关的免提开发操作。如果想要根据工作需求优化资源使用,Dataflow 是控制成本的可靠模型,几乎可以忘记资源调优。如果您更喜欢多租户风格的集群,我建议您查看 Google Cloud Dataproc,因为它提供了像 Dataflow 这样的按需集群管理方面,但专注于 class Hadoop 工作负载,如 MR、Spark、猪,...

  • 交互性:目前 Cloud Dataflow 不提供交互模式。这意味着一旦你提交了一个工作,工作资源就会绑定到提交的图表上,并且大部分数据都会根据需要加载到资源中。如果您想通过内存中的 RDD 将数据加载到集群中,然后动态执行查询,Spark 可能是一个更好的模型。挑战在于,随着数据大小和查询复杂性的增加,您将不得不处理 devOps。现在,如果您的大部分查询都可以用 SQL 语法表达,您可能需要查看 BigQuery。 BigQuery 提供了 Dataflow 的 "on demand" 方面,使您能够以交互方式对海量数据(例如 PB 级数据)执行查询。在我看来,BigQuery 的最大优势是您没有 think/worry 硬件分配来处理您的数据大小。这意味着随着数据大小的增长,您不必考虑硬件(内存和磁盘大小)配置。

  • 编程模型:与 classic MapReduce 模型相比,Dataflow 的编程模型在功能上存在偏差。就 API 原语而言,Spark 和 Dataflow 之间有许多相似之处。需要考虑的事项:1) Dataflow 的主要编程语言是 Java。有一个 Python SDK 在开发中。 Dataflow Java SDK 开源并已移植到 Scala。如今,Spark 有更多的 SDK 表面选择,包括 GraphX、Streaming、Spark SQL 和 ML。 2) Dataflow是基于批处理和流处理的DAG开发的统一编程模型。目标是消除在批处理和流处理模型之间移动时的复杂性和成本切换。同一张图可以在任一模式下无缝 运行。 3) 目前,Cloud Dataflow 不支持基于 converging/iterative 的图形执行。如果您需要 MLib 之类的强大功能,那么 Spark 就是您的不二之选。请记住,这就是今天的情况。

  • Streaming & Windowing:数据流(建立在统一编程模型之上)被设计成一个高度可靠、持久和可扩展的流式执行环境。 Dataflow 和 Spark 之间的主要区别之一是,Dataflow 使您能够根据其真实事件时间轻松处理数据,而不是仅在数据到达图表时对其进行处理。您可以根据事件时间或到达时间 window 将数据分为固定、滑动、会话或自定义 windows。 Dataflow 还提供了触发器(适用于 Windows),使您能够控制如何处理迟到的数据。 Net-net 你拨入正确性控制的级别来满足你分析的需要。例如,假设您有一款与 100 个边缘节点交互的手机游戏。这些节点创建了 10000 个与游戏相关的事件。假设一组节点无法与您的后端流分析系统通信。在数据流的情况下——一旦数据确实到达——你可以控制你想要如何处理与你的查询正确性需求相关的数据。 Dataflow 还提供了在运行中升级流作业的能力。例如,假设您在转换中发现了一个逻辑错误。您可以在不丢失现有窗口状态的情况下升级您的飞行作业。 Net-net 你可以让你的生意 运行ning.

网-网: - 如果你真的主要是在做 ETL 风格的工作(过滤、整形、加入……)或批处理风格的 MapReduce Dataflow 如果你想要最小的 devOps 是一个很好的途径。
- 如果您需要实现 ML 风格的图表,请使用 Spark 路径并尝试使用 Dataproc - 如果你正在做 ML,你首先需要做 ETL 来清理你的训练数据,实现 Dataflow 和 Dataproc 的混合 - 如果您需要交互性,Spark 是一个不错的选择,但如果您 are/can 在 SQL 中表达您的查询,BigQuery 也是一个不错的选择 - 如果您需要通过流处理 ETL 和/或 MR 作业,Dataflow 是一个不错的选择。


所以...你的场景是什么?

google 现在提供两种编程模型 - mapreduce 和 spark。 Cloud DataFlow 和 Cloud DataProc 它们分别是

我已经使用 spark、DataFlow 构建了代码。让我谈谈我的想法。

Spark/DataProc:我在ETL中大量使用了spark(Pyspark)。您可以使用 SQL 和您选择的任何编程语言。许多函数可用(包括 Window 函数)。构建你的数据框并编写你的转换,它可以非常快。缓存数据后,对 Dataframe 的任何操作都会很快。

您可以简单地在 GCS 上构建外部配置单元 table。然后您可以使用 Spark 进行 ETL 并将数据加载到 Big Query 中。这是用于批处理。

对于流式处理,您可以使用 spark Streaming 并将数据加载到大查询中。

现在,如果您已经准备好集群,那么您可以考虑是否迁移到 Google 云。我发现 Data proc (Google Cloud Hadoop/Spark) 产品更好,因为您不必担心许多集群管理..

DataFlow:它被称为 apache beam。您可以在此处使用 Java/Python 或任何其他语言编写代码。您可以在任何框架(Spark/MR/Flink)中执行代码。这是一个统一的模型。在这里您可以同时进行批处理和流数据处理。