Spark
Spark具备哪些优势
1)高效性:内存计算下,Spark比MapReduce快100倍。Spark使用最先进的DAG(有向无环图)调度程序,查询优化程序和物理执行引擎,实现批量和流式数据的高性能
2)易用性:Spark支持Java,Python和Scala的API,还支持超过八十种算法,使用户可以快速构建多样的应用
3)通用性:Spark提供了统一的解决方案。Spark可以用于批处理,交互式查询(Spark SQL),实时流处理(Spark Streaming),机器学习(Spark MLlib)和图计算(GraphX)。这些不同类型的处理都可以在同一个应用中无缝使用,对于企业应用来说,就可以使用一个平台来进行不同的工程实现,减少人力开发和平台部署成本
4)兼容性:Spark能和很多开源工程兼容使用,如Spark可以使用hadoop的YARN和Apache Mesos作为他的资源管理器和调度器,并且Spark可以读取多种数据源,如HDFS,Hbase,Mysql等,对于任何一家部署好hadoop的企业来说在不需要任何数据迁移和处理的情况下,就可以快速用上Spaek强大的数据处理能力和计算能力
Spark组件
1)Spark core:是其它组件的基础,spark的内核,主要包含:有向循环图、RDD、Lingage、Cache、broadcast等,并封装了底层通讯框架,是Spark的基础。
2)SparkStreaming:是一个对实时数据流进行高通量、容错处理的流式处理系统,可以对多种数据源(如Kafka、Flume、Twitter、Zero和TCP 套接字)进行类似Map、Reduce和Join等复杂操作,将流式计算分解成一系列短小的批处理作业。
3)Spark sql:Shark是SparkSQL的前身,Spark SQL的一个重要特点是其能够统一处理关系表和RDD,使得开发人员可以轻松地使用SQL命令进行外部查询,同时进行更复杂的数据分析。
4)SparkR:是一个R语言包,它提供了轻量级的方式使得可以在R语言中使用Apache Spark。在Spark 1.4中,SparkR实现了分布式的dataframe,支持类似查询、过滤以及聚合的操作,但是这个可以操作大规模的数据集。
5)MLBase是Spark生态圈的一部分专注于机器学习,让机器学习的门槛更低,让一些可能并不了解机器学习的用户也能方便地使用MLbase。MLBase分为四部分:MLlib、MLI、ML Optimizer和MLRuntime。
6)GraphX用于图和图并行计算。
面试题
1,spark支持哪几种编程语言?
Spark同时支持Scala,Python,Java,R四种应用程序API编码接口和编程方式,考虑到大数据处理特性,一般优先使用Scala经行编程
2,spark中worker的主要作用是什么?
主要功能:管理当前节点内存和CPU的使用状况,接收master分配过来的资源指令,通过ExecutorRunner启动程序分配任务,worker就类似于包工头,管理分配新进程,做计算的服务,相当于process
注意::
1)worker不会汇报当前信息给master,worker发送给master只有workid,它不会发送资源信息给mater。
2)worker不会运行代码,具体运行的是Executor,worker可以运行具体appliaction写的业务逻辑代码,操作代码的节点,它不会运行程序的代码的。
3,spark Driver的功能是什么?
1)一个spark作业运行时包括一个Driver进程,也就是作业的主进程,具有main,持有SparkContext的实例,是程序的入口点
2)功能:负责向集群申请资源,向master注册信息,负责作业的调度,负责作业的解析,生成Stage并调度Task到Executeror,包括DAGScheduler,TaskScheduler
4,spark容错机制
每一个RDD都包括了他是怎样由其它RDD变换过来的以及怎样重建某一块数据的信息。因此RDD的容错机制又称“血统(Lineage)”容错)记录下来,以便恢复丢失的分区。
5,spark和mapreduc,优势,区别
1)两者都是用mr模型来进行并行计算,但机制不同。hadoop的一个作业称为job,job里面分为map task和reduce task,每个task都是在自己的进程中运行的,当task结束时,进程也会结束。
Spark用户提交的任务称为application,一个application中存在多个job,每触发一次action操作就会产生一个job。这些job可以行或串行执行,每个job中有多个stage,stage是shuffle过程中DAGSchaduler通过RDD之间的依赖关系划分job而来的,每个stage里面有多个task,组成taskset,由TaskSchaduler分发到各个executor中执行,executor的生命周期是和application一样的,即使没有job运行也是存在的,所以task可以快速启动读取内存中的数据并进行计算;
2)hadoop的job只有map和reduce操作,表达能力比较欠缺而且在mr过程中会重复的读写hdfs,造成大量的io操作,多个job需要自己管理关系;而spark则提供了丰富的算子,可以实现常用的各种数据处理操作。
3)spark的迭代计算都是在内存中进行的,API中提供了大量的RDD操作如join,groupby等,而且通过DAG图可以实现良好的容错。
6,Spark有几种部署模式
local(本地):常用于本地测试,还分为local单线程,local-cluster多线程
standalone(集群模式):典型Master/Slave模式,支持Zookeeper来实现HA(高可用)
on yarn(集群模式):运行在yarn资源管理器框架上,由yarn负责资源管理,saprk负责任务调度和计算
on mesos(集群模式):运行在mesos。。。。。。。
on cloud(集群模式)
7,RDD的优势
1)高容错机制
RDD没有checkpoint的开销,想还原一个RDD只需要根据血缘关系就可以,而且基本不涉及分区的重计算,除非分区的数据丢失了,重算过程在不同节点并行进行,不需要将整个系统回滚。
2)数据本地性
任务能够根据数据本地性(data locality)被分配,优先将任务分配到数据存储的节点,从而提高性能
3)优雅降级
读取数据最快的方式当然时从内存中读取,但当内存不足的时候,RDD会将大分区溢出存储到磁盘,也能继续提供计算的能力
8,DataFrame特性
1)大数据量级:支持从KB到PB级的数据量
2)多种数据源:支持多种数据格式和多种存储系统
3)代码优化:通过Catalyst优化器进行先进的优化生成代码
4)通用性:通过Spark无缝集成主流大数据工具与基础设施
5)多种开发语言:API支持Python、Java、Scala和R语言。
9,RDD中有几种依赖?什么作用
有窄依赖(narrowdependencies)和宽依赖(widedependencies)两种。窄依赖是指父RDD的每个分区都只被子RDD的一个分区所使用。相应的,那么宽依赖就是指父RDD的分区被多个子RDD的分区所依赖。例如,map就是一种窄依赖,而join则会导致宽依赖,主要是看有没有shuffle操作。
宽窄依赖的作用是用来划分stage。
10,列举Spark的transformation算子
map,flatMap,reduceByKey,combineByKey,filter
11,列举Spark的action算子