首页 > 编程知识 正文

hadoop与nginx的区别,大数据spark和hadoop

时间:2023-05-06 17:12:10 阅读:163907 作者:2226

一、hadoop和Storm应该选哪个?

为了区分hadoop和Storm,本节回答以下问题。

1.hadoop、Storm分别是什么运算

2.Storm为什么被称为流媒体计算系统

3.hadoop适合什么场景,什么情况下使用hadoop

4 .什么是吞吐量

首先整体认识: Hadoop是磁盘级计算,在进行计算时,数据位于磁盘上,需要读写磁盘; Storm是内存级计算,数据通过网络直接导入内存。 读/写存储器比读/写磁盘快n位数。 根据Harvard CS61课件,磁盘访问延迟约为存储器访问延迟的75000倍。 所以Storm更快。

注释:

1 .延迟是指从数据生成到运算生成结果的时间,“快”应该主要是指。

2 .吞吐量是指系统每单位时间处理的数据量。

如果计算模型适合流式传输,则storm的网络直传、内存计算一定比hadoop通过hdfs传输的速度慢,则storm的流式传输将减少批处理数据收集时间所以从延迟来看,storm比hadoop快。

原理上:

由于Hadoop M/R是基于HDFS的,所以需要输入数据的提取、中间数据文件的生成、排序、数据压缩、多份拷贝等,效率很低。

Storm基于名为ZeroMQ的高性能消息通信库,不会使数据持久化。

为什么storm比hadoop快,列举一下应用场景吧

典型的方案是,数千名日志制作者需要生成日志文件,进行几个ETL操作并保存在一个数据库中。

假设使用hadoop时,需要暂时保存在hdfs中,按照每分钟切文件的粒度进行计算。 (这个粒度已经变得非常细了,如果再小的话,hdfs上就会堆积如山的小文件。 )假设hadoop开始计算时,一分钟后再开始调度任务需要一分钟,然后开始工作。 就算机器很多,几张牌也要等结束再写。

另一方面,流计算在数据生成时,有一直监视日志的生成的程序,生成1行后通过1个传输系统发送到流系统,由流系统直接处理,处理结束后直接写入数据库。 各数据从生成到写入数据库,只要资源充足,可以在毫秒级别上完成。

让我告诉你另一个故事:

对于大文件wordcount,将其放入storm并进行流式传输,在处理完所有现有数据后再将结果输出到storm。 此时,请加快与hadoop的比较。 此时,实际比较的不是延迟,而是吞吐量。

主要方面: Hadoop使用磁盘作为中间交换介质,storm中的数据始终在内存中流动。

两者面对的领域也不完全相同,一个是批量处理,一个是基于任务调度,另一个是实时处理,基于流。

以水为例,Hadoop可以视为纯水,满桶搬运; Storm是自来水管,事先连接好,打开水龙头,水就会不断地流出来。

Storm的首席工程师Nathan Marz表示,Storm可以在计算机群集中轻松创建和扩展复杂的实时计算。 Storm是一个实时过程,而Hadoop则是一个批处理过程。 Storm确保所有消息都将被处理,并且很快——将能够在小集群中每秒处理数百万条消息。 更棒的是,你可以使用任何编程语言进行开发。

Storm的主要特征如下。

1 .简单的编程模型。 与MapReduce类似,Storm可以降低并行批处理的复杂性,从而降低实时处理的复杂性。

2 .可以使用各种编程语言。 你可以在Storm上使用各种编程语言。 缺省情况下,支持Clojure、Java、Ruby和Python。 要增加对其他语言的支持,只需安装简单的Storm通信协议即可。

3 .承受能力。 Storm管理工作进程和节点故障。

4 .水平扩张。 计算在多个线程、进程和服务器之间并行进行。

5 .可靠的消息处理。 Storm确保每个消息至少完全处理一次。 如果任务失败,它负责从消息源重试消息。

6 .快速。 系统的设计保证消息能够快速处理,并使用MQ作为其基础消息队列。

7 .本地模式。 Storm具有“本地模式”,在处理过程中可以完全模拟Storm群集。 这样可以快速进行开发和单元测试。

