spark之安装,介绍01

1 Spark介绍

1.1 什么是Spark

​ spark官网地址:http://spark.apache.org
和https://databricks.com/
Spark它就是一个集成离线计算,实时计算,SQL查询,机器学习,图计算为一体的通用的计算框架。

1.2 RDD

说的太好了,都写上

何为RDD,其实RDD就是一个不可变的scala的弹性分布式并行集合。

​ Spark的核心概念就是RDD,指的是一个只读的,可分区的分布式数据集,这个数据的全部或者部分可以缓存在内存中,在多次计算间被重用。

RDD在抽象来说是一种元素集合,包含了数据。他是被分区的,分为多个分区,每个分区分布在集群中的不同worker节点上面,从而让RDD中的数据可以被并行操作。

​ RDD通常通过Hadoop上的文件,即HDFS文件或者Hive表来进行创建;也可以通过RDD的本地创建转换而来。

​ 传统的MapReduce虽然具有自动容错、平衡负载和可拓展性的优点,但是其最大缺点是采用非循环式的数据流模型,使得在迭代计算式要进行大量的磁盘IO操作。RDD正式解决这个缺点的抽象方法。

​ RDD最重要的特性就是,提供了容错性,可以自动从节点失败中恢复过来。即如果某个节点上的RDD Partition,因为节点故障,导致数据丢失,那么RDD会自动通过自己的数据来源重新计算该Partition。这一切对使用者是透明的,这一切的背后工作都是通过RDD的lineage特性来实现的。

​ RDD的数据默认情况下是存放在内存中的,但是内存资源不足的时候,Spark会自动将RDD数据溢出到磁盘(弹性)。

1.3 RDD特性

通过上述的描述,我们可以从以下几个方面来描述RDD

  1. 弹性:如果内存充足,那集合数据的存储和计算,就都在内存中完成;如果内存不足,需要有一部分数据溢出到磁盘,然后在磁盘完成存储和计算。
  1. 分布式:就和之前学习的分布式概念一样,一个集合的数据被拆分成多个部分,这每一个部分被称之为一个分区partition,还是一个scala的不可变的集合。默认情况下,partition是和hdfs中data-block块对应的,spark加载hdfs文件时,一个data-block块对应一个partition。

所以,对RDD的操作,本质上是对着每一个RDD对应分区partition的操作。

  1. 数据集:存放数据的集合
    而Spark就是对这个RDD及其集合功能算子的实现。
    RDD,弹性式分布式数据集,是Spark的第一代编程模型,spark预计将在3.0中让rdd光荣退休,转而使用Dataset来完成相应的功能。
    说白了RDD就是一个抽象数据类型:ADT。
  1. RDD之间是存在依赖关系的
    这些RDD之间的依赖关系,就形成了一个RDD的有向无环图DAG,RDD串儿,称之为RDD血缘关系或者血统,因为lineage。
    依赖关系呢,分为了两种:窄依赖和宽依赖。具体我们会在spark stage阶段划分的时候进行具体说明。
  1. 移动计算优于移动数据
    partition提供的最佳计算位置,利于数据处理的本地化即计算向数据移动而不是移动数据

​ 基于数据和计算的距离,分为了如下几个级别:

​ PROCESS_LOCAL:进程级别,数据和计算在同一个进程中

​ NODE_LOCAL: 节点级别,数据和计算在不同节点或者同一节点的不同进程

​ RACK_LOCAL:机架,说白了就是同一机架上

​ ANY:任意级别

2. Spark分布式环境的安装

​ 使用的Spark的版本是2.2.0,最新的版本应该2.4.5。

下载地址:https://archive.apache.org/dist/spark/spark-2.2.0/

提供的安装包:

spark-2.2.0.tgz ---->源码包

spark-2.2.0-bin-hadoop2.7.tgz ---->安装包

1.安装

  1. 解压scala
  2. 添加环境变量,source生效
  3. 验证
    在这里插入图片描述
  4. 解压spark
  5. 添加环境变量,source生效
  6. 修改配置文件

spark的配置文件,在$SPARK_HOME/conf目录下

1)、拷贝slaves和spark-env.sh文件

[root@bigdata01 conf]# cp slaves.template slaves
[root@bigdata01 conf]# cp spark-env.sh.template spark-env.sh

2)、修改slaves配置
配置spark的从节点的主机名,spark中的从节点叫做worker,主节点叫做Master

[root@bigdata01 conf]# vim slaves
bigdata02
bigdata03

3)修改spark-env.sh文件

添加如下内容:
export JAVA_HOME=/opt/apps/jdk1.8.0_112
export SCALA_HOME=/opt/apps/scala
export SPARK_MASTER_IP=bigdata01
export SPARK_MASTER_PORT=7077 ##rpc通信端口,类似hdfs的9000端口,不是50070
export SPARK_WORKER_CORES=2 ##每一个spark的worker从节点拥有几个cpu的core
export SPARK_WORKER_INSTANCES=1 ##每一台spark服务器上面拥有几个worker的实例
export SPARK_WORKER_MEMORY=1g ##每一个worker节点的内存资源
export HADOOP_CONF_DIR=/opt/apps/hadoop/etc/hadoop

4)同步scala和spark,环境变量到其它节点中

2.启动并体验

启动

使用$SPARK_HOME/sbin目录下的脚本start-all.sh,和hadoop中的启动脚本重名,所以建议修改之。

