Spark学习了解CORE、RDD等,以及基于Hadoop2.7.5的伪分布式集群搭建Spark2.3的环境部署

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_32297447/article/details/80385917
环境准备 :
JDK1.8
Hadoop2.7.5(Hadoop伪分布式搭建博客)

总结:
Spark概述
为什么用Spark?
spark的几种运行模式
spark的数据存储和读取
Spark的生态系统(spark属于BDAS生态系统)
Spark框架的组成部分
SPARK CORE
Spark生态圈的核心
Spark SQL
解释RDD
解释DAG
Spark与MR比较,Spark具有如下优势:
Spark运行时的步骤
MAPREDUCE的迭代式运行
MAPREDUCE的交互式运行
对比SPARK
Spark关键词
Spark与其他大数据框架的区别

Spark概述
Apache Spark 是专为大规模数据处理而设计的快递通用的计算引擎
Spark是UC Berkeley AMP lab所开源的类似Hadoop MR 的通用并行框架,Spark拥有Hadoop MR所具有的特点,但不同于MR的是Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好的适用于数据挖掘与机器学习等需要迭代的MR的算法
Spark是一种与Hadoop相似的开源集群计算环境,但是两者之间还存在一些不用之处,这些有用的不同之处使Spark在某些工作负载方面表现得更加优越,换句话说,spark启用了内存分布式数据集,除了提供交互式查询外,还可以优化迭代工作负载
Spark是在Scala语言中实现的,它将Scala用作其应用程序框架,与Hadoop不同,Spark和Scala能够紧密集成,其中Scala可以像操作本地集合对象一样轻松地操作分布式数据集
尽管创建Spark是为了支持分布式数据集上的迭代作业,但是实际上它是对Hadoop的补充,可以在Hadoop文件系统中并行运行。通过名为Mesos的第三方集群框架可以支持此行为。Spark可用来构建大型的,低延迟的数据分析应用程序

为什么用Spark?
* 先进的大数据分布式编程和计算框架
* 试图替代HADOOP (SPARK 可以独立于HADOOP)
* 内存分布式计算: 运行速度快
* 可以用 不同语言编程 (JAVA, SCALA, R and PYTHON)
* 可以从不同的数据源取数据 (HDFS、Cassandra、HBase)
* 实现不同的大数据功能:Spark Core、Spark SQL、SparkStreaming,Spark MLIB 以及 GraphX
* 特性:高伸缩性、高容错、内存计算
* 应用领域:数据计算任务、数据处理应用、集群化机器学习
* Spark在大数据中扮演的角色:数据处理
流程:数据采集==>数据转换==> 数据处理 ==>数据存储展示

spark的几种运行模式
* 批处理 -- 用于大规模的分布式数据处理
spark-submit predict.py
spark-submit --class “SparkPi” target/scala-2.10/realtime-event_2.10-1.0.jar
* 流方式 -- Spark流用于传送和处理实时数据
* 交互方式:常用于处理在内存中的大块数据.较低的延迟性
spark-shell
pyspark

spark的数据存储和读取
Spark可以从以下系统访问数据
Hadoop HDFS 以及HIVE, HBASE 等生态圈部件
Amazon S3
Cassandra, Mongodb
其他流工具如 Flume, Kafka所支持的各协议如 AVRO 另外Spark可以支持一下文件格式:
Text (包括CSV JSON 等)
SequenceFiles
AVRO
Parquet
*Spark可以独立于HADOOP单独运行

Spark的生态系统(spark属于BDAS生态系统)
MR属于Hadoop生态体系之一,Spark属于BDAS生态体系之一。
Hadoop包含了MR、HDFS、HBase、Hive、ZK、Sqoop、Pig。
BDAS包含了Spark、Shark(相当于Hive)、BlinkDB、Spark Streaming(消息实时处理框架,类似Storm)。

Spark框架的组成部分

SPARK CORE
包含spark的主要基本功能。所有跟RDD有关的API都出自于SPARK CORE