在消耗资源相同的情况下,storm的延迟通常比mapreduce低。 但是,吞吐量也比mapreduce低。 storm是典型的流计算系统,mapreduce是典型的批处理系统。 以下对流计算和批处理系统流程

这个数据处理过程大致分为三个阶段。

1 .数据收集和准备

2 .数据计算(涉及计算中的中间记忆),标题中的“由那些方面决定”应主要指这一阶段的处理方式。

3 .显示数据结果(反馈) )。

1 )数据采集阶段,现有的典型处理策略(数据生成系统一般来自页面打点和解析数据库的log,流计算来自数据采集中的消息队列)如kafaka、metaQ、timetunle等。 批处理系统通常向HDFS等分布式文件系统收集数据。 当然也有人使用消息队列。 消息队列和文件系统暂时称为预处理存储。 两者在延迟和吞咽上没有太大区别,接下来

预处理存储进入到数据计算阶段有很大的区别,流计算一般在实时的读取消息队列进入流计算系统(storm)的数据进行运算,批处理一系统一般会攒一大批后批量导入到计算系统(hadoop),这里就有了延时的区别。

2)数据计算阶段,流计算系统(storm)的延时低主要有一下几个方面(针对题主的问题) 
A: storm 进程是常驻的,有数据就可以进行实时的处理 
mapreduce 数据攒一批后由作业管理系统启动任务,Jobtracker计算任务分配,tasktacker启动相关的运算进程 
B: stom每个计算单元之间数据之间通过网络(zeromq)直接传输。 
mapreduce map任务运算的结果要写入到HDFS,在于reduce任务通过网络拖过去运算。相对来说多了磁盘读写,比较慢 
C: 对于复杂运算 
storm的运算模型直接支持DAG(有向无环图) 
mapreduce 需要肯多个MR过程组成,有些map操作没有意义的

3)数据结果展现 
流计算一般运算结果直接反馈到最终结果集中(展示页面,数据库,搜索引擎的索引)。而mapreduce一般需要整个运算结束后将结果批量导入到结果集中。

实际流计算和批处理系统没有本质的区别,像storm的trident也有批概念,而mapreduce可以将每次运算的数据集缩小(比如几分钟启动一次),facebook的puma就是基于hadoop做的流计算系统。

二、高性能并行计算引擎Storm和Spark比较
Spark基于这样的理念,当数据庞大时,把计算过程传递给数据要比把数据传递给计算过程要更富效率。每个节点存储(或缓存)它的数据集,然后任务被提交给节点。

所以这是把过程传递给数据。这和Hadoop map/reduce非常相似,除了积极使用内存来避免I/O操作,以使得迭代算法(前一步计算输出是下一步计算的输入)性能更高。

Shark只是一个基于Spark的查询引擎(支持ad-hoc临时性的分析查询)

而Storm的架构和Spark截然相反。Storm是一个分布式流计算引擎。每个节点实现一个基本的计算过程,而数据项在互相连接的网络节点中流进流出。和Spark相反,这个是把数据传递给过程。

两个框架都用于处理大量数据的并行计算。

Storm在动态处理大量生成的“小数据块”上要更好(比如在Twitter数据流上实时计算一些汇聚功能或分析)。

Spark工作于现有的数据全集(如Hadoop数据)已经被导入Spark集群,Spark基于in-memory管理可以进行快讯扫描,并最小化迭代算法的全局I/O操作。

不过Spark流模块(Streaming Module)倒是和Storm相类似(都是流计算引擎),尽管并非完全一样。

Spark流模块先汇聚批量数据然后进行数据块分发(视作不可变数据进行处理),而Storm是只要接收到数据就实时处理并分发。

不确定哪种方式在数据吞吐量上要具优势,不过Storm计算时间延迟要小。

总结下,Spark和Storm设计相反,而Spark Steaming才和Storm类似,前者有数据平滑窗口(sliding window),而后者需要自己去维护这个窗口。
--------------------- 
作者:longshilin.com 
来源:CSDN 
原文:https://blog.csdn.net/Coder__CS/article/details/78868346 
版权声明:本文为博主原创文章,转载请附上博文链接!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。