赞
踩
单选题30分,程序判断10分,问答30分,编程题30分
Scala是一门现代的
多范式编程语言
(多范式特性:集成了面向对象编程
和函数式编程
);由Java开发,运行在JVM
上(继承了Java的运行速度,兼顾了与Java的兼容性并屏蔽了Java语言的复杂性,是大数据计算框架的首选语言
)。
Scala大数据计算框架:
① Scala支持众多大数据计算框架;
② Spark(分布式通用计算引擎);
③ Kafka(分布式消息系统);
④ Flink(分布式实时流处理框架)
源代码文件:
*.scala
文件
编译成Java字节码文件:*.class
文件
// 创建数组
var a : Array[String] = new Array[String](3)
var b = new Array[String](3)
var c = Array[String] // 错误的!
var d : Array[String] = Array("IBM","Google","Intel")
var e = Array("IBM","Google","Intel")
// 生成范围数组 var z = Range(start,end,step) step可省略,缺省为1
var f = Range(1,10) // 生成从1到10的整型数组
// 访问数组 arrayName(下标值)
var num : Int = f(1)
// 合并数组
var newArray = Array.concat(a,b) // 将a、b数组合并成一个数组
Scala
Scala、Java、Python
Spark Core
:提供Spark核心功能
,实现了Spark的底层机制并提供基本数据抽象格式。
Spark SQL
:提供Spark SQL语言的解析与执行。
Spark Streaming
:流式计算框架,提供了数据流的接入、抽象、计算等规范。
MLlib
:机器学习框架,常用机器学习算法的分布式实现。
GraphX
:分布式图计算框架,常用图算法的分布式实现。
Tachyon
:分布式文件存储系统。
运行速度快
:使用先进的有向无环图执行引擎,以支持循环数据流与内存计算。容易使用
:支持Scala、Java、Python和R语言编程,API设计简洁,可通过Spark Shell进行交互式编程。通用性
:提供完整而强大的技术栈,Spark Streaming、Spark SQL、MLlib和GraphX等组件。运行模式多样
:本地模式、独立分布式和利用第三方平台的分布式。
Local
- 主从架构在本地进程中实现,常用于开发测试。
- 在Client上安装配置Spark,不用启动Spark守护进程。Spark on Standalone
- 使用Spark的Standalone提供资源调度;任务由Client提交至Spark集群,主从架构在Spark的Master和Worker守护进程中实现。
- 安装配置Spark集群并事先启动Spark守护进程。Spark on YARN
- 使用Hadoop YARN提供资源调度;任务由Client直接提交至YARN,主从架构由YARN中ResourceManager和NodeManager实现。
- 须先安装配置Hadoop集群并启动YARN;在Client上安装配置Spark即可,不用启动Spark守护进程。
Driver
:
Spark任务管理进程,执行用于提交的应用程序的main()方法,启动Application。
SparkContext
:
Application上下文,包含RDD、SparkConf和任务划分组件。
RDD
:
Spark的基本数据结构,基于内存的分布式存储序列,分区存储在Worker中。
Application:
用户编写的Spark应用程序或启动SparkShell会创建Application,其中包含了一个SparkSession。
SparkSession:
Spark与用户的交互结构,集成了SparkContext。
Executor:
运行在Worker上,用于执行Stage中的Task。
Job:
包含了RDD的每次Action操作。
Stage:
Job的基本调度单位,一个Job会分为多个Stage,每个Stage包含多个Task,故也称为任务集。
Task:
Task是Job中每个Stage具体执行的任务,最终以Stage为单位被分配到各Worker节点中的Executor中执行。
RDD中的每个Task操作一个Partition,最终RDD的并行度取决于RDD的Partition情况。
一次性执行大量计算步骤,有助于调度器优化资源调度、提升计算效率和存储效率。
定义计算操作返回一个新的RDD只定义计算操作不执行计算,若连续执行转换操作,所有的操作会累积到返回的RDD中。
算子有:makeRDD
、textFile
、wholeTextFiles
、map
、flatMap
、filter
、groupBy
、groupByKey
、reduce
、reduceByKey
。
执行RDD中所有操作并返回结果一次性执行RDD中累积的所有数据读取、转换操作和自身操作,并返回最终结果。
算子有:count
、max
、min
、collect
、saveAsTextFile
。
val rdd = Array(1,2,2,3,3,3)
println(rdd.sum() / rdd.count())
// 分区优化前 val conf = new SparkConf() conf.setAppName("Test") val sc = new SparkContext(conf) val r=List("hello"," hello","world","spark","math","math","world") val rdd=sc.makeRDD(r, 2) rdd.map(x=>(x,1)).groupByKey() .map(x=>(x._1,x._2.count(x=>true))).foreach(println) // 分区优化后 val r=List("hello"," hello","world","spark","math","math","world") val rdd=sc.makeRDD(r, 2) rdd.map(x=>(x,1)) .mapPartitions(x=>x.toList.groupBy(y=>_._1) .map(y=>(y._1,y._2.count(z=>true))) .toIterator) .groupByKey().map(x=>(x._1,x._2.sum)).foreach(println)
例:List中包含每个学生各科分数,返回每个学生的姓名、最高分的科目和分数。
val conf = new SparkConf()
conf.setAppName("Test")
val sc = new SparkContext(conf)
val students = List(("stu1", List(("math", 60), ("eng", 70), ("C", 72))), ("stu2", List(("math", 80), ("eng", 68), ("C", 79))), ("stu3", List(("math", 78), ("eng", 90), ("C", 88))))
val rdd=sc.makeRDD(students)
rdd.flatMap(x=>x._2.map(y=>(x._1,(y._1,y._2))))
.reduceByKey((x,y)=>if(x._2>y._2) x else y)
.map(x=>(x._1,x._2._1,x._2._2))
.collect
// 输出结果:Array((stu1,C,72), (stu2,math,80), (stu3,eng,90))
val rdd = Array(1,2,2,3,3,3)
println(rdd.sum())
val rdd = Array(1,2,2,3,3,3)
println(rdd.count())
- RDD的依赖关系
一个RDD(父算子)由算子计算后生成另一个RDD(子RDD),子RDD数据依赖于父RDD数据计算后得到。- 窄依赖
父RDD分区与子RDD分区一一对应,RDD分区在计算过程中不被分割,执行调度时父RDD和子RDD的Task可被分配到同一个Executor执行,不需要通过Shuffle重组数据。
各Executor完全独立异步执行,不需要等待同步过程。- 宽依赖
子RDD分区的数据从多个父RDD分区抽取过来,父RDD分区数据会被抽取到多个子RDD分区中去。
mapPartitions
、repartition
HashPartitioner
、RangePartitioner
DataFrame
:基于RDD构建,以面向列的方式存储表格数据,包含了表格的元数据Schema。
Schema
:DataFrame中的数据结构信息,包含:列名、列数据类型、列注释、是否可为空等。
RDD
可看作是分布式的对象的集合
,Spark并不知道对象的详细模式信息DataFrame
可看作是分布式的Row对象的集合
,提供了由列组成的详细模式(Schema)信息
转换类:select、selectExpr(+统计方法sum、avg、count)、where、.sqlContext.sql(能将算子与SQL语句相互翻译)
行动类:show、printSchema
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。