宝安中心站,wordpress导出主题,百度网站打开,有哪些网站建设方案1.Spark SQL是Spark的一个模块#xff0c;用于处理海量结构化数据
限定#xff1a;结构化数据处理
RDD的数据开发中#xff0c;结构化#xff0c;非结构化#xff0c;半结构化数据都能处理。
2.为什么要学习SparkSQL
SparkSQL是非常成熟的海量结构化数据处理框架。
学…1.Spark SQL是Spark的一个模块用于处理海量结构化数据
限定结构化数据处理
RDD的数据开发中结构化非结构化半结构化数据都能处理。
2.为什么要学习SparkSQL
SparkSQL是非常成熟的海量结构化数据处理框架。
学习SparkSQL主要在2个点
a.SparkSQL本身十分优秀支持SQL语言\性能强\可以自动优化\API兼容\兼容HIVE等
b.企业大面积在使用SparkSQL处理业务数据离线开发数仓搭建科学计算数据分析
3.SparkSQL的特点
a.融合性SQL可以无缝的集成在代码中随时用SQL处理数据
b.统一数据访问一套标准的API可以读写不同的数据源
c.Hive兼容可以使用SparkSQL直接计算并生成Hive数据表
d.标准化连接支持标准化JDBC\ODBC连接方便和各种数据库进行数据交互
4.SparkSQL和Hive的异同点
Hive和SparkSQL都是分布式SQL计算引擎用于处理大规模结构化数据的。并且Hive和SparkSQL都可以运行在YARN之上。
不同点
SparkSQL是内存计算底层运行基于SparkRDD。Hive是基于磁盘迭代的底层运行基于MapReduce。
SparkSQL不支持元数据管理。Hive有元数据管理服务Metastore服务
SparkSQL支持SQL和代码的混合执行。Hive仅能以SQL开发。
5.SparkSQL的数据抽象用的是什么
DataFrame一个分布式的内部以二维表数据结构存储的数据集合。
6.RDD和DataFrame两种数据抽象的区别 还有就是DataFrame存储数据时是类似于mysql数据库一样的形式按照二维表格存储。DataFrame是严格的按照SQL格式的格式来存储数据所以DataFrame就更适合处理SQL数据
而RDD是按照数组对象的形式存储。RDD存储数据很随意很多数据结构的数据都能存储。
7.SparkSession对象
在Spark的RDD阶段中程序的执行入口是SparkContext对象。
在Spark 2.0之后推出了SparkSession对象来作为Spark编码的统一入口对象。
SparkSession对象可以
a.用于SparkSQL编程作为入口对象
b.用于SparkCore编程通过SparkSession对象中获取到SparkContext
8.总结
1SparkSQL和Hive都是用在大规模SQL分布式计算的计算框架均可以运行在YARN上在企业中被广泛应用。
2SparkSQL的数据抽象为SchemaRDD废弃DataFramePythonRJavaScalaDataSetJavaScala
3DataFrame同样是分布式数据集有分区可以并行计算和RDD不同的是DataFrame中存储的数据结构是以表格形式组织的方便进行SQL运算。
4DataFrame对比DataSet基本相同不同的是DataSet支持泛型特性可以让JavaScala语言更好的利用到。
5SparkSession是2.0之后推出的新的执行环境的入口对象可以用于RDDSQL等编程。
9.DataFrame的组成
二维表结构
在结构层面structType对象描述整个DataFrame的表结构structField对象描述一个列的信息。
在数据层面Row对象记录一行数据Column对象记录一列数据并包含列的信息。 10.DataFrame的创建
1基于RDD的方式1
DataFrame对象可以从RDD转换而来都是分布式数据集合其实就转换一下内部存储的结构转换为二维表的结构。
通过SparkSession对象的createDataFrame方法来将RDD转换为DataFrame这里只传入列名称类型从RDD中进行推断是否允许为空默认为允许True
2基于RDD的方式2
通过StructType对象来定义DataFrame的“表结构”转换RDD
3基于RDD的方式3
使用RDD的toDF方法转换为RDD
4基于Pandas的DataFrame
将Pandas的DataFrame对象转变为分布式的SparkSQL DataFrame对象。
11.DataFrame支持两种风格进行编程
1DSL风格称之为领域特定语言其实就是指DataFrame特有的APIDSL风格就是以调用API的方式来处理Data。比如df.where().limit()
2SQL语法功能就是使用SQL语句处理DataFrame的数据。比如spark.sql(select * from xxx)
11.总结
1DataFrame在结构层面上由StructField组成描述由StructType构造表描述。在数据层面上Column对象记录列数据Row对象记录行数据。
2DataFrame可以从RDD转换Pandas DF转换读取文件读取JDBC等方法构建。
3spark.read.format()和df.write.format()是DataFrame读取和写出的统一化标准API
4SparkSQL默认在shuffle洗牌理解为数据的整合阶段200个分区可以修改参数获得最好性能。
5dropDuplicates可以去重dropna可以删除缺失值fillna可以填充缺失值
6SparkSQL支持JDBC读写可以用标准API对数据库进行读写操作。
12.SparkSQL定义UDF函数
无论是Hive还是SparkSQL分析处理数据的时候往往需要使用函数SparkSQL模块本身自带了很多实现公共功能的函数在pyspark.sql.function中。SparkSQL和Hive一样支持定义函数UDF和UDAF尤其是UDF函数在实际项目中使用最为广泛。
13.SparkSQL的自动优化
RDD的运行完全会按照开发者的代码执行如果开发者的水平有限RDD的执行效率也会受影响。
而SparkSQL会对写完的代码执行“自动优化”以提高代码运行的效率避免开发者水平影响到代码执行效率。
为什么SparkSQL可以优化RDD不行
因为RDD内含数据类型不限格式和结构而DataFrame只有二维表结构可以被针对。SparkSQL的自动优化依赖于Catalyst优化器。
14.Catalyst优化器
为了解决过多依赖Hive的问题SparkSQL使用了一个新的SQL优化器代替Hive的优化器这个优化器就是Catalyst整个SparkSQL的优化架构如下 1API层简单地说就是Spark会通过一些API接受SQL语句
2收到SQL语句后将其交给CatalystCatalyst负责解析SQL生成执行计划等
3Catalyst的输出应该是RDD的执行计划
4最终再交给集群去运行
15.SparkSQL的执行流程
1提交SparkSQL代码
2catalyst优化 a.生成原始的AST语法树 b.标记AST元数据 c.进行断言下推和列值裁剪以及其他方面的优化作用在AST上 d.将最终的AST得到生成执行计划 e.将执行计划翻译为RDD代码
3Driver执行环境入口构建SqlSession
4DAG调度规划逻辑任务
5TASK调度区分配逻辑任务到具体Executor上工作并监控管理任务
6Worker干活
DataFrame代码再怎么被优化最终还是被转换为RDD去执行。
15.Spark on Hive
回顾Hive组件
对于Hive来说就两样东西
1SQL优化翻译器执行引擎翻译SQL到MapReduce并提交到YARN执行
2MetaStore元数据管理中心 那么Spark on Hive是什么呢请看下面的图 由上图可知Spark on Hive不外乎就是SparkSQL借用了Hive的元数据管理中心也就是说Hive的MetaStoreSparkSQL就构成了Spark on Hive然后执行的时候走的是SparkRDD代码这条支线就不再走Hive老旧的MapReduce这条路线。以上就是Spark on Hive的基本原理。
16.ThriftServer服务就是方便程序员使用不需要程序员专门会写Spark或者DataFrame的API依然可以操作Spark
该服务监听10000端口该服务对外提供功能使得我们可以用数据库工具或者代码连接上来直接写SQL便可操作Spark。底层是翻译成RDD运行的
17.分布式SQL归纳
分布式SQL执行引擎就是使用Spark提供的ThriftServer服务以“后台进程”的模式持续运行对外提供端口。
可以通过客户端工具或者代码以JDBC协议连接使用。
SQL提交后底层运行的就是Spark任务。
分布式SQL大白话总结相当于构建了一个以MetaStore服务为元数据Spark为执行引擎的数据库服务像操作数据库那样方便的操作SparkSQL进行分布式的SQL计算。
18.Spark层次关系概念图 19.Spark核心概念思维导图 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Kafka在大数据的应用场景
20.MQ消息队列
消息队列-----用于存放消息的组件
程序员可以将消息放入到队列中也可以从消息队列中获取消息
很多时候消息队列并不是一个永久性存储而是作为一个临时存在的设定一个期限例如消息在MQ中保存10天
21.消息队列主要记录Kafka的应用场景
1异步处理 电商网站新用户注册时需要将用户的信息保存到数据库中同时还要额外的发送注册的邮件通知以及短信注册码给用户。但因为发送邮件发送短信注册码需要连接外部的服务器需要额外等待一段时间此时就可以使用消息队列来进行异步处理从而实现快速响应。其实就是不用及时处理的请求就堆起来等会处理罢了 {可以将一些比较耗时的操作放在其他系统中通过消息队列将需要进行处理的消息进行存储其它系统可以消息队列中的数据例如发送短信验证码发送邮件}。
2系统解耦 比如如果订单系统和库存系统耦合着。如果库存系统出现问题会导致订单系统下单失败而且如果库存系统接口修改了会导致订单系统也无法工作。 使用消息队列可以实现系统和系统之间的解耦订单系统不再调用库存系统接口而是把订单消息写入到消息队列库存系统从消息队列中拉取消息然后再减库存从而实现系统的解耦。 {原来一个微服务是通过接口HTTP调用另一个微服务这时候耦合严重只要接口发生变化j就会导致系统不可用。使用消息队列可以将系统进行解耦现在一个微服务可以将消息放入到消息队列中另一个微服务可以从消息队列中取出来进行处理。进行系统解耦}。
3流量削峰 有大规模用户请求过来在某个瞬间流量达到顶峰如果在顶峰没有打下巨大的请求流量可能会瞬间压垮数据库而且响应越慢用户越疯狂用户会疯狂的刷新不断地发送请求过来。这个时候可以利用消息队列的大吞吐量先存储大量的用户请求并可以快速地响应用户你先等着然后业务处理程序再去从消息队列中拉去请求来处理。 {因为消息队列是低延迟高可靠高吞吐的可以应对大量并发}。
4日志处理大数据领域常见 大型的电商网站淘宝京东抖音拼多多APP滴滴抖音饿了么等需要分析用户的行为这要根据用户的访问行为来发现用户的喜好以及活跃情况需要在页面上收集大量的用户访问信息。 然而他们不会将用户的这些访问信息专门存储到数据库中而是当用户点击网页的时候直接将用户的这个访问信息发送到一台服务器中然后再存储到服务器上的文件当中。可以在扔给服务器的过程当中先扔给消息队列暂存因为消息队列的吞吐量大嘛 {可以使用消息队列作为临时存储或者一种管道通信}。
22.消息队列的两种模型
生产者消费者模型 23.消息队列的两种模式
1点对点模式
每个消息只有一个消费者消费了消息就不在了
生产者和消费者没有依赖性生产者发送消息之后不管有没有消费者在运行都不会影响生产者下次发送消息。
消费者成功消费消息之后需要向队列应答成功以便消息队列删除已经被消费的消息。 2发布订阅模式
每个消息可以有多个订阅者。
发布者和订阅者之间有时间上的依赖性。针对某个主题Topic的订阅者它必须创建一个订阅者之后才能消费发布者的消息。
为了消费消息订阅者需要提前订阅该角色主题并保持在线运行。 24.Kafka概念
Apache Kafka是一个分布式流平台。一个分布式流平台应该包含三个部分的能力
1发布订阅流数据流类似于消息队列或者是企业消息传递系统。
2以容错的持久化方式存储数据流。
3处理数据流。
25.Kafka的应用场景
1建立实时的数据管道以可靠的在系统或者应用程序之间获取数据。
2构建实时流应用程序以转换或者响应数据流。
下图十分直观