Spark思维导图
2021-06-03 21:38:25 56 举报
AI智能生成
有相似请说
作者其他创作
大纲/内容
Spark入门
Spark基础知识
Spark介绍
Spark是一种通用内存计算框架,使用Scala语言进行实现,它是一种面向对象、函数式编程语言,能够像操作本地集合对象一样轻松地操作分布式数据集
Spark特点
①快:与mr相比,spark基于内存的运算要快100倍以上,基于硬盘运算快10倍以上
②易用:spark支持Java,python,Scala的API
③通用:spark提供了统一的解决方案。可以用于批处理,交互式查询,实时流处理,机器学习,图计算
④兼容性:spark可以非常方便的与其他开源产品进行融合
Spark使用场景
①复杂的批量处理(Batch Data Processing),偏重点在于处理海量数据的能力,至于处理速度可忍受,通常的时间可能是在数十分钟到数小时
②基于历史数据的交互式查询(Interactive Query),通常的时间在数十秒到数十分钟之间
③基于实时数据流的数据处理(Streaming Data Processing),通常在数百毫秒到数秒之间
Spark部署模式
①local(本地模式):常用于本地开发测试,本地还分为local单线程和local-cluster多线程;master和worker都为本机。运行时直接加断点调试即可。
②standalone(集群模式):构建一个有Master+Slave构成的Spark集群,spark运行在集群中。简单来说,只用spark,不用yarn,所以不需要启动Hadoop
③on yarn(集群模式): 运行在 yarn 资源管理器框架之上,由 yarn 负责资源管理,Spark 负责任务调度和计算
④on mesos(集群模式): 运行在 mesos 资源管理器框架之上,由 mesos 负责资源管理,Spark 负责任务调度和计算
⑤on cloud(集群模式):比如 AWS 的 EC2,使用这个模式能很方便的访问 Amazon的 S3;Spark 支持多种分布式存储系统:HDFS 和 S3
Spark运行流程
Spark基本使用
启动Spark:bin/start-all.sh
启动Spark-shell:bin/spark-shell
Spark SQL
Spark SQL基础
介绍
1.spark SQL是模仿hive而来的,它是spark用来处理结构化数据的一个模块,它提供了2个编程抽象,DataFrame 和 DataSet,并且作为分布式SQL查询引擎的作用
2.我们已经学习了hive,它是hive SQL转换成mapreduce然后提交到集群中执行,大大简化了mapreduce的程序的复杂性,由于mapreduce这种计算框架执行效率比较慢。所以spark SQL应运而生,它将spark SQL转换成RDD,然后提交集群执行,所以执行效率非常快
特点
1.易整合
2.统一的数据访问方式
3.兼容hive
4.标准的数据连接
2.统一的数据访问方式
3.兼容hive
4.标准的数据连接
Spark SQL创建
DataFrame创建
1.1.SparkSession是spark最新的SQL查询的起始点,实质上是SQLContext和HiveContext的组合,所以在SQLContext和HiveContext上可用的API在SparkSession上同样是可以使用的,SparkSession内部封装了SparkContext,所以计算实际上是由SparkContext完成的
2.在sparkSQL中SparkSession是创建DataFrame和执行SQL的入口,创建DataFrame有三种方式:通过spark的数据源进行创建;从一个存在的RDD进行转换;还可以从一个hive table中查询返回
2.在sparkSQL中SparkSession是创建DataFrame和执行SQL的入口,创建DataFrame有三种方式:通过spark的数据源进行创建;从一个存在的RDD进行转换;还可以从一个hive table中查询返回
DataSet创建
DataSet是具有强类型的数据集合,需要提供对应的类型信息
RDD DataFrame DataSet转换
RDD与DataFrame相互转换
RDD与DataSet相互转换
DataFrame与DataSet相互转换
DataFrame 有结构
DataSet 有类型并且有结构
前提:需要导入隐式转换 import spark.implicits._
DataSet 有类型并且有结构
前提:需要导入隐式转换 import spark.implicits._
一.将DF变成DS
val rdd = sc.makeRDD(List(("zhangsan",22),("lisi",32),("wangwu",15)))
//将RDD加上结构就变成了DF
val df = rdd.toDF("name","age")
//将DF加上类型就变成了DS
case class people(name:String,age:Int) //这个就是类型
val ds = df.as[people]
val rdd = sc.makeRDD(List(("zhangsan",22),("lisi",32),("wangwu",15)))
//将RDD加上结构就变成了DF
val df = rdd.toDF("name","age")
//将DF加上类型就变成了DS
case class people(name:String,age:Int) //这个就是类型
val ds = df.as[people]
二.将DS变成DF val df2 = ds.toDF
Spark SQL数据源
Spark操作hive数据库
一.基本介绍
默认情况下,spark自带hive,可以直接写spark.sql("...")来操作内置的hive数据库
默认情况下,spark自带hive,可以直接写spark.sql("...")来操作内置的hive数据库
二.使用外部hive
①删除spark中内置的hive。即删除metastore_db和spark-warehouse文件夹
②将外部hive中的hive-site.xml文件复制到spark/conf中
③重启spark-shell
④这时spark.sql("...")访问的就是外部的hive了
⑤可以使用bin/spark-sql命令段操作hive
①删除spark中内置的hive。即删除metastore_db和spark-warehouse文件夹
②将外部hive中的hive-site.xml文件复制到spark/conf中
③重启spark-shell
④这时spark.sql("...")访问的就是外部的hive了
⑤可以使用bin/spark-sql命令段操作hive
Spark Streaming
基本介绍
一.基本介绍
1.Spark Straming用于流式数据处理。Spark Straming支持多种数据源输入,例如kafka,flume,twitter,zeroMQ和简单的TCP套接字等等。数据输入后可以用spark的高度抽象原语,如map,reduce,join,window进行操作运算。而结果也可以保存再很多地方,如HDFS,数据库等。
2.和spark基于RDD的概念很相似,spark streaming是用离散化流(discretized stream)作为抽象表示,叫做DStream。DStream是随着时间推移而收到的数据的序列。每个时间收到的数据都作为RDD存在,而DStream是由这些RDD组成的序列,因此得名“离散化
1.Spark Straming用于流式数据处理。Spark Straming支持多种数据源输入,例如kafka,flume,twitter,zeroMQ和简单的TCP套接字等等。数据输入后可以用spark的高度抽象原语,如map,reduce,join,window进行操作运算。而结果也可以保存再很多地方,如HDFS,数据库等。
2.和spark基于RDD的概念很相似,spark streaming是用离散化流(discretized stream)作为抽象表示,叫做DStream。DStream是随着时间推移而收到的数据的序列。每个时间收到的数据都作为RDD存在,而DStream是由这些RDD组成的序列,因此得名“离散化
1.易用
2.容错
3.易整合到spark体系
2.容错
3.易整合到spark体系
DStream创建
一.DStream
Spark Streaming原生支持一些不同的数据源。一些和核心的数据源已经被打包到Spark Streaming的maven工件中,而其他的一些数据源则可以通过Spark-Streaming-kafka等附加工件获取。每个接收器都以spark执行器程序中一个长期运行的任务形式运行,因此会占据分配给应用的CPU核心。此外,我们还需要有可用的CPU核心来处理数据。这意味着如果要运行多个接收器,就必须至少有和接收器数目相同的核心数,还要加上用来完成计算所需要的核心数。例如:如果我们想要在流计算应用中运行10个接收器,那么至少为应用分配11个CPU核心,所以如果在本地运行,不要使用local[1]
Spark Streaming原生支持一些不同的数据源。一些和核心的数据源已经被打包到Spark Streaming的maven工件中,而其他的一些数据源则可以通过Spark-Streaming-kafka等附加工件获取。每个接收器都以spark执行器程序中一个长期运行的任务形式运行,因此会占据分配给应用的CPU核心。此外,我们还需要有可用的CPU核心来处理数据。这意味着如果要运行多个接收器,就必须至少有和接收器数目相同的核心数,还要加上用来完成计算所需要的核心数。例如:如果我们想要在流计算应用中运行10个接收器,那么至少为应用分配11个CPU核心,所以如果在本地运行,不要使用local[1]
二.文件数据源
文件数据源:能够读取所有HDFS API兼容的文件系统文件,通过fileStream方式进行读取,Spark Streaming将会监控dataDriectory目录不断移动进来的文件,记住目前不支持嵌套目录。
注意: ①文件需要有相同的数据格式
②文件进入dataDriectory的方式需要通过移动或者重命名来实现
③一旦文件移动进目录,则不能再修改,即便修改了也不会读取数据
文件数据源:能够读取所有HDFS API兼容的文件系统文件,通过fileStream方式进行读取,Spark Streaming将会监控dataDriectory目录不断移动进来的文件,记住目前不支持嵌套目录。
注意: ①文件需要有相同的数据格式
②文件进入dataDriectory的方式需要通过移动或者重命名来实现
③一旦文件移动进目录,则不能再修改,即便修改了也不会读取数据
window函数
一.Window Operations(窗口操作)介绍
Window Operations可以设置窗口的大小和滑动的间隔来动态的获取当前Streaming的用于状态
Window Operations可以设置窗口的大小和滑动的间隔来动态的获取当前Streaming的用于状态
//设置窗口函数
//窗口大小应该为采集周期的整数倍,窗口滑动的步长也应该为采集周期的整数倍
val window:DStream[(String,String)] = kafkaDStream.window(Seconds(9),Seconds(3))
//窗口大小应该为采集周期的整数倍,窗口滑动的步长也应该为采集周期的整数倍
val window:DStream[(String,String)] = kafkaDStream.window(Seconds(9),Seconds(3))
0 条评论
下一页