[root@bigdata01 spark]# mv sbin/start-all.sh sbin/start-spark-all.sh

启动命令便成为了:

start-spark-all.sh
在这里插入图片描述
停止

使用$SPARK_HOME/sbin目录下的脚本stop-all.sh

[root@bigdata01 spark]# mv sbin/stop-all.sh sbin/stop-spark-all.sh

停止命令便成为了:

stop-spark-all.sh

验证

启动起来之后,spark的主节点master会类似resourcemanager提供一个web的ui,访问地址为:

http://master-ip:8080(如:http://bigdata01:8080)
在这里插入图片描述
本地提交 spark-shell
读linux

sc.textFile("file:/root/wordcount.txt").flatMap(_.split("\\s+")).map((_,1)).reduceByKey(_+_).foreach(println)

读hdfs

sc.textFile("/test/input/wordcount.txt").flatMap(_.split("\\s+")).map((_,1)).reduceByKey(_+_).foreach(println)

集群提交

spark-shell --master spark://hadoop003:7077

3.Spark HA的环境安装

因为在目前情况下,集群中只有一个Master,如果master挂掉,便无法对外提供新的服务,显然有单点故障问题,解决方法就是master的ha。

​ 有两种方式解决单点故障,一种基于文件系统FileSystem(生产中不用),还有一种基于Zookeeper(使用)。

1.配置

​ 配置基于Zookeeper的一个ha是非常简单的,只需要在spark-env.sh中添加一句话即可。

export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=bigdata01:2181,bigdata02:2181,bigdata03:2181 -Dspark.deploy.zookeeper.dir=/spark"

因为ha不确定master在bigdata01上面启动,所以将

export SPARK_MASTER_IP=bigdata01和export SPARK_MASTER_PORT=7077注释掉

最后别忘了,同步spark-env.sh到其它机器。

同步完毕之后,重启spark集群!
bigdata01的master状态
在这里插入图片描述
bigdata02也启动master

start-master.sh,其状态为:

在这里插入图片描述
ha验证,要干掉alive的master,观察standby的master

bigdata02的状态缓慢的有standby转变为alive
在这里插入图片描述
我们看到在zookeeper的根目录下面多个一级spark目录,在spark目录下面有两个子目录:
在这里插入图片描述

2.动态增删一个worker节点到集群

上线一个节点

不需要在现有集群的配置上做任何修改,只需要准备一台worker机器即可,可和之前的worker的配置相同。
在这里插入图片描述

[root@bigdata01 spark]#  start-slave.sh -c 2 -m 1g spark://bigdata02:7077

下线一个节点

kill或者stop-slave.sh都可以

4.Spark核心概念

4.1. 名词解释

  1. ClusterManager:在Standalone(上述安装的模式,也就是依托于spark集群本身)模式中即为Master(主节点),控制整个集群,监控Worker。在YARN模式中为资源管理器ResourceManager(国内spark主要基于yarn集群运行,欧美主要基于mesos来运行)。

  2. Worker:从节点,负责控制计算节点,启动Executor。在YARN模式中为NodeManager,负责计算节点的控制,启动的进程叫Container。

  3. Driver:运行Application的main()函数并创建SparkContext(是spark中最重要的一个概念,是spark编程的入口,作用相当于mr中的Job)。

  4. Executor:执行器,在worker node上执行任务的组件、用于启动线程池运行任务。每个Application拥有独立的一组Executors。

  5. SparkContext:整个应用的上下文,控制应用的生命周期,是spark编程的入口。

  6. RDD:Spark的基本计算单元,一组RDD可形成执行的有向无环图RDD Graph。

    RDD是弹性式分布式数据集,理解从3个方面去说:弹性、数据集、分布式。

    是Spark的第一代的编程模型。

  7. DAGScheduler:实现将Spark作业分解成一到多个Stage,每个Stage根据RDD的Partition个数决定Task的个数,然后生成相应的Task set放到TaskScheduler中。

    DAGScheduler就是Spark的大脑,中枢神经。

  8. TaskScheduler:将任务(Task)分发给Executor执行。

  9. Stage:一个Spark作业一般包含一到多个Stage。

  10. Task:一个Stage包含一到多个Task,通过多个Task实现并行运行的功能。

    task的个数由rdd的partition分区决定,spark是一个分布式计算程序,所以一个大的计算任务,就会被拆分成多个小的部分,同时进行计算。一个partition对应一个task任务。

  11. Transformations:转换(Transformations) (如:map, filter, groupBy, join等),Transformations操作是Lazy的,也就是说从一个RDD转换生成另一个RDD的操作不是马上执行,Spark在遇到Transformations操作时只会记录需要这样的操作,并不会去执行,需要等到有Actions操作的时候才会真正启动计算过程进行计算。

  12. Actions:操作/行动(Actions)算子 (如:count, collect, foreach等),Actions操作会返回结果或把RDD数据写到存储系统中。Actions是触发Spark启动计算的动因。

  13. SparkEnv:线程级别的上下文,存储运行时的重要组件的引用。SparkEnv内创建并包含如下一些重要组件的引用。

  14. MapOutPutTracker:负责Shuffle元信息的存储。

  15. BroadcastManager:负责广播变量的控制与元信息的存储。

  16. BlockManager:负责存储管理、创建和查找块。

  17. MetricsSystem:监控运行时性能指标信息。

  18. SparkConf:负责存储配置信息。作用相当于hadoop中的Configuration。

4.2. Spark组件官网说明

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值