拿下Scala还不够!大数据基本知识详解!!期末考试背完这些就不会挂科!!!

大数据特点:数据量大、数据类型繁多、处理速度快、价值密度低。

分布式存储:有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.collections.c.Mutables.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应用程序代码、使用sbtScala 程序进行编译打包、通过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()keysvaluessortByKey()mapValues(func)joincombineByKey

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读写数据库:基本不会考,了解就可以了

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值