Spark学习2
Posted 半觞盛夏半觞秋
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spark学习2相关的知识,希望对你有一定的参考价值。
1.Spark程序监控端口
- 4040:运行的Application临时绑定的端口,多个程序同时运行会顺延
- 8080:在StandAlone下,Master角色的Web端口
- 18080:历史服务器的端口,可以查看历史任务的运行状态
2.Spark程序运行的四个层级
- 4040端口查看的是一个运行的程序的页面。相当于Application
- 每个Application中都至少有一个子任务Job
- 每个子任务Job会分成多个阶段Stage
- 每个阶段Stage会有多个线程Task来完成
3.StandAlone原理
- Master和Worker角色以独立进程的形式存在,并组成Spark运行时环境(集群); 而在Local模式中,Master、Worker和Driver都是一体的,都是Local进程本身
4.Spark角色在StandAlone中的分布
- Master角色:Master进程,管理整个集群的资源
- Worker角色:Worker进程,管理单台服务器的资源
- Driver角色:在任务运行时,Driver角色以线程方式运行在Master中,用于管理任务的执行
- Executor角色:在任务进行时,Executor角色以线程方式运行在Worker内,用于真正执行任务
5.高可用性集群(Highly Available)
- 目的:解决单点故障
- 方案:留几个备选(StandBy)的Master,Master要想从Standby转化为Active,必须向zookeeper注册;主备切换不会影响正在运行的Job,只会影响新Job的提交
- 基于zookeeper做状态的维护,开启多个Master进程,一个作为活跃,其他的作为备份,当活跃的Master宕机后,备份Master进行接管
6.Spark On Yarn
- 让Spark的计算任务运行在YARN的容器内部,资源管理交由YARN完成
- spark不再进行资源的管理,只进行计算任务的管理和执行
- 集群资源管理由Yarn的ResourceManager担任
- 单机资源管理由Yarn的NodeManager担任
- Driver角色运行在Yarn容器内,或者提交任务的客户端进程中
- 真正干活的Executor运行在YARN提供的容器内
7.Spark On Yarn需要什么
- Yarn集群
- Spark客户端工具,如spark-submit:用于将Spark程序提交到YARN中
- 需要被提交的代码程序
8.Spark On Yarn的两种部署模式
一种是Cluster模式,一种是Client模式。区别在于:Driver运行的位置。
- Cluster模式:Driver运行在YARN容器内部,和ApplicationMaster在同一个容器内
- Client模式:Driver运行在客户端进程中,比如Driver运行在spark-submit程序的进程中
9.两种模式的任务提交流程
Client模式:
Cluster模式:
- 容器不是一起构建的,不管是哪个模式,第一个被构建的容器永远是ApplicationMaster所在的容器;然后ApplicationMaster通过向Driver询问需要多少executor,然后向ResourceManager询问资源够不够,然后再向NodeManager分配容器用于运行executor
10.编程入口SparkContext对象
Spark Application的程序入口为SparkContext,创建过程如下:
- 第一步:创建SparkConf对象
- 用于设置Application的基本信息,比如应用的名称AppName和应用的运行Master
- 第二步:基于SparkConf对象,创建SparkContext对象
conf = SparkConf().setAppName(appName).setMaster(master)
sc = SparkContext(conf=conf)
Spark学习笔记—01 Spark集群的安装
一、概述
关于Spark是什么、为什么学习Spark等等,在这就不说了,直接看这个:http://spark.apache.org,
我就直接说一下Spark的一些优势:
1、快
与Hadoop的MapReduce相比,Spark基于内存的运算要快100倍以上,基于硬盘的运算也要快10倍以上。Spark实现了高效的DAG执行引擎,可以通过基于内存来高效处理数据流。
2、易用
Spark支持Java、Python和Scala的API,还支持超过80种高级算法,使用户可以快速构建不同的应用。而且Spark支持交互式的Python和Scala的shell,可以非常方便地在这些shell中使用Spark集群来验证解决问题的方法。
3、通用
Spark提供了统一的解决方案。Spark可以用于批处理、交互式查询(Spark SQL)、实时流处理(Spark Streaming)、机器学习(Spark MLlib)和图计算(GraphX)。这些不同类型的处理都可以在同一个应用中无缝使用。Spark统一的解决方案非常具有吸引力,毕竟任何公司都想用统一的平台去处理遇到的问题,减少开发和维护的人力成本和部署平台的物力成本。
4、兼容性
Spark可以非常方便地与其他的开源产品进行融合。比如,Spark可以使用Hadoop的YARN和Apache Mesos作为它的资源管理和调度器,并且可以处理所有Hadoop支持的数据,包括HDFS、HBase和Cassandra等。这对于已经部署Hadoop集群的用户特别重要,因为不需要做任何数据迁移就可以使用Spark的强大处理能力。Spark也可以不依赖于第三方的资源管理和调度器,它实现了Standalone作为其内置的资源管理和调度框架,这样进一步降低了Spark的使用门槛,使得所有人都可以非常容易地部署和使用Spark。此外,Spark还提供了在EC2上部署Standalone的Spark集群的工具。
还有总结一句话:Spark是MapReduce的替代方案,而且兼容HDFS、Hive,可融入Hadoop的生态系统,以弥补MapReduce的不足。
二、集群安装
我们在自己的机器上就不要起那么多虚拟机了,就起3台虚拟机就够了(一台Master,两台Worker),当然了你的Linux机器需要先安装JDK和hdfs,我们要安装Spark-1.6.1最好使用JDK7以上。
先简单介绍一下Spark集群的一些概念:
Spark集群包括Master和Worker,Master只有一个,Worker可以有多个,Master和Worker之间通过RPC保持联系;
Master负责管理元数据,Worker负责运行Task,其中细节以后再详细介绍;
还有一个Driver,它就相当于Spark集群的客户端,主要负责向Spark集群提交任务,其中细节以后再详细介绍。
1、下载安装包
就不用写了,我们下载Spark-1.6.1
2、上传安装包并解压
解压安装包到指定位置:(这里我使用的是spark用户,把spark-1.6.1-bin-hadoop2.6.tgz 解压到了我的宿主目录下了)
tar -zxvf spark-1.6.1-bin-hadoop2.6.tgz –C /home/spark
3、配置Spark
进入Spark安装目录下的conf目录,重命名并修改spark-env.sh.template文件:
cd conf/
mv spark-env.sh.template spark-env.sh
在spark-env.sh添加以下配置:
vi spark-env.sh
export JAVA_HOME=[你的JDK_HOME目录]
export SPARK_MASTER_IP=[Spark集群的Master所在节点的地址:Master]
export SPARK_MASTER_PORT=7077[这个端口号是Driver连接Spark集群的端口]
重命名并修改slaves.template文件:
mv slaves.template slaves
在该文件中添加子节点所在的位置(即Worker节点):
vi slaves
[第一个Worker节点的地址:Worker1]
[第二个Worker节点的地址:Worker2]
将配置好的Spark拷贝到其他节点上:
scp -r spark-1.6.1-bin-hadoop2.6/ worker1:/home/spark
scp -r spark-1.6.1-bin-hadoop2.6/ worker2:/home/spark
4、安装完毕 测试启动
到此Spark集群安装完毕,需要启动测试一下,目前是1个Master,2个Work,在Master上启动Spark集群:(注意:不要在Worker上启动start-all,具体细节以后再介绍)
/home/spark/spark-1.5.2-bin-hadoop2.6/sbin/start-all.sh
(start-all.sh 就会启动Master和所有Worker,就不需要去每个Worker上启动了)
启动后在每台机器上执行jps命令,主节点上有Master进程,其他子节点上有Worker进程,登录Spark管理界面查看集群状态(登录地址必须是Master节点,因为Spark WebUI在Master节点上):
到此为止Spark集群安装完毕
但是有一个很大的问题,那就是Master节点存在单点故障,要解决此问题,就要借助zookeeper,并且启动至少两个Master节点来实现高可靠,这个也比较简单,等待以后再介绍。当然了Worker也会挂掉,但是Worker的死活是由Master监听的,Master和Worker之间一直会有心跳,一旦Worker挂掉Master感知到以后就会把挂掉的Worker上运行的任务重新分配到其他的Worker上,具体细节待以后再介绍。
以上是关于Spark学习2的主要内容,如果未能解决你的问题,请参考以下文章
spark系列-2Spark 核心数据结构:弹性分布式数据集 RDD