Spark简介及安装

2019-12-11

 Spark简介

官网:http://spark.apache.org/

Spark是一种快速、通用、可扩展 的 大数据分析引擎,2009年诞生于加州大学伯克利分校AMPLab,2010年开源,2013年6月成为Apache孵化项目,2014年2月成为Apache顶级项目。项目是用Scala进行编写

目前,Spark生态系统已经发展成为一个包含多个子项目的集合,其中包含SparkSQL、Spark Streaming、GraphX、MLib、SparkR等子项目,Spark是基于内存计算的大数据并行计算框架。除了扩展了广泛使用的 MapReduce 计算模型,而且高效地支持更多计算模式,包括交互式查询和流处理。Spark 适用于各种各样原先需要多种不同的分布式平台的场景,包括批处理、迭代算法、交互式查询、流处理。通过在一个统一的框架下支持这些不同的计算,Spark 使我们可以简单而低耗地把各种处理流程整合在一起。而这样的组合,在实际的数据分析 过程中是很有意义的。不仅如此,Spark 的这种特性还大大减轻了原先需要对各种平台分 别管理的负担。

 

Spark特点

1)

扫描二维码关注公众号,回复: 8161463 查看本文章

与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的安装包下载

另外的两种下载方式:

http://archive.apache.org/dist

https://github.com/apache/spark

Spark集群安装

Spark集群是一个典型的主从模式(Master-Slave)
Master是主节点,主要是负责管理worker(集群节点运行任务)和Driver(任务)
Slave是从节点,在Spark中是worker

前提:时间同步(ntpdate ntp1.aliyun.com),免密登陆,JDK1.8,iptables配置

服务器IP:

  Master:hadoop01

  Worker:hadoop02

  Worker:hadoop03

1.上传并解压缩

tar -zxvf ./spark-2.2.0-bin-hadoop2.7.tgz -C /opt/software/

2.进入当前Spark的安装路径中,进入到conf目录下进行文件配置

cd /opt/software/spark-2.2.0-bin-hadoop2.7/conf

3.对conf目录中的spark-env.sh文件进行配置

mv spark-env.sh.template spark-env.sh

vim spark-env.sh

在文件的末尾添加

export JAVA_HOME=/opt/software/jdk1.8.0_221 (JDK安装路径)
export SPARK_MASTER_IP=hadoop01 (主节点的IP地址,需要注意配置了hosts文件就写主机名否则写IP)
export SPARK_MASTER_PORT=7077 (主节点通信端口号即内部通信端口号)

4.配置slaves

mv slaves.template slaves

vim slaves

hadoop02
hadoop03
hadoop04
ps: 需要注意配置了hosts文件就写主机名否则写IP;删除原有localhost,添加自己的新worker节点(根据自己节点适当删减)

5.分发

scp -r ./spark-2.2.0-bin-hadoop2.7/ root@hadoop02:$PWD

scp -r ./spark-2.2.0-bin-hadoop2.7/ root@hadoop03:/opt/software/
ps: $PWD必须是在当前安装spark目录下执行 否则就写全路径

6.配置环境变量

#vim /etc/profile

export SPARK_HOME=/opt/software/spark-2.2.0-bin-hadoop2.7

export $PATH=$PATH:$SPARK_HOME/bin

#source /etc/profile

7.启动集群

ps:因为Spark的集群启动命令和Hadoop的启动命令是一样的,所以需要进入Spark的sbin目录下
./start-all.sh
支持使用jps命了进行进程查询
只要节点启动master 或 worker就证明当前spark 集群启动成功

spark是存在webUI界面的, master的IP地址:8080

Spark的运行模式

Local: 本地模式.多用于在编译器中书写spark代码用自己的电脑模拟spark运行

Standalone 是Spark自带的一个资源调用框架,它支持完全分布式(搭建的就是这个模式)

Yarn Hadoop生态圈中提供的资源调度框架,Spark完全支持 Spark on Yarn

Messos 独立资源调度框架,必须独立安装,很少很少很少使用

Spark运行程序和任务调教流程

#案例一:计算 π
cd $SPARK_HOME/bin
./spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://hadoop01:7077 \
/opt/software//spark-2.2.0-bin-hadoop2.7/examples/jars/spark-examples_2.11-2.2.0.jar 100


说明:
1)spark-submit    提交jar到集群
2)-- class    指定要运行类(这个类是存在main方法的类)
3)--master    提交到集群中主节点(即master是谁)
4)最后是jar包存在的路径并且和执行的参数

 提交任务的节点会启动一个Driver进程:

PS:Client提交任务的客户端

Driver进程启动后,首先会构建SparkContext对象,SparkContext主要包含两个部分DAGScheduler和TaskScheduler

TaskScheduler会寻找Master节点,向Master阶段注册Application信息,然后Master通过调度算法,在自己集群的worker上启动Executor进程,Executor启动后会反向注册到TaskScheduler上,

注册成功,TaskSheduler会发送任务到Executor上执行

Executor进程内部会维护一个线程池,Executor没接收一个task都会用TaskRunner封装,然后从线程池中取出一个线程执行task,TaskRunner主要包含两种:shuffleMap Task和Result Task

除了最后一个Stage是resultTask之外,其他的都是shuffleMap。

Driver进程,划分成一个一个Stage,这个Stage的触发存在宽窄依赖关系,一个action算子触发就是一个job的产生

名次解释:

Standalone模式下存在的角色:

client:负责提交作业

Master:Standalone模式中主节点,负责接收Client提交的作业,管理worker,并命令worker启动Executor,Driver的启动也是归master完成;

worker: Standalone模式中从节点,负责管理本节点的资源,定期向Master汇报心跳信息没接收Master命令,启动Executor(cluster模式下Worker会启动Driver);

Driver:一个Spark作业运行包含一个Driver进程,也是作业的主进程,负责解析作业,生成Stage并调度Task到Executor,包含DAGScheduler和TaskScheduler;

Executor:真正执行task的地方,一个集群中包含多个Executor,每个Executor接收Driver的命令执行task,一个Executor可以执行一个到到多个task

在提交任务到集群的时候,除了执class 和 master之外还可以指定 Executor使用资源情况
spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://hadoop01:7077 \
--executor-memory 512M \
--total-executor-cores 2 \
/opt/software//spark-2.2.0-bin-hadoop2.7/examples/jars/spark-examples_2.11-
2.2.0.jar 100
修改Executor的内存信息 --executor-memory 内存大小[M或G] 内存大小必须小于等于实际节点内
存大小
修改Executor的核心数 --total-executor-cores 数值 这个数值是小于等于整个集群中核心数的
大小

  

 

猜你喜欢

转载自www.cnblogs.com/yumengfei/p/12026084.html