Google Dataflow与Apache Spark

Bro*_*Lin 24 distributed-computing bigdata apache-spark google-cloud-dataflow google-cloud-ml

我正在调查Google DataflowApache Spark,以确定哪个更适合我们的bigdata分析业务需求.

我发现有Spark SQLMLlib火花平台上做结构化数据查询和机器学习.

我想知道Google Dataflow平台中是否有相应的解决方案?

Eri*_*idt 38

如果您可以扩展您的特定用例,这将有所帮助.您在"Bigdata分析"方面想要完成什么?简短的回答......这取决于:-)

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

  • 资源管理:Cloud Dataflow是一个完全随需应变的执行环境.具体而言 - 当您在Dataflow中执行作业时,资源仅按需分配给该作业.作业之间没有资源共享/争用.与Spark或MapReduce集群相比,您通常会部署一组X节点,然后提交作业,然后调整作业中的节点资源.当然,您可以构建和拆除这些集群,但Dataflow模型适用于与资源管理相关的免提开发.如果想要优化资源使用以满足工作需求Dataflow是一个可靠的模型来控制成本并几乎忘记资源调整.如果您更喜欢多租户风格的群集,我建议您查看Google Cloud Dataproc,因为它提供了按需群集管理方面,如Dataflow,但专注于Hadoop等工作负载,如MR,Spark,Pig,......

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

  • 编程模型:与经典的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不支持基于会聚/迭代的图执行.如果你需要像MLib这样的力量,那么Spark就是你要走的路.请记住,这是今天的状况.

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

Net-net: - 如果你真的主要做ETL风格的工作(过滤,整形,加入......)或批处理风格MapReduce Dataflow是一个很好的途径,如果你想要最小的devOps.
- 如果您需要实现ML样式图,请转到Spark路径并尝试Dataproc - 如果您正在执行ML并且首先需要执行ETL来清理您的训练数据,请实现与Dataflow和Dataproc的混合 - 如果您需要交互性Spark是一个可靠的选择,但是如果你是/可以在SQL中表达你的查询,那么BigQuery也是如此 - 如果你需要在流上处理你的ETL和/或MR作业,Dataflow是一个不错的选择.


那么......你的场景是什么?


Pau*_* K. 5

我都尝试过:

数据流还很年轻,没有使用它进行机器学习的“开箱即用”解决方案(即使您可以在转换中实现算法),您可以将流程数据输出到云存储并稍后使用另一个来读取它工具。

建议使用 Spark,但您必须自己管理集群。不过,还有一个不错的选择:Google Dataproc

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