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开发