Spark生态圈的核心
负责从HDFS、Amazon S3和HBase等持久层读取数据
在、YARN和Standalone为资源管理器调度Job完成分布式计算
包括两个重要部件
有向无环图(DAG)的分布式并行计算框架
容错分布式数据RDD (Resilient Distributed Dataset)
总结SPARK CORE
SPARK CORE 就是 SPARK 功能调度中心,其中包括任务调动,内存管理,容错管理及存储管理。同时也是一些列应用程序的集中地。
这些应用程序用来定义和管理RDD (Resilient Distributed Dataset).
RDD代表了一系列数据集合分布在机群的内存中。SPARK CORE
的任务是对这些数据进行分布式计算。

Spark SQL
Spark 中用于结构化数据处理的软件包。用户用户可以在Spark环境下用
SQL语言处理数据。
Spark Streaming:Spark 中用来处理流数据的部件
MLlib:Spark 中用来进行机器学习和数学建模的软件包
GraphX:Spark 中用来进行图计算(如社交媒体关系) 的库函数
Cluster Managers:Spark 中用来管理机群或节点的软件平台.这包Hadoop YARN,Apache Mesos, 和 Standalone Scheduler (Spark 自带的用于单机系统)

解释RDD
* 弹性分布式数据集分布在不同集群节点的内存中
* 可以理解成一大数组
* 数组的每一元素是RDD的一分区
* RDD的每一分区是一数据块
* 一个RDD可以分布并被运算在多台计算机节点的内存及硬盘中
* RDD数据块可以放在磁盘上也可放在内存中(取决于设置)
* 如出现缓存失效或丢失,RDD的分区可以重新计算刷新
* RDD本身是不能被修改的
* 但RDD可以通过API (底层采用Scala)被变换生成新的RDD
* 有两类对RDD的操作:变换和操作

SPARK RDD 的API实现了MapReduce的基本map函数和reduce函数及计算模型,还提供更为丰富的函数如filter、join、groupByKey等。另外SPARK SQL 可以用来操作有数据结构的RDD 即 SPARKDATA FRAME

解释DAG
有向无环图(DAG,Directed Acycle graph)的分布式并行计算框架
反应RDD之间的依赖关系
提供Cache机制来支持多次迭代计算或者数据共享以减少迭代计算之间读取数据局的开销
根据用户端对RDD的指令进行优化以减少系统开销

Spark与MR比较,Spark具有如下优势:
MR通常将中间结果放到HDFS上,Spark是基于内存并行大数据框架,中间结果存放到内存,对于迭代数据Spark效率高
MR总是消耗大量时间排序,而有些场景排序,Spark可以避免不必要的排序所带来的开销
Spark是一张有向无环图(从一个点出发最终无法回到该点的一个拓扑),并对其进行优化
SPARK RDD 的运算原理和MR是一样的
大数据运算经常是交互式和迭代式的。所以数据的重用性很重要。而MR的磁盘交互读写带来I/O 开销导致速度减慢

Spark运行时的步骤
Spark在进行transformation计算的时候,不会触发Job ,只有执行action操作的时候,才会触发Job,在Driver中SparkContext根据RDD之间的依赖关系创建出DAG有向无环图,DAGScheduler负责解析这个图,解析时是以Shuffle为边界,反向解析,构建stage。将多个任务根据依赖关系划分为不同的Stage,将每个Stage的Taste Set 提交给TaskScheduler去执行,任务会在Executor进程的多个Task线程上执行,完成Task任务后 将结果信息提交到ExecutorBackend中 他会将信息提交给TaskScheduler。
TaskScheduler接到消息后通知TaskManager,移除该Task任务,开始执行下一个任务。TaskScheduler同时会将信息同步到TaskSet Manager中一份,全部任务执行完毕后TaskSet Manager将结果反馈给DAGScheduler,如果属于ResultTask 会交给JobListener。否则话全部任务执行完毕后写入数据。

MAPREDUCE的迭代式运行
MR进行多步骤运算时会发生许多磁盘读写 复制和串行出炉

MAPREDUCE的交互式运行
MR进行数据查询时每个查询命令都有I/O开销

