【问题标题】:Relevance of Hadoop & Streaming solutions when Spark existsSpark 存在时 Hadoop 和流解决方案的相关性
【发布时间】:2018-06-14 17:27:10
【问题描述】:

我正在为我的创业公司启动一项大数据计划。 2018 年有任何理由使用 Hadoop,因为 Spark 被吹捧为更快,因为它主要不是将中间数据写入磁盘作为 Hadoop 的 MR。

我意识到 Spark 对 RAM 的需求更高,但这只是一次可以收回成本的 CAPEX 成本?

一般来说,除非有遗留项目,否则既然 Spark 可用,为什么还要选择 Hadoop?

是否愿意将两者进行现实世界的比较、陷阱等?

或者是否有 Hadoop 可以解决但 Spark 不能解决的用例?

——————实际问题在下方评论————

我会使用 YARN 作为资源管理器,使用 HDFS 作为 Spark 的文件系统。 还要意识到,当 Spark 与 Hadoop 生态系统相交时,它有点安静。

比较是:

  1. Mapreduce 与 Spark 代码
  2. SparkSQL 与 Hive
  3. 人们也提到了 Pig,但并不是很多人都想学习自定义查询。如果我必须使用 Pig 作为数据科学家,我为什么不使用 Apache NiFi 和 Hadoop?

也不确定 Spark 如何处理以下问题:

  1. 如果数据不适合 RAM,那怎么办?回到基于磁盘的范例(这里不讨论流式用例..)所以不比 Mapreduce 更好吗? Tez 如何让 MR2 变得更好?
  2. Hadoop 3 支持擦除编码以减少数据复制。 Spark 有什么作用?

我不清楚的是过多的重叠选择。例如仅流式传输就有:

  1. Spark 流式传输
  2. 阿帕奇风暴
  3. 阿帕奇萨姆扎
  4. Kafka 流
  5. CEP 商业工具。(ORacle CEP、TIBCO 等)

他们中的许多人都使用类似于 Spark 核心引擎的 DAG,因此很难从另一个中选择一个。

用例:

  1. 应用程序将数据发送到中间件,直到事件结束。事件可以按周期性或由于满足业务条件而结束。
  2. 中间件必须显示用户从其应用实例发送的值的实时相加(简化)。接受中间件是实际值总和的地板,实际值可以更高。 计划在此处使用 Kafka 流来让消费者以最小的延迟添加所有输入消费者发布到缓存中,该缓存由应用轮询以显示当前的附加值。
  3. 中间件记录所有输入
  4. 事件结束后,大数据范例扫描日志数据和数据库记录,通过比较所有 dB 值和日志条目(审核)并将它们与 Kafka 显示的值进行比较来获得准确的计数。此方案计算的值为最终值。

设计选择:

  1. 我喜欢 Kafka,因为它解耦了应用程序中间件,并且是低延迟高吞吐量消息传递。 Streams 代码很容易编写。 是否愿意有人使用 Spark Streams 或 Apache Storm 或 Apache Samza 来反驳争论?
  2. 应用程序本身是 Tomcat 服务器上的 Java 代码,带有用于 iOS/Android 客户端的 REST 端点。由于附加值的显式活跃性,不进行客户端缓存。

【问题讨论】:

  • 超级依赖于你实际上想要做什么......
  • 没有合理的否决票,因为我确实研究过它,但找不到我的问题的明确答案 - 只有一个方面或与供应商相关的 A 比 B 好..
  • 你原来的问题没有。 “Spark vs Hadoop”很容易搜索。您的更新提到了与原始问题无关的 Kafka、Storm、NiFi、Pig,因此应该在一个全新的帖子中提出。无论如何,我已尽力解决您的问题。
  • 投票结束,因为过于广泛。

标签: hadoop apache-spark apache-kafka apache-storm apache-samza


【解决方案1】:

您只是将 Hadoop 与 MapReduce 混淆了。 Hadoop 是 MapReduce、HDFS 和 YARN 的生态系统。

首先,Spark 没有文件系统。在我的书中,这主要是为什么 Hadoop 很好。当然,您可以使用 S3 或许多其他云存储,或 Ceph 或 GlusterFS 等裸机数据存储,但根据我的研究,HDFS 在处理数据方面是迄今为止最快的。

也许您不熟悉 YARN 提供的机架位置概念。如果您将 Spark Standalone 模式与任何未安装在 Spark 执行程序下的文件系统一起使用,那么您的所有数据请求都需要通过网络连接拉取,因此会导致网络饱和并导致瓶颈,无论内存如何。与在 YARN 节点管理器上运行的 Spark 执行器相比,HDFS 数据节点在理想情况下也是节点管理器。

