首页 > 其他 > 详细

spark笔记

时间:2019-02-25 13:07:22      阅读:156      评论:0      收藏:0      [点我收藏+]

spark源码位置:https://github.com/apache/spark

什么是RDD:
1.是一个抽象类不能直接使用,在子类中实现抽象方法是一个抽象类不能直接使用,在子类中实现抽象方法
2.带泛型的,可以支持多种类型:例如可以传入string,person,user
3.弹性分布式数据集,一个不可变的,可并行操作的元素分区集合

RDD都有五个主要特性:
1.-分区列表:一个RDD由多个分区(partition)构成
2.-计算每个分区(partition)的函数
3.-依赖于其他rdd的列表
4.-可选的,键值RDDs的分区器(例如,RDD是哈希分区的)
5.-可选的,计算每个分区的最佳位置列表(例如,位置块是一个HDFS文件)

面试常考:hashset和hashmap怎么实现的?涉及hashcode方法

Spark程序必须做的第一件事是创建一个SparkContext对象,
它告诉Spark如何访问集群。要创建SparkContext前需要先创建一个SparkConf对象。
Spark功能的主要入口点。SparkContext表示与Spark群集的连接,通过SparkContext来创建RDD和广播变量到该集群上


RDD常用算子编程详解
RDD有3类操作:Transformations算子,Action算子,Cache操作(缓存操作)


Spark中的所有转换都是惰性(lazy)的,不会立即计算结果。只记住应用于基本数据集(例如文件)的转换。只有当这个操作需要将结果返回到驱动程序时才会计算转换。这种设计使Spark能够更有效地运行。例如,我们可以意识到通过map创建的数据集将在reduce中使用,并且只将reduce的结果返回给驱动程序,而不是更大的映射数据集

 

在Spark中支持4中运行模式:
1.local模式:开发时使用,运行基本功能,然后提交到YARN,生产上。
2.standalone模式:是Spark自带的,如果一个集群是standalone模式,需要在多台机器上同时部署Spark环境(不经常用)
3.YARN模式:建议生产使用YARN模式,统一使用YARN进行整个集群作业(MR/Spark)的资源调度
4.Mesos模式:国内用的不多

不管用什么模式,Spark应用代码是一样的,只需提交时通过--master参数来指定运行模式


local模式运行
Spark bin目录中的Spark -submit脚本用于在集群上启动应用程序。它可以通过统一的接口使用Spark支持的所有集群管理器,因此您不必专门为每个集群管理器配置应用程序

standalone模式:
在spark-2.3.0-bin-2.6.0-cdh5.7.0目录下conf有slaves.template,将slaves.template改为slaves后添加本机的用户名

启动:$SPARK_HOME/sbin/./start-all.sh
要在spark-env.sh中添加JAVA_HOME,否则会报错
检测:jps:Master和Worker进程,就说明standalone模式安装成功

spark核心概念:https://spark.apache.org/docs/latest/cluster-overview.html-----》Glossary
词汇表

应用:建立在Spark上的用户程序。由集群上的驱动程序和执行程序组成
应用jar:包含用户的Spark应用程序的jar。在某些情况下,用户希望创建一个“uber jar”,其中包含他们的应用程序及其依赖项。用户的jar不包含Hadoop或Spark库,但是,这些库将在运行时添加
驱动程序:运行应用程序的main()函数并创建SparkContext的进程
集群管理器:用于获取集群上的资源的外部服务(例如,独立管理器、Mesos、YARN)
部署模式:区分驱动程序进程在何处运行。在“集群”模式下,框架在集群内部启动驱动程序。在“客户端”模式下,提交者在集群外部启动驱动程序
工作节点:可以在集群中运行应用程序代码的任何节点
执行者:为工作节点上的应用程序启动的进程,它运行任务并将数据保存在它们之间的内存或磁盘存储器中。每个应用程序都有自己的执行器
任务:将被发送给一个执行的工作单元
工作:由多个任务组成的并行计算,这些任务在Spark操作时生成(例如保存、收集);在驱动程序日志中看到这个术语
阶段:每个作业被划分为更小的任务子集,这些任务子集彼此依赖(类似于MapReduce中的map和reduce阶段);在驱动程序日志中看到这个术语

