第一章、大数据技术概述
大数据处理的基本流程
- 数据采集与预处理:利用ETL(Extraction Transformation Loading)工具将分布、异构数据源中的数据抽取到临时中间层后进行清洗、转换、集成,最后加载到数据仓库或数据集市中,成为联机分析处理、数据挖掘的基础。
- 数据存储和管理:利用分布式文件系统、数据仓库等实现对结构化、半结构化和非结构化海量数据的存储和管理。
- 数据处理和分析:利用分布式并行编程模型和计算框架,结合机器学习和数据挖掘算法,实现对海量数据的处理和分析。
- 数据可视化(结果呈现):对分析结果进行可视化呈现,帮助人们更好理解数据、分析数据。---### Hadoop生态系统的各个组件功能
- HDFS分布式文件系统:提供在廉价** 服务器集群** 中进行大规模 **分布式文件存储 **的能力,数据分布在若干个数据节点上,使得一个文件的数据能够被 并发访问。- 名称节点(中心服务器):管理文件系统的命名空间及客户端对文件的访问。- 数据节点:一个节点负责一个数据节点进程,处理文件系统客服端的读/写请求,并在名称节点的统一调度下进行数据块的创建、删除和复制操作。
- MapReduce:****分布式并行编程模型。用于大规模数据集(大于1TB)的并行运算,将并行计算高度抽象为Map和Reduce,最终写入分布式文件系统。
- YARN:****负责集群资源的管理和调度。目标为实现“一个集群多个框架”,即在一个集群上部署一个统一的资源调度管理框架YARN,并在YARN上部署其他计算框架如MapReduce、Spark等,根据他们的负载需求调整如CPU、内存等资源。
- HBase分布式数据库:分布式数据库。存储非结构化和半结构化的松散数据。
- Hive:基于Hadoop的数据仓库工具。对存储在Hadoop中的数据集进行整理、特殊查询和分析处理。
- Flume:分布式海量日志采集、聚合和传输系统。
- **Sqoop:**SQL-to-Hadoop,在Hadoop和关系数据库之间交换数据。---### Hadoop和Spark的对比
Hadoop中的MapReduce的缺点- 表达能力有限:计算必须转化为Map和Reduce操作。- 磁盘I/O开销过高:每次执行都要将数据从磁盘中读取,并写回磁盘。- 延迟高:一次计算分解成一系列顺序执行的Map和Reduce,且任务之间的衔接设计I/O开销,会产生高延迟。- 难以适用于多种应用场景:难以适应机器学习、流处理或者交互式SQL查询。
Spark的优点- 灵活:计算框架类似于MapReduce,但不局限于Map和Reduce,提供多种数据集操作类型。- 内存计算:中间结果放在内存,迭代运算效率更高。- 基于DAG的任务调度执行机制- 多种组件:一站式支持批处理、流处理、查询分析、图计算、机器学习等。
第二章 Scala语言基础
Scala语言基本特性
- Scala运行于JVM上:兼容现有Java程序,可与java类互操作。
- 面向对象:每个值都是对象,每个操作都是方法调用。
- 函数式:每个函数都是一个对象,和其他类型的值同一地位。Scala提供轻量级语法 定义匿名函数,支持高阶函数,允许嵌套多层函数,支持函数柯里化。
Scala中的两种构造器
- 主构造器:类的定义主体,所有位于类方法以外的语句都将在构造过程中被执行。
- 辅助构造器:用this进行定义,this的返回类型为Unit,第一个表达式调用此前已经定义的辅助构造器或主构造器。
Scala的词频统计实现思路
- 通过textFile读取数据
- flatMap将字符串切分成单词
- map将单词转换为(单词,1)的形式
- reduceByKey将同一个单词的所有值相加
- filter将单词计数大于3的结果过滤出来
- saveAsTextFile将结果写入HDFS
第三章 Spark的设计与运行原理
Spark的主要特点
- 运行速度快:使用DAG执行引擎,支持循环数据流与内存计算。
- 容易使用:支持Scala、Java、Python和R语言进行编程,通过spark-shell进行交互式编程。
- 通用性:提供完整而强大的技术栈,包括SQL查询、流式计算、机器学习和图计算。
- 模块化:提供sparkCore、SparkSQL、SparkStreaming等模块,可将不同场景的工作负载整合在一起在一个引擎上执行。
- 运行模式多样:可以独立运行与集群模式中、Hadoop中,也可以运行在云环境中。
- 支持各种数据源:由于spark的重心在分布式计算,可以读取包括HDFS、HBase、Hive等以及高级数据源Kafka等。
Spark的生态系统
遵循一个软件栈满足不同应用场景的理念,所提供的生态系统足以支持批处理、交互式查询、流数据处理三种应用场景。
- sparkCore:包含Spark最基础、最核心的功能,如内存计算、任务调度、故障恢复、部署模式、存储管理等。
- SparkSQL:结构化数据处理组件
- SparkStreaming:流计算框架
- MLlib:机器学习算法实现
- GraphX:用于图计算
Spark主要概念
- RDD:弹性分布式数据集。提供一种高度受限的共享内存,实际数据被分成多个分区,存储在一批机器上。
- DAG:有向无环图,反映RDD之间的依赖关系。
- 阶段(stage):作业调度的基本单位,表示可以并行处理的一组任务。一个作业会分为多组阶段,Spark中以shuffle和Result进行划分。
- 任务:Executor上的工作单元,每个阶段会有多个任务。
- 分区:Spark中最小的并行处理单元。RDD的最小计算单元,分区的数量和大小影响并行计算的粒度和效率。
- 窄依赖:每个父RDD的分区最多智能对应一个子RDD的分区,典型操作包括map、filter、union等。
- 宽依赖:一个父RDD的分区可以对应一个子RDD的多个分区,通常会包含shuffle操作,对输入进行非协同划分。典型操作包括groupByKey、sortByKey
- shuffle:将数据重新分配到不同的节点上。
Action和Transformation的区别
- Action:将RDD存储到硬盘或触发转化执行,进行运算。
- Transformation:把原数据加载到RDD或把一个RDD转换为另一个RDD,不进行计算。
Spark运行基本流程
Spark运行基本流程_spark运行的基本流程-CSDN博客
第四章 Spark环境搭建和使用方法
Spark的五种部署模式
- Local模式:单机模式
- standalone模式
- spark on YARN模式
- spark on Mesos模式
- spark on kubernetes模式
Spark独立应用程序的基本步骤
- 安装编译打包工具:sbt、Maven
- 编写Spark应用程序代码
- 编译打包
- 通过spark-submit运行程序
Spark集群环境搭建的基本过程
- 搭建Hadoop集群
- 在集群中安装Spark
- 配置环境变量
- Spark的配置
- 启动Spark的集群
- 关闭Spark的集群
第六章 SparkSQL
RDD和DataFrame的区别
- RDD 是分布式的 Java 对象的集合
- DataFrame 则是分布式的 Row 对象的集合
- DataFrame 除了提供了比 RDD 更丰富的算子操作以外,更重要的特点是利用已知的结构信息来提升执行效率、减少数据读取以及执行计划的优化。
从RDD到DataFrame的转换
- 使用反射获取RDD内的Schema:适用于已知数据结构的RDD转换
- 通过编程接口指定Schema
- 制作表头schema,structType和stryctField类表示模式信息,包含字段名称,类型等
- 制作表中的记录:每条记录封装到Row对象中,最终保存到一个RDD中
- 将表头和表中记录拼装在一起,得到一个DataFrame。
第七章 SparkStreaming
批量计算和实时计算的区别
批量计算是对大量数据进行离线处理,通常用于大规模数据集的深入分析和挖掘。适用于静态数据。在充裕时间内获取有价值的信息,如Hadoop
实时计算强调对实时数据进行快速响应。针对流数据(快速到达、来源众多、量大、注重整体价值、顺序颠倒)
流计算系统功能上的需求
- 高性能:处理大数据的基本要求,如每秒几十万条
- 海量式:TB或者PB
- 实时性:延迟时间较低
- 分布式:大数据基本架构,能平滑扩展
- 易用性:快速开发和部署
- 可靠性:可靠的处理流数据
流计算的基本处理框架
- 数据实时采集:多个数据源、保证实时性、低延迟与稳定可靠。有agent、collector、store三个部分
- 数据实时计算:对数据进行分析和计算,可视情况储存或丢弃
- 实时查询服务:主动将实时结果推送给用户
SparkStreaming工作机制
组件Receiver作为一个长期运行的任务(Task)运行在一个Executor上,每个Receiver都会负责一个Dstream输入流。Receiver组件接收到数据源发来的数据后,会提交给SparkStreaming程序进行处理,处理后的结果可由可视化组件进行展示,或者写入HDFS、HBase中。
SparkStreaming程序编写的基本步骤
- 创建输入Dstream来定义输入源,输入源发送数据给SparkStreaming由receiver接受,并有自定义的SparkStreaming处理
- 对Dstream应用转换和输出操作定义流数据,调用各种Dstream操作实现用户处理逻辑
- StreamingContext对象的start()方法开始接收数据和处理流程
- 调用StreamingContext对象的awaitTermination()方法等待流计算进程结束,或者stop()方法手动结束流程。
第八章 SparkMLlib
流水线的几个部件和主要作用
- Pipeline:将多个Transfomer和Estimator连接在一起构成一个机器学习工作流。
- Transformer转换器:实现了transform()方法,该方法可以将一个DataFrame转换为另一个DataFrame。
- Estimator评估其:实现了fit()方法,所以只要输入是DataFrame,然后产生一个模型。
流水线构建机器学习工作流有什么好处
- 简化流程
- 方便调试和优化
- 支持数据预处理和模型训练的一体化
- 易于扩展和复用
版权归原作者 捣蛋糖 所有, 如有侵权,请联系我们删除。