BigData大数据应用开发学习笔记(04)离线处理--离线分析Spark SQL
BigData大数据应用开发学习笔记(04)离线处理--离线分析Spark SQL
一.离线批处理特点
处理时间要求不高、数据量巨大、数据格式多样、占用计算存储资源多
MR作业,Spark作业,HSQL作业实现
数据源:流式数据、文件数据、数据库
数据采集:实时采集(Flume、第三方采集),批量采集(Flume、Sqoop、第三方ETL)
离线批处理引擎:HDFS,Yarn,MapReduce,Hive,Spark,Spark SQL
业务应用:数据集市,数据仓库(交互式分析),专题库
离线批处理常用组件:
HDFS: 分布式文件系统,为各种批处理引擎提供数据存储,可以存储各种文件格式数据。
YARN: 资源调度引擎,为各种批处理引擎提供资源调度能力。
MapReduce: 大数据批处理引擎,用于处理海量数据,但是处理速度较慢。
Hive: 大数据SQL批处理引擎,用于处理SQL类批处理作业,但是处理速度较慢。
Spark: 基于内存的数据处理引擎,适合海量数据,处理速度高效。
Spark SQL: Spark处理结构化数据的一个模块。
二.Spark
1.Spark简介
Spark是基于内存的分布式批处理系统,任务拆分分配到多个CPU上进行处理,处理数据的中间产物(处理结果)存放在内存中,减少磁盘I/O,提升处理速度,在数据处理和数据挖掘方面比较占优势。
2.Spark应用场景
数据处理(Data Processing):快速处理数据,兼具容错性和可扩展性
迭代计算(Iterative Computation):支持迭代计算,有效应对复杂的数据处理逻辑
数据挖掘(Data Mining):在海量数据基础上进行复杂的挖掘分析,可支持多种数据挖掘和机器学习算法。
流式处理(Streaming Processing):支持秒级延迟的流处理,可支持多种外部数据源
查询分析(Query Analysis):支持SQL的查询分析,同时提供领域特定语言(DSL),以方便操作结构化数据,并支持多种外部数据源。
3.Spark涉及概念
RDD:分布式弹性数据集,一个存储数据的存储结构
Shuffle:划分DAG中stage的标识。RDD的Transformation函数,分为窄依赖(narrow dependency)和宽依赖(wide dependency),区别是是否发生Shuffle(洗牌)
窄依赖(narrow dependency)
宽依赖(wide dependency)
stage:
Transformation
Action:RDD算子
Sparkconf:任务参数配置对象
SparkContext:Spark的入口
三.Spark SQL
1.Spark SQL简介
Spark SQL是Spark用来处理结构化数据的模块,直接使用SQL语句操作数据。
SQL语句通过SparkSQL模块解析为RDD执行计划,交给SparkCore执行。
2.Spark SQL使用场景
适合:
结构化数据处理
对数据处理的实时性要求不高的场景
需要处理PB级的大容量数据
不适合:
实时数据查询
3.Spark SQL简单查询
查询:
df.select("id","name").show()
带条件的查询
df.select($"id",$"name").where($"name" === "bbb").show()
排序查询
df.select($"id",$"name").orderBy($"name".desc).show()
df.select($"id",$"name").sort($"name".desc).show()
4.Spark SQL开发