Spark和Hadoop重要概念区分:
Hadoop概念
1.一个MR程序=一个Job
2.一个Job=1个或N个Task(map/reduce)
3.1个task对应一个进程
4.task运行时开启进程,task执行完毕后销毁进程,对应多个task来说开销比较大的(即使你能通过JVM共享)
spark概念
1.一个应用=Driver(main方法中创建SparkContext)+Executors
2.一个应用=0个到多个Job
3.一个Job=一个Acton
4.一个Job=1到N个Stage
5.一个Stage=1到N个task
6.一个task对应一个线程,多个task可以以并行的方式运行在一个Excutors进程中

Spark Cache(缓存):
cache是一个lazy,遇到action才会执行
cache好处是:如果一个RDD在后续的计算中可能被使用到建议使用cache。缓存是通过BlockManager来完成

persist()或cache()区别:
cache底层调用的是persist方法,传入的参数是:StorageLevel.MEMORY_ONLY,所以,cache=persist,cache没有参数

Spark窄依赖和宽依赖:
窄依赖定义:一个父RDD的分区(partition)最多被子RDD的某个分区(partition)使用一次,流水线作业。包含的算子有:filter map flatmap mapPartitions
宽依赖定义:一个父RDD的分区(partition)会被子RDD的分区(partition)使用多次,有shuffle。包含的算子有:reduceByKey grupByKey combineByKey

historyserver:
$SPARK_HOME/conf/spark-default.conf
spark.eventLog.enabled true
spark.eventLog.dir hdfs://namenode:端口号

Flume是一个分布式日志采集传输系统:
event(事件)是Flume的基本数据单位由消息头和消息体组成。Flume运行的核心是Agent


Spark SQL pyspark不能操作DataSet

Hive:on MapReducce
SQL翻译成MapReducce提交到Hadoop Cluster运行

metastores相当于一个表的元数据信息

spark核心版本出现核心功能,例如:spark1.6出现Dataset,1.3出现DataFrames,Dateset不支持python原因是python是动态语言
DataFrames:是以列(列名,列类型,列值)的形式构成分布式数据集

面试题:RDD与DataFrame的区别:

Spark Streaming:
是spark streaming是spark API的扩展,streaming是什么?IO操作有输入有输出。输入:数据源头(例如:Kafka、Flume、Kinesis或TCP套接字等多个源获取);输出:数据的流向(例如:文件系统、数据库)。

问:安装完spark后能否直接使用spark streaming?答:不需要搭建完spark后可直接使用

常用实时流处理框架
spark streaming:不是真正的实时流处理框架,而是一个mini bach操作,使用spark栈一站式批处理解决问题。底层以批处理为主,以流处理为辅。不需要搭建集群
storm:真正的实时流处理 Tuple 用java写的需要搭建集群
flink:与spark streaming相反
kafka storm:国内用的很少

SparkStreaming执行原理:Spark流接收实时输入数据流,并将数据流拆分为很小的数据批次,然后数据批次由Spark引擎处理,生成最终的批次结果流。

sparkCore的核心抽象是RDD,对应的5大特性,对应源码中的5个方法是什么?
sparkstreaming的核心抽象是DStream,DStream是连续的数据流

面试点:sparkcore的存储策略和sparkstreaming的存储策略区别?

Azkaban(工作流调度器):
Spark SQL/Hadoop用于做离线统计处理
有一个典型的ETL操作:该操作步骤
1.数据抽取:可以使用Sqoop把RDBMS关系型数据库中的数据抽取到Hadoop,如果数据是在其他平台以文本的方式存储可以使用Flume进行日志,文本数据的采集到Hadoop
2.数据处理,可以采用Hive/MapReducce/Spark/...不同的框架实现
3.统计结果入库:
a)数据存放到HDFS(Hive/Spark SQL表/文件)上,启动一个server:在Hive里面叫Server2,在Spark里面叫ThriftServer,通过JDBC方式操作统计结果。
b)使用sqoop框架把结果导出RDBMS中

简单的任务调度:直接使用linux的crontab来定义,crontab+shell,优点是简单,易用。缺点是维护繁琐,依赖关系强

Azkaban架构
关系型数据库(MySQL),AzkabanWeb服务(server),Azkaban执行服务(ExccutorServer)

Azkaban源码编译:
1.去github上下载源码包
2../gradlew build installDist
3.先下载gradle-4.1-all.zip,然后整合到azkaban源码中,避免在编译过程中去网络下载
4.编译成功后,去对应的目录下找对应模式的安装包即可

 

spark笔记

原文:https://www.cnblogs.com/fenghuoliancheng/p/10430246.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!