0 简介
Spark和Hadoop根本差异是作业之间的数据通信问题,Spark多个作业之间数据通信是基于内存,Hadoop是基于磁盘。
此外Spark还基于DAG有向无环图。
Q1:DAG如何影响Spark速度?其机理如何作用?
Q2:
1、Spark组成
1、SparkCore
2、SparkSQL
·可用于结构化数据查询,结构化数据可以是数据库,甚至文本等
3、SparkStreaming
·Spark实时流处理组件
·伪实时框架,用的是微批处理模式(间隔非常短收集并处理一次,通常是几十毫秒)
4、SparkMLlib
·机器学习算法库
5、SparkGraphX
·图计算算法库
2、Spark环境
1.Local
·可以设置核心数量,Local[*]利用多线程模拟分布式,直接跑Jar包运行
2.StandAlone
·分布式,Master调度器(RM),Woker工作节点(NM)
·mv slaves.template slaves
·在Spark-env.sh下添加java目录与节点信息
3.OnYarn
·Client
1)Driver运行在client上,哪台节点提交任务,就直接在那台节点上启动Driver进程
2)所有执行结果直接输出,类似spark-shell
·Cluster
1)由于RM掌管,不论在哪台节点提交都由于由RM分配启动Driver的节点
2)执行代码的结果不会直接显示在控制台中,而是显示在hadoop的日志中,适用于项目上线后的真正的部署环境
·yarn-site.xml、Spark-env.sh
3、函数式编程
在算子中添加逻辑
匿名函数
//匿名函数
值名:类型 {方法体}
val RDD1:RDD[int] = rdd.map( (num:int)=>{num*2} )
逻辑代码只有一行时,花括号可省
val RDD1:RDD[int] = rdd.map( (num:int)=>num*2 )
传入参数只有一个,括号可以省略
val RDD1:RDD[int] = rdd.map( num:int=>num*2 )
类型可以自动推断,类型可以省略
val RDD1:RDD[int] = rdd.map( num=>num*2 )
逻辑中参数只出现一次且顺序出现,可省略参数
val RDD1:RDD[int] = rdd.map( _*2 )
4、Pi案例 & 任务提交
bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master local[*] \ /**本地模式**/
--master spark://hadoop100:7077 \ /**StandAlone模式**/
--master yarn \ /**yarn模式**/
./examples/jars/spark-examples_2.12-3.0.0.jar \
10