Hadoop&的相关性Spark存在时的流解决方案

时间:2018-01-04 22:26:32

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

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

我意识到Spark对RAM有更高的需求但这只是一次性的CAPEX成本,而这本身就能收回成本吗?

一般情况下,除非有遗留项目,否则自从Spark可用以后,为什么要选择Hadoop?

会欣赏现实世界中两者的比较,陷阱等吗?

或者Hadoop可以解决但Spark无法解决的用例吗?

------下面评论实际问题----

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

比较是:

  1. Mapreduce与Spark代码
  2. SparkSQL vs Hive
  3. 人们也提到猪,但并不是很多人都想学习自定义查询。如果我不得不使用Pig作为数据科学家,我为什么不用Hadoop使用Apache NiFi?
  4. 也不确定Spark如何处理以下内容:

    1. 如果数据不适合RAM那么什么?回到基于磁盘的范例(这里不谈流媒体用例..)所以没有比Mapreduce更好的了吗? Tez如何让MR2更好?
    2. Hadoop 3支持Erasure编码以减少数据复制。 Spark做什么?
    3. 我不清楚的是过多的重叠选择。对于例如单独流媒体有:

      1. Spark streaming
      2. Apache风暴
      3. Apache Samza
      4. Kafka溪流
      5. CEP商业工具(ORacle CEP,TIBCO等)
      6. 很多人使用类似于Spark核心引擎的DAG,因此很难从另一个中选择一个。

        用例:

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

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

2 个答案:

答案 0 :(得分:2)

你把Hadoop与MapReduce混淆了。 Hadoop是MapReduce,HDFS和YARN的生态系统。

首先,Spark没有文件系统。这就是为什么Hadoop在我的书中很好的原因。当然,您可以使用S3或许多其他云存储,或者像Ceph或GlusterFS这样的裸机数据存储,但根据我的研究,HDFS是处理数据时最快的。

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

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

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

更新

  

猪作为数据科学家为什么我不会使用Hadoop说Apache NiFi

与NiFi不相上下。

你可以使用NiFi;没有什么能阻止你。它比Spark微批次更接近实时。这是与卡夫卡配对的好工具。

  

过多的重叠选择

是的,你甚至都没有列出所有内容......贵公司的一些BigData架构师需要提出解决方案。您会发现Confluent的供应商支持主要是针对Kafka。我还没有看到他们谈论Samza。 Hortonworks将支持Storm,Nifi和Spark,但如果您想要像KSQL这样的花哨功能,他们不会运行最新版本的Kafka。 Streamsets是一家类似的公司,提供与NiFi竞争的工具,该工具由具有其他批处理/流式Apache项目背景的员工组成。

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

  

如果数据不适合RAM那么什么?

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

  

Tez如何让MR2更好?

Tez不是MR。它创建了更多优化的DAG,如Spark。 Go read about it

  

Hadoop 3支持Erasure编码以减少数据复制。 Spark做什么?

Spark没有文件系统。我们已经涵盖了这个。擦除编码主要用于静止数据,而不是处理期间。我实际上不知道Spark是否支持Hadoop 3。

  

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

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

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

答案 1 :(得分:0)

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

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

如果您谈论具有真正良好的内存配置和网络吞吐量的好机器,Spark是最佳选择。但我们知道那种机器价格昂贵,有时您最好选择使用Hadoop处理您的数据。 Spark是伟大而快速的,但如果你没有一个好的集群,如果你的内存中有太多的数据,你有时会对内存问题感到疯狂。在这种情况下Hadoop可以更好。但年复一年的这个问题不太重要。

所以hadoop在这里补充Spark,Hadoop不仅是MapReduce,Hadoop也是一个生态系统。 Spark没有分布式文件系统,Spark很适合你需要一个,Spark没有资源管理器,Hadoop称之为Yarn。集群模式下的Spark需要资源管理器。

结论

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