Spark知识体系

1.大数据的四大特征(4V):海量的数据规模,快速的数据流动和动态的数据体系,多样的数据类型,巨大的数据价值

 

2.RDD与DataFrame区别:RDD是一个抽象数据集,DataFrame则相当于一个二维表,带有schema元数据信息,更便于上层应用分析

3.DataFrame和DataSet的区别:每个DataSet有一个被称为DataFrame的类型化视图,它只有在执行action操作时才触发计算

4.DataSet与RDD的区别:DataSet是特定域的对象集合,RDD是任意对象的集合

5.当遇到Task not serializable,一般因为map、filter等的参数使用了外部的变量,而该变量不能序列化,特别是当引用了某个类成员函数或者变量时。

解决方案:
1)对类中不需要序列化的部分用transient修饰

2)将引用的类序列化

3)将需要序列化的变量用更小的class保存,并让该class序列化

4)将该变量在map或者filter中定义

 

6.Spark SQL再学习:

具有如下特征:
1)HQL方面重用Hive中HQL的解析、逻辑执行计划翻译、执行计划优化等逻辑,可以近似认为是把物理执行计划从MR作业变为了Spark作业

2)依赖Hive Metastore和Hive SerDe(兼容各种Hive存储格式)

3)支持对原生RDD的关系查询

 

功能模块:

1)        core处理数据的输入输出,从不同数据源获取数据(RDD,Parquet,Json),将查询结果输出成schemaRDD

2)        catalyst考虑查询语句的整个处理过程,包括解析,绑定,优化,物理计划等,优化器实际上是查询引擎

3)        hive

4)        hive-ThriftServer提供CLI和JDBC/ODBC

 

其中catalyst的实现组件:

1)        sqlParse:完成sql语句的语法解析功能,解析成Tree

2)        Analyzer:主要完成绑定工作,将不同来源的Unresolved LogicalPlan和数据元数据(如hive metastore、Schema catalog)进行绑定,生成resolved LogicalPlan,使用Analysis Rules

3)        Optimizerresolved LogicalPlan进行优化,生成Optimizer LogicalPlan,使用Optimization Rules,对resolved LogicalPlan进行合并,列裁剪,过滤器下推等优化操作转换为Optimizer LogicalPlan

4)        Planner:将LogicalPlan转换成PhysicalPlan,使用Planning Strategies

5)        Cost Model:根据过去的性能统计数据,选择最佳的物理执行计划

 

各组件的实现细节:http://www.aboutyun.com/thread-20910-1-1.html

完整的SQL执行流程:
 sql or hql -> sqlparser(parse)生成 unresolved logical plan-> analyzer(analysis)生成analyzed logicalplan  -> optimizer(optimize)optimized logical plan -> sparkplanner(use strategies to plan)生成physical plan -> 采用不同Strategies生成spark plan -> sparkplan(prepare) prepared spark plan -> call toRDDexecute()函数用)执行sql生成RDD

 

 

hiveContext.sql()的执行过程:

1)判断其语法设置,如果dialect =="sql"则采用sqlContext的sql语法执行过程;如果是dialect == "hiveql",则采用hiveql语法执行过程

2)如果判断语法设置为hiveql,则

1.SQL语句经过HiveQl.parseSql解析成Unresolved LogicalPlan,在个解析程中hiveql语句使用getAst()获取AST树,然后再进行解析
2.
使用analyzer结合数据hive源数据Metastore(新的catalog定,生成resolved LogicalPlan
3.
使用optimizerresolved LogicalPlan进行优化,生成optimized LogicalPlan化前使用了ExtractPythonUdfs(catalog.PreInsertionCasts(catalog.CreateTables(analyzed)))进行预处理
4.
使用hivePlannerLogicalPlan转换成PhysicalPlan
5.
使用prepareForExecution()PhysicalPlan转换成可执行物理计划
6.
使用execute()执行可执行物理计划
7.
执行后,使用map(_.copy)SchemaRDD

 

DataFrame的使用方法分为:

1)直接执行相关算子,比如map,filter,groupBy等

2)转化为虚拟二维表,通过sql语句分析

 

 

7. RDD to DataFrame(RDD转换为DataFrame)

先创建一个类

case class Person(name: String, age: Int)

然后将Rdd转换成DataFrame

val people =sc.textFile("/usr/people.txt").map(_.split(",")).map(p=> Person(p(0), p(1).trim.toInt)).toDF()

 

8.利用HiveContext查询虚拟表

 

9.SparkStreaming再学习

sparkstreaming可以实时跟踪统计训练机器学模型或动检测异常等.

创建spark streamingcontext的步骤:

importorg.apache.spark.streaming._

valsc = ... // existing SparkContext

valssc = new StreamingContext(sc, Seconds(1)) //每隔1s封装一次RDD,提交一次Job

使用SparkStreaming Context的步骤:

1)指定输入源

2)准备好流计算指令

3)利用StreamingContext.start()方法接收和处理数据

4)处理过程一直持续,直到streamingContext.stop()

 

SparkStreaming支持一个高的抽象,叫做离散流( discretized stream )或者DStream ,它代表连续的数据流。DStream既可以利用从Kafka, FlumeKinesis等源取的入数据流建,也可以在其他DStream的基上通函数得。在内部,DStream是由一系列RDDs组成

 

所有的输入DStream都会绑定一个Receiver对象,用于接收数据源中的数据,并存储在Spark内存中,其中提供了三种内置的数据源支持:
1)基础数据源:StreamingContext中提供了对于文件,socket,Akka Actor的支持

2)高级数据源:诸如kafka,Flume,Kinesis,Twitter等数据源,数据源的支持需要引用其依赖

3)自定义数据源:用于决定如何接收和存储数据

 

如果想要在实时计算中并行接收多条数据流,可以创建多个输入DStream,这样就会创建多个Receiver,从而并行接收多个数据流,值得注意的是一旦Spark Streaming运行起来,这个节点的CPU Core便无法给其他应用使用

 

如果使用本地模式运行程序,至少使用local[2],能保证一条线程分配给Receiver接收数据,一条线程用于处理接收到的数据

 

Windows滑动窗口机制:

(1)  窗口长度(windowlength):即窗口的持续时间

(2)  滑动间隔(slidinginterval):窗口操作执行的时间间隔

这两个参数必须是原始DStream批处理时间间隔的整数倍

 

 

Spark Streaming之所以称为微批处理的原因:DStream(时间片划分,封装RDD)->多个Batch(RDD)->RDD执行Job的操作

指定的是封装RDD的时间间隔为5s,在5s期间任何添加到DStream中的数据都会被加入此RDD中,即Batch中直到时间间隔结束

 

DStreams提供两种类型的操作:

1)transformations:产生新的DStream

transformations又分为有状态和无状态,其中有状态transformation操作需要checkpointing,通过ssc.checkpoint(“hdfs://localhost:9000/usr”)

 

DStream的Operation包括:

a)  transform(func):将旧RDD通过func转换成新的RDD

b)  updateStateByKey(func)根据key更新状态

定义状态:此状态可以是任意数据类型

定义状态更新函数:更新状态

对每个word调用一次更新函数,newValues是最新值,runningCount是之前值

2)output operations:写数据到外部系统

 

checkpoint机制:推荐设置为batch duration的5~10倍

 

Spark Streaming对Kafka做数据接收的方案有两种:

1)Receiver-based Apporach:接收和处理分开,容易使得接收的节点崩溃

Receiver-based是基于kafkaconsumer API实现的。使用Receiver将从kafka接收到的数据存入spark executor中,然后由spark streaming

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值