我正在调查Google Dataflow和Apache Spark,以确定哪一个更适合我们的大数据分析业务需求。
我发现在 spark 平台上有做结构化数据查询和机器学习的Spark SQL
。MLlib
不知道谷歌Dataflow平台有没有对应的解决方案?
我正在调查Google Dataflow和Apache Spark,以确定哪一个更适合我们的大数据分析业务需求。
我发现在 spark 平台上有做结构化数据查询和机器学习的Spark SQL
。MLlib
不知道谷歌Dataflow平台有没有对应的解决方案?
如果您可以扩展您的特定用例,这将有所帮助。您在“大数据分析”方面想要完成什么?简短的回答......这取决于:-)
以下是与 Google Cloud Dataflow v. Spark 和 Hadoop MR 相关的一些关键架构要点。
资源管理:Cloud Dataflow 是一个完全按需执行的环境。具体来说 - 当您在 Dataflow 中执行作业时,资源只会按需分配给该作业。作业之间不存在资源共享/争用。与 Spark 或 MapReduce 集群相比,您通常会部署一个 X 节点集群,然后提交作业,然后跨作业调整节点资源。当然,您可以建立和拆除这些集群,但 Dataflow 模型面向与资源管理相关的免提开发操作。如果想根据工作需求优化资源使用,Dataflow 是控制成本并且几乎忘记资源调整的可靠模型。如果您更喜欢多租户样式的集群,我建议您查看 Google Cloud Dataproc,因为它提供了按需集群管理方面,例如 Dataflow,
互动性:目前Cloud Dataflow 不提供交互模式。这意味着一旦您提交作业,工作资源就会绑定到已提交的图表,并且大部分数据会根据需要加载到资源中。如果您想通过内存中的 RDD 将数据加载到集群中,然后动态执行查询,Spark 可能是一个更好的模型。挑战在于,随着数据大小和查询复杂性的增加,您将不得不处理 devOps。现在,如果您的大部分查询都可以用 SQL 语法表达,您可能需要查看 BigQuery。BigQuery 提供 Dataflow 的“按需”方面,使您能够以交互方式对海量数据(例如 PB 级数据)执行查询。我认为 BigQuery 的最大优势是您无需考虑/担心硬件分配来处理您的数据大小。
编程模型:Dataflow 的编程模型与经典的 MapReduce 模型相比在功能上有偏差。在 API 原语方面,Spark 和 Dataflow 有许多相似之处。需要考虑的事项: 1) Dataflow 的主要编程语言是 Java。有一个 Python SDK 正在开发中。Dataflow Java SDK 已开源并已移植到 Scala。如今,Spark 在 GraphX、Streaming、Spark SQL 和 ML 方面有更多 SDK 表面选择。2) Dataflow 是基于批处理和流式的 DAG 开发的统一编程模型。目标是消除在批处理模型和流模型之间移动时的复杂性和成本转换。同一张图可以在任一模式下无缝运行。3) 今天,Cloud Dataflow 不支持基于收敛/迭代的图形执行。如果您需要 MLib 之类的强大功能,那么 Spark 就是您的最佳选择。请记住,这就是今天的情况。
Streaming & Windowing:Dataflow(建立在统一的编程模型之上)被设计成一个高度可靠、持久和可扩展的流执行环境。Dataflow 和 Spark 之间的主要区别之一是,Dataflow 使您能够轻松地根据其真实事件时间处理数据,而不是仅在数据到达图表时对其进行处理。您可以根据事件时间或到达时间将数据窗口化为固定、滑动、会话或自定义窗口。Dataflow 还提供触发器(适用于 Windows),使您能够控制如何处理迟到的数据。Net-net 在您拨入的正确性控制级别,以满足您分析的需要。例如,假设您有一个与 100 个边缘节点交互的手机游戏。这些节点创建 10000' 第二个与游戏相关的事件。假设一组节点无法与您的后端流分析系统通信。在 Dataflow 的情况下 - 一旦数据确实到达 - 您可以控制您希望如何处理与查询正确性需求相关的数据。Dataflow 还提供了在运行时升级流作业的能力。例如,假设您在转换中发现了一个逻辑错误。您可以在不丢失现有窗口状态的情况下升级您的飞行作业。Net-net,您可以让您的业务保持运转。Dataflow 还提供了在运行时升级流作业的能力。例如,假设您在转换中发现了一个逻辑错误。您可以在不丢失现有窗口状态的情况下升级您的飞行作业。Net-net,您可以让您的业务保持运转。Dataflow 还提供了在运行时升级流作业的能力。例如,假设您在转换中发现了一个逻辑错误。您可以在不丢失现有窗口状态的情况下升级您的飞行作业。Net-net,您可以让您的业务保持运转。
Net-net:-如果您真的主要从事 ETL 风格的工作(过滤、整形、连接等)或批处理风格的 MapReduce,如果您想要最少的 devOps,Dataflow 是一个很好的途径。
- 如果您需要实现 ML 样式图,请使用 Spark 路径并尝试使用 Dataproc - 如果您正在使用 ML,并且您首先需要执行 ETL 来清理您的训练数据,请实现与 Dataflow 和 Dataproc 的混合 - 如果您需要交互性Spark 是一个不错的选择,但如果您可以/可以用 SQL 表达您的查询,BigQuery 也是如此——如果您需要通过流处理您的 ETL 和/或 MR 作业,Dataflow 是一个不错的选择。
那么......你是什么场景?
我都试过了:
Dataflow 还很年轻,没有“开箱即用”的解决方案来使用它进行 ML(即使您可以在转换中实现算法),您可以将流程数据输出到云存储并稍后与另一个读取工具。
建议使用 Spark,但您必须自己管理集群。但是有一个很好的选择:Google Dataproc
您可以使用 spark 开发分析工具并在集群上使用一个命令部署它们,dataproc 将自行管理集群,而无需调整配置。
我已经使用 spark,DataFlow 构建了代码。让我谈谈我的想法。
Spark/DataProc:我在 ETL 中经常使用 spark (Pyspark)。您可以使用 SQL 和您选择的任何编程语言。有很多功能可用(包括窗口功能)。构建您的数据框并编写您的转换,它可以非常快。缓存数据后,对 Dataframe 的任何操作都会很快。
您可以简单地在 GCS 上构建 hive 外部表。然后,您可以使用 Spark 进行 ETL 并将数据加载到 Big Query 中。这是用于批处理。
对于流式传输,您可以使用 spark Streaming 并将数据加载到大查询中。
现在,如果您已经拥有集群,那么您已经考虑是否迁移到谷歌云。我发现 Data proc (Google Cloud Hadoop/Spark) 产品更好,因为您不必担心许多集群管理。
DataFlow :它被称为 apache 梁。在这里,您可以使用 Java/Python 或任何其他语言编写代码。您可以在任何框架(Spark/MR/Flink)中执行代码。这是一个统一的模型。在这里,您可以进行批处理和流数据处理。
google 现在提供两种编程模型——mapreduce 和 spark。Cloud DataFlow 和 Cloud DataProc 它们分别是