对比SPARK

Spark关键词
(1) Application:表示你的应用程序
(2)Driver:表示main()函数,创建SparkContext。由SparkContext负责与ClusterManager通信,进行资源的申请,任务的分配和监控等。程序执行完毕后关闭SparkContext
(3)Executor:某个Application运行在Worker节点上的一个进程,该进程负责运行某些task,并且负责将数据存在内存或者磁盘上。在Spark on Yarn模式下,其进程名称为          CoarseGrainedExecutor Backend,一个CoarseGrainedExecutor Backend进程有且仅有一个executor对象,它负责将Task包装成taskRunner,并从线程池中抽取出一个空闲线程运行Task,这样,每个CoarseGrainedExecutorBackend能并行运行Task的数据就取决于分配给它的CPU的个数。
(4)Worker:集群中可以运行Application代码的节点。在Standalone模式中指的是通过slave文件配置的worker节点,在Spark on Yarn模式中指的就是NodeManager节点。
(5)Task:在Executor进程中执行任务的工作单元,多个Task组成一个Stage
(6)Job:包含多个Task组成的并行计算,是由Action行为触发的
(7)Stage:每个Job会被拆分很多组Task,作为一个TaskSet,其名称为Stage
(8)DAGScheduler:根据Job构建基于Stage的DAG,并提交Stage给TaskScheduler,其划分Stage的依据是RDD之间的依赖关系
(9)TaskScheduler:将TaskSet提交给Worker(集群)运行,每个Executor运行什么Task就是在此处分配的

Spark与其他大数据框架的区别
Spark与Hadoop的区别:spark可以直接调用mr
Spark与Storm的区别:storm用于处理大量的小块的数据集




    下载完成之后上传、解压、重命名
    [hadoop@master app]$ tar -zxvf spark-2.3.0-bin-hadoop2.7
    [hadoop@master app]$ mv spark-2.3.0-bin-hadoop2.7 spark
配置环境变量并编译
#Spark
export SPARK_HOME=/home/hadoop/app/spark
export PATH=$PATH:$SPARK_HOME/bin

配置好之后我们来试验一下统计词数
[hadoop@master ~]$ hdfs dfs -mkdir spark 创建一个spark文件夹
[hadoop@master ~]$ hdfs dfs -ls 查看创建的文件夹
[hadoop@master ~]$ hdfs dfs -put text.txt spark/ 上传一个有内容的文件
[hadoop@master ~]$ hdfs dfs -ls spark/ 查看创建的文件

然后我们来启动spark-shell
启动成功后输入如下命令
hadoop路径:
scala> val lines =
sc.textFile("hdfs://主机名:9000/user/hadoop/spark/text.txt")
本地路劲:
scala> val lines = sc.textFile("file:///home/hadoop/text.txt")
统计并输出结果:
scala> lines.map(_.split(" ")).flatMap(x => for(i <- x) yield (i,1)).reduceByKey(_+_).collect()
结果内容:
res5: Array[(String, Int)] = Array((Software,2), (President,,1), (high,1), (collaborative,1), (The,1), (is,1), (long,1), (Open,2), (advances,1), (model,1), (commitment,1), (influencers,1), (some,1), (Driver,,1), (Internet,1), (in,1), (development,1), (Lauded,1), (software,3), (for,1), (used,1), (today's,1), (solutions,1), (consistently,1), (https://s.apache.org/PIRA,1), (supporting,1), (has,1), (open,1), (served,1), (the,4), (Gartner,1), (among,1), (Source,1), (economy.",1), ("The,1), (Source,,1), (most,2), (Mark,1), (that,1), (a,2), (Foundation's,1), (Apache,2), (widely,1), (future,1), (Research,1), (as,1), ("",1), (ecosystem,1), (to,1), (cornerstone,1), (of,3), (important,1), (development.,1), (Foundation,1), (Vice,1), (successful,1), (and,1), (powering,1), (producing,1), (–,2), (qual...



猜你喜欢

转载自blog.csdn.net/qq_32297447/article/details/80385917