大数据特点:数据量大、数据类型繁多、处理速度快、价值密度低。
分布式存储:有HDFS、GFS、NoSQL 分布式处理:MapReduce、Spark、Flink
大数据计算模式:批处理(大规模数据的批量处理)、流、图、查询分析计算
Hadoop:分布式计算框架(Map Reduce)、分布式文件系统(HDFS)、资源调度,管理框架(YARN)
YRAN就是在一个集群上部署一个统一的资源调度管理框架YARN,在YARN之上可以部署其他各种计算框架
Spark组成:底层:Spark Core主要有Spark SQL,Spark Streaming,MLlib,GraphX
Hadoop存在一些缺点:表达能力有限、磁盘IO开销大、延迟高
Scala具备强大的并发性,支持函数式编程,可以更好地支持分布式系统,兼容Java,可以与Java互操作,代码简洁优雅,支持高效的交互式编程。
Scala是一门类Java的多范式语言,它整合了面向对象编程和函数式编程的最佳特性。
运行于Java虚拟机(JVM)之上,是一门纯粹的面向对象语言,也是一门函数式语言
富包装类:基本类型都有一个对应的富包装类,这些类位于包scala.runtime中
java.io.PrintWriter实现把数据写入到文件,PrintWriter类提供了print 和println两个写
可以使用scala.io.Source的getLines方法实现对文件中所有行的读取
异常处理: Scala仍使用try-catch结构来捕获异常
Breakable放在循环内:终止当次循环,放在循环外:终止循环。
元组是对多个不同类型对象的一种简单封装
Scala提供了一套丰富的容器(collection)库,包括序列(Sequence)、集合、映射(Map)
三个包来组织容器类scala.collection、s.c.Mutable,s.c.immutable
序列(Sequence):元素可以按照特定的顺序访问的容器。
序列容器的根是collection.Seq特质。其具有两个子特质 LinearSeq和IndexedSeq
LinearSeq的常用序列有列表(List)和队列(Queue)、
IndexedSeq的常用序列有可变数组(ArrayBuffer)和向量(Vector)
Vetor:可以实现所有访问操作都是常数时间。
Range类:一种特殊的、带索引的不可变数字等差序列。其包含的值为从给定起点按一定步长增长(减小)到指定终点的所有数值、Range可以支持创建不同数据类型的数值序列如:val 变量=new Range(1,5,步长) until,by也可以
集合(Set)不重复元素的容器(collection)集合包括可变集和不可变集,分别位于scala.collection.mutable和scala.collection.immutable包,缺省情况下创建的是不可变集
映射(Map)一系列键值对的容器。键是唯一的,但值不一定是唯一的。可以根据键来对值进行快速的检索-->同集合的S.C.M AND S.C.I
迭代器(Iterator)不是一个容器,而是提供了按顺序访问容器元素的数据结构
迭代器包含两个基本操作:next和hasNext。next可以返回迭代器的下一个元素,hasNext用于检测是否还有下一个元素如:
.Spark主要特点运行速度快、容易使用、通用性、模块化、运行模式多样、支持各种数据源;Spark可以部署在资源管理器YARN之上,提供一站式的大数据解决方案;Spark所提供的生态系统足以应对上述三种场景,即同时支持批处理、交互式查询和流数据处理
RDD:弹性分布式数据集,分布式内存,提供了一种高度受限的共享内存模型
DAG:是Directed Acyclic Graph(有向无环图)的简称,反映RDD之间的依赖关系
Executor:是运行在工作节点(WorkerNode)的一个进程,负责运行Task
应用:用户编写的Spark应用程序 任务:运行在Executor上的工作单元
作业( Job ):一个作业包含多个RDD及作用于相应RDD上的各种操作
阶段( Stage ):是作业的基本调度单位,一个作业会分为多组任务,每组任务被称为阶段,或者也被称为任务集合,代表了一组关联的、相互之间没有Shuffle依赖关系的任务组成的任务集
Spark部署模式包括:Local模式:单机模式 YARN模式:使用YARN作为集群管理器
Standalone模式:使用Spark自带的简单集群管理 YARN模式:使用YARN作集Mesos模式:使用Mesos作为集群管理器Kubernetes模式:搭建在Kubernetes集群
Spark和Hadoop的交互:
启动HDFS:./sbin/start-dfs.sh、关闭HDFS:./sbin/stop-dfs.sh
Spark的运行模式取决于传递给SparkContext的Master URL的值
Spark采用独立集群模式,,默认端口是7077 采用Mesos集群模式,,默认接口是5050
--master:这个参数表示当前的Spark Shell要连接到哪个master,如果是local[*],就是使用本地模式启动spark-shell
--jars: 这个参数用于把相关的JAR包添加到CLASSPATH中
安装编译打包工具:sbt、maven、编写Spark应用程序代码、使用sbt对Scala 程序进行编译打包、通过spark-submit运行程序
RDD创建:从文件系统中加载数据创建RDD从分布式文件系统HDFS中加载数据:val RDD名 = sc.textFile("文件路径")通过并行集合(数组)创建RDD
可以调用SparkContext的parallelize方法,在Driver中一个已经存在的集合(数组/列表)上创建:val rdd = sc.parallelize(array/list)
RDD操作:
转换操作: 每一次转换操作都会产生不同的RDD,供给下一个“转换”使用
常用的RDD转换操作API:
filter(func): 筛选出满足函数func的元素,并返回一个新的数据集
map(func): 将每个元素传递到函数func中,并将结果返回为一个新的数据集
flatMap(func): 与map()相似,但每个输入元素都可以映射到0或多个输出结果
groupByKey():应用于(K,V)键值对的数据集时,返回一个新的(K, Iterable)形式的数据集
reduceByKey(func): 应用于(K,V)键值对的数据集时,返回一个新的(K, V)形式的数据集,其中每个值是将每个key传递到函数func中进行聚合后的结果
“惰性机制”是指,整个转换过程只是记录了转换的轨迹,并不会发生真正的计算,只有遇到行动操作时,才会触发“从头到尾”的真正的计算
RDD采用惰性求值的机制,每次遇到行动操作,都会从头开始执行计算。每次调用行动操作,都会触发一次从头开始的计算。这对于迭代计算而言,代价是很大的,迭代计算经常需要多次重复使用同一组数据
通过持久化(缓存)机制避免这种重复计算的开销使用persist()方法对一个RDD标记为持久化
MEMORY_ONLY:表示将RDD作为反序列化的对象存储于JVM中,如果内存不足,就要按照LRU原则替换缓存中的内容
MEMORY_AND_DISK:表示将RDD作为反序列化的对象存储在JVM中,如果内存不足,超出的分区将会被存放在硬盘上
一般而言,使用cache()方法时,会调用persist(MEMORY_ONLY),可以使用unpersist()方法手动地把持久化的RDD从缓存中移除
RDD是弹性分布式数据集,通常RDD很大,会被分成很多个分区,分别保存在不同的节点上 分区的作用:增加并行度、减少通信开销
RDD分区的一个原则是使得分区的个数尽量等于集群中的CPU核心(core)数目
对于不同的Spark部署模式而言都可以通过设置spark.default.parallelism这个参数的值,来配置默认的分区数目
创建RDD时手动指定分区个数调用textFile()和parallelize()方法的时候手动指定分区个数即可,如下:sc.textFile(路径,分区个数)
直接调用 repartition 方法可以重新设置分区个数 自定义分区方法
常用的键值对RDD转换操作:reduceByKey(func),groupByKey(),keys,values,sortByKey(),mapValues(func),join,combineByKey
Spark SQL架构:Spark SQL增加了DataFrame(即带有Schema信息的RDD),使用户可以在Spark SQL中执行SQL语句,数据既可以来自RDD,也可以是Hive、HDFS、Cassandra等外部数据源,还可以是JSON格式的数据
Spark SQL目前支持Scala、Java、Python三种语言
Spark SQL的特点如下:容易整合(集成)、统一的数据访问方式、兼容Hive、标准的数据库连接
结构化数据DataFrame:DataFrame是一种以RDD为基础的分布式数据集,提供了详细的结构信息
DataFrame的突出优点:表达能力强、简洁、易组合、风格一致。
DataFrame的创建和保存:自己了解……
DataFrame的基本操作:(大题)
DSL语法风格: DSL语法类似于RDD中的操作,允许开发者通过调用方法对DataFrame内部的数据进行分析。
DataFrame创建好以后,可以执行一些常用的DataFrame操作,包括printSchema()、show()、select()、filter()、groupBy()、sort()、withColumn()和drop()等。
SQL语法风格: 使用SQL语句操作DataFrame、 SQL函数
使用Spark SQL读写数据库:基本不会考,了解就可以了