类似的问题 - 人们说 Hive 很慢,SparkSQL 更快。好吧,如果您使用 MapReduce 而不是 Tez 或 Spark 执行模式运行 Hive,那就是真的。

现在,如果您想要流式处理和实时事件,而不是通常与 Hadoop 相关的批处理世界。您可能想研究 SMACK 堆栈。

更新

作为数据科学家的猪,我为什么不使用 Apache NiFi 和 Hadoop

Pig 不可与 NiFi 相比。

您可以使用 NiFi;没有什么能阻止你。它将比 Spark 微批处理更接近实时运行。而且它是与 Kafka 配对的好工具。

过多的重叠选择

是的,你甚至没有把它们都列出来……这取决于你公司的一些大数据架构师来想出一个解决方案。您会发现 Confluent 的供应商支持主要针对 Kafka。我还没有看到他们过多地谈论 Samza。 Hortonworks 将支持 Storm、Nifi 和 Spark,但如果您想要 KSQL 等花哨的功能,它们不会运行最新版本的 Kafka。 Streamsets 是一家类似的公司,它提供与 NiFi 竞争的工具,该工具由具有其他批处理/流 Apache 项目背景的员工组成。

据我所知,Storm 和 Samza 是做同一件事的两种方法。我认为 Flink 比 Storm 对程序员更友好。我没有使用 Samza 的经验,但我与主要使用 Kafka Streams 而不是它的人密切合作。而且 Kafka Streams 不是基于 DAG - 它只是一个高级 Kafka 库,可嵌入到任何 JVM 应用程序中。

如果数据不适合 RAM,那怎么办?

默认情况下,它会溢出到磁盘...如果您不希望磁盘被触摸,Spark 可以配置参数。在这种情况下,你的工作显然会更快地死于 OOM。

Tez 如何让 MR2 变得更好?

Tez 不是 MR。它像 Spark 一样创建更优化的 DAG。 Go read about it.

Hadoop 3 支持擦除编码以减少数据复制。 Spark 是做什么的?

Spark 没有文件系统。我们已经介绍了这一点。擦除编码主要用于静态数据,而不是处理期间的数据。我实际上还不知道 Spark 是否支持 Hadoop 3。

应用程序本身是 Tomcat 服务器上的 Java 代码,带有 iOS/Android 客户端的 REST 端点

就个人而言,我会在这里使用 Kafka Streams,因为 1)您已经在使用 Java 2)它是您代码中的一个独立线程,可让您在没有 Hadoop/YARN 或 Spark 集群的情况下从 Kafka 读取/发布数据。目前尚不清楚您的问题与列出的客户端-服务器架构中的 Hadoop 有什么关系,但您可以随意在 Kafka 主题中添加一条附加线到您选择的数据库/分析引擎。 Kafka Connect 框架has many connectors for you to choose from。

您还可以将 NiFi 用作您的移动 REST API,以仅 ExposeHTTP 并向其发送请求,然后根据数据中的属性路由流。然后,操作并发布到 Kafka 以及其他系统。

【讨论】:

    【解决方案2】:

    Spark 和 Hadoop 在解决 MapReduce 问题方面的工作方式非常相似。

    如果您谈论 HDFS 的观点,Hadoop 是非常相关的。 HDFS 是一种众所周知的大数据存储解决方案。但您的问题是关于 MapReduce。

    如果您谈论的是具有真正良好的内存配置和网络吞吐量的好机器,Spark 是最佳选择。但我们知道这种机器很昂贵,有时您最好的选择是使用 Hadoop 来处理您的数据。 Spark 很棒而且速度很快,但如果你没有一个好的集群,有时你会因为内存问题而发疯,以防内存中容纳太多数据。在这种情况下,Hadoop 会更好。但是这个问题年复一年地不那么重要了。

    所以 hadoop 在这里是对 Spark 的补充,Hadoop 不仅是 MapReduce,Hadoop 还是一个生态系统。 Spark 没有分布式文件系统,要让 Spark 运行良好,您需要一个,Spark 没有资源管理器,Hadoop 称为 Yarn。而集群模式下的 Spark 需要一个资源管理器。

    结论

    Hadoop 作为一个生态系统仍然具有相关性,但我只能说它不再被使用了。

    【讨论】:

    • 正如我上面所说,要在集群模式下运行多个驱动程序,您需要一个资源管理器。独立的像资源管理器一样工作。
    • 你说“Spark 没有资源管理器”,但现在你说它像一个一样工作。你能解释一下为什么它只“像”一个吗?
    猜你喜欢
    • 1970-01-01
    • 2020-09-23
    • 1970-01-01
    • 2016-11-01
    • 2012-02-07
    • 1970-01-01
    • 2023-01-03
    • 2015-12-16
    • 2011-12-04
    相关资源
    最近更新 更多