1.spark生态:
Spark Core
spark 的核心计算 ,用于通用分布式数据处理的引擎。不依赖于任何其他组件,可以运行在任何商用服务器集群上。实现饿了 Spark 的基本功能,包含任务调度、内存管理、错误恢复,与存储系统交互等模块。还包含了对弹性分布式数据集(Resilient Distributed Dataset,简称RDD)的API 定义。
Spark SQL
是Spark用来操作结构化数据的程序包,可以使用SQL或者HQL来对历史数据做交互式查询(即席查询:用户根据自己的需求 自定义查询)。Spark SQL 支持多种数据源,比如Hive表,Parquet 以及 JSON 等。
Spark Streaming
是Spark提供的对实时数据进行流式计算的组件,基于Spark的微批处理引擎,支持各种各样数据源的导入。提供了用来操作数据流的API,并且与Spark Core 中的RDD API 高度对应,唯一依赖的是 Spark Core引擎。
Spark MLib
构建在 Spark 之上的提供常见的机器学习(ML)功能的程序库,支持一系列数据挖掘算法。包括分类、回归、聚类、协同过滤,还提供了模型评估、数据导入等额外的支持功能。
Spark GraphX
图计算(关注事物本身而且关注事物之间的联系)
2. 简述一下实时计算框架Storm、Spark Streaming和flink的区别?
共同点:
① 都是开源的分布式系统,具有低延迟、可扩展和容错性诸多优点。
② 允许在运行数据流代码时,将任务分配到一列具有容错能力的计算机并行运行。
③ 都提供了简单的API来简化底层实现的复杂程度。
不同点:
① Apache Storm中,先要设计一个用于实时计算的图状结构(topology,拓扑)。这个拓扑将会被提交到集群,由集群中的主控节点(master node)分发代码,将任务分配给工作节点(worker node)执行。一个拓扑中包括 spout 和 bolt 两种角色,其中 spout 发送消息,负责将数据流以 tuple(元组)的形式发送出去;而 bolt 则负责转换这些数据流,在 bolt 中可以完成计算、过滤等操作,bolt 自身也可以随机将数据发送给其他 bolt。由 spout 发射出的 tuple 是不可变数组,对应着固定的键值对。
② Spark Streaming 是核心Spark API 的扩展,不会像 Storm那样一次一个地处理数据流,而是在处理前按时间间隔预先将其切分为一段一段的批处理作业。Spark 针对持续性数据流的抽象(DStream,DiscretizedStream),一个 DStream 是一个微批处理(micro-batching)的RDD(弹性分布式数据集);而 RDD 则是一种分布式数据集,能够以两种方式并行运作,分别是任意函数和滑动窗口数据的转换。相对于 Flink,Spark将内存完全交给应用层,更容易出现 OOM(Out Of Memory)内存溢出。
③ Apache Flink 是一个针对流数据和批数据的分布式处理引擎。主要是由 Java 代码实现。对 Flink 而言,其所要处理的主要场景就是流数据,批数据知识流数据的一个极限特例而已。再换句话说,Flink 会把所有任务当成流来处理,这也是其最大的特点。Flink 可以支持本地的快速迭代,以及一些环形的迭代任务。并且 Flink 可以定制化内存管理。相对于 Spark ,Flink 并没有将内存完全交给应用层。就框架本身与应用场景来说,Flink 更相似于 Storm。
3.spark 的资源调度
Local(本地模式):运行在一台计算机上的模式,通常就是用于在本机上练手和测试。
Standalone模式:构建一个由Master+Slave 构成的 Spark 集群,Spark 运行在集群中。
yarn 模式:Spark客户端直接连接Yarn,不需要额外构建Spark集群。
mesos 模式:Spark 客户端直接连接 Mesos;不需要额外构建 Spark 集群。 国内应用比较少,更多的是运用 yarn 调度。
4. spark 的特点?
运行快:基于内存,Spark 实现了高效的DAG执行引擎,可以通过基于内存来高效处理数据流,计算的中间结果是存在于内存中的。
易于使用:Spark支持Java、Python和Scala的API,还支持超过80种高级算法,使用户可以快速构建不同的应用。而Spark支持交互式的Python和Scala的Shell,可以非常方便地在这些Shell中使用Spark集群来验证解决问题的方法。
通用:Spark提供了统一的解决方案,可用于批处理,交互式查询,实时流处理,机器学习和图计算,都可以在同一个应用中无缝使用
兼容性:Spark可以很方便的与其他的开源产品进行融合。
5 .spark 能代替hadoop 吗?
不能,仅仅是MapReduce的替代方案,不能进行分布式数据的存储,即不能替代Hadoop中的HDFS。
Spark 只是分布式计算平台,而Hadoop已经是分布式计算、存储、管理的生态系统。
在Hadoop架构中:HDFS(存储系统)、MapReduce(计算框架)、Hive(查询框架)、HBase(实时、准实时)、YARN(资源调度)
Spark(是一种新型大数据计算框架,可基于Hadoop上存储的大数据进行计算。)
Spark只是一个专门用来对那些分布式存储的大数据进行处理的工具,它并不会进行分布式数据的存储。
6. spark Rdd 的缓存?
cache和persist 内存中缓存 ,内部的优化机制。当Rdd 重复被使用了,不需要在重新计算,直接从内存中获取使用
RDD通过 persist或cache 方法可以将前面的计算结果缓存,默认情况下 persist( ) 会把数据以序列化的形式缓存在 JVM 的堆(Heap)空间中。
缓存有可能丢失,或者存储于内存的数据由于内存不足而被删除,RDD的缓存容错机制保证了即使缓存丢失也能保证计算的正确执行。通过基于 RDD 的一系列转换,丢失的数据会被重算,由于 RDD 的各个 Partition 是相对独立的,因此只需要计算丢失的部分即可,并不需要重算全部 Partition。
7 .spark 的提交方式有两种?
client:
Driver 程序运行在客户端,适用于交互、调试,希望立即看到 app

本文深入解析Spark生态,涵盖Spark Core、Spark SQL、Spark Streaming、Spark MLlib和Spark GraphX等关键组件,对比实时计算框架Storm、Flink与Spark Streaming的区别。探讨Spark资源调度、特性优势及其实现大数据处理的原理,分析Spark与Hadoop的关系。此外,文章还详细介绍了RDD缓存机制、提交方式、容错机制、数据倾斜原因及解决策略,以及Executor内存分配原则。通过对比Rdd与传统数据结构,阐述其在并行计算中的独特作用。

738

被折叠的 条评论
为什么被折叠?



