Spark学习(一)——入门与集群搭建

现在来学一学spark这个内存计算引擎,主要应用于大规模数据的计算。

一、简介

和MapReduce都是计算引擎,但两者还是有很大区别的,MapReduce计算的中间数据都是存储在硬盘上的,而Spark计算的中间数据都是存储在内存里的,除非有说明说让Spark把中间数据存储到硬盘上。这样可想而知基于内存,Spark的运行效率就比MapReduce快了许多了。

下图举例:把这么一座山当成是大规模的数据,开发商要把山上的树用去做桌子就相当于做计算,于是分配工人p们去山上砍树,多个不同的工人们在砍树就相当于是在并行计算,这大概就是云计算的思想:计算向数据移动,即移动的计算而不是数据, 最终目的就是提高计算效率。

图片.png

二、Spark架构

搭建过hadoop集群架构,也就熟悉了套路,spark集群架构也是采用主从架构(master主节点和worker从节点),master节点管理着各个worker节点,从而也就掌握着整个集群的资源。

三、Spark下载安装

直接去官网http://spark.apache.org/ 下载,不过下载时注意,spark版本要对应还hadoop的版本,我的hadoop版本安装的是2.6.4所以要勾选好对应的spark包,目前我选择的是spark2.4.3搭配hadoop2.6.4。

四、Spark集群搭建

  • 1、软件安装
    需要用到hadoop,java,scala,spark,直接把下载好的文件从windows上传到linux服务器上,再使用tar -zxvf -C 文件名命令解压文件,hadoop和java的安装我就不提了,自行百度。接下来是scala的安装配置,同样是下载好上传到linux服务器然后解压,之后输入命令vi /etc/profile修改这个文件把scala的安装目录给加进去PATH属性中,:wq命令保存退出,再输入source /etc/profile命令使环境变量生效,最后输入命令scala -version查看是否安装scala成功。
  • 2、spark环境配置
    cd /usr/local/spark/conf到此目录下,找到spark-env.sh.templete文件改个名为spark-env.sh,再加入以下代码,对应注释在里面。注意:以下路径只是我个人电脑路径,大家自行修改为各自的软件安装路径。
JAVA_HOME=/usr/java/default     #java安装路径
SCALA_HOME=/usr/local/scala   #scala安装路径
HADOOP_HOME=/usr/local/hadoop   #hadoop安装路径
SPARK_MASTER_PORT=7077   #资源申请端口
SPARK_MASTER_WEBUI_PORT=8888   #对外访问web界面端口
SPARK_MASTER_IP=10.14.28.100   #spark集群的master节点的IP地址
SPARK_MASTER_OPTS="-Dspark.worker.timeout=100"   #从节点发送心跳给主节点的超时时间,使得主节点才知道从节点的生存状态
SPARK_WORKER_MEMORY=3G   #每个worker节点最大能分配给executors的内存大小
SPARK_WORKER_CORES=2   #每个worker节点所占有的CPU核数目
SPARK_WORKER_INSTANCES=1   #每台机器上开启的worker节点的数目
SPARK_LOCAL_DIRS=/var/spark   #集群运行本地目录
SPARK_WORKER_DIR="/var/spark/work"   #存放任务在计算中产生的中间数据
SPARK_WORKER_OPTS="-Dspark.worker.cleanup.enabled=true -Dspark.worker.cleanup.appDataTtl=259200"   #开启自动清空worker工作目录区的功能,后面是数据有效期
  • 3、配置spark/conf目录下的slaves文件,这跟我之前搭建hadoop集群时候一样写上管理着的各个slave机器就好,然后cd /usr/local到目录下,使用命令scp -r spark slave1:/usr/local把spark安装拷贝到slave1机器的同个路径下,后面同理slave2、slave3机器。附:关于scp拷贝命令的解析
  • 4、之后进入sbin目录下把start-all.shstop-all.sh脚本名给修改掉,因为hadoop集群也有这2个脚本,怕执行命令时冲突了。
    图片.png
  • 5、最后使用命令vi /etc/profile修改PATH环境变量,把spark的bin路径和sbin路径加进去,这样就可以在所有命令下执行这个脚本命令了,注意:修改完后要source /etc/profile下,使环境变量生效。
  • 6、我把集群所有节点都启动起来了,包括之前搭建的hadoop集群的yarn和hdfs,截图如下:
    图片.png
    图片.png

五、谈谈主从架构的单点故障

  • 1、什么是单点故障?
    通常分布式系统采用的是主从架构,由一个主节点管理着一堆从节点,主节点分发业务,从节点处理业务。单点故障就是当主节点挂了,整个系统就挂了,这就是由一个主节点引发的故障,称为单点故障,但如果是一个从节点挂了对集群对外提供服务是不会有影响的。
  • 2、传统方式解决单点故障
    多加一个备用主节点。期间过程如下:
    image.png
    不过上图会有特殊情况,就是当由于网络震荡导致主节点接收数据时丢失了一部分,也就是少包,这会导致备用主节点误认为主节点发生故障了从而顶替了主节点,导致出现了多主的现象。
  • 3、使用zookeeper注册服务解决单点故障
    分布式锁主要有zookeeper实现,主节点在使用时,备用主节点会被加锁而阻塞作为备用主节点。解决过程如下图:
    何为分布式锁?
    就是为了控制多个进程访问同一个资源时,这个资源能被有序访问,主要控制进程的加锁、解锁、锁超时。
    分布式协调可以解决多个进程的同步控制,主要核心是实现了分布式锁,而zookeeper是一个分布式协调服务。
    image.png

六、Spark部署的几种模式

  • 1、local(本地模式):常用于本地开发测试,该模式不会提交任务导集群中,只在本节点执行,分为local单线程和local-cluster多线程,不需要启动Master进程和Worker进程。有local:只启动一个executorlocal[k]:启动k个executorlocal[*]:启动跟cpu数目相同的executor
  • 2、Standalone(集群模式):分布式部署集群,自带完整服务,资源管理和任务监控都是spark自己搞定。
  • 3、spark on yarn(集群模式):分布式部署集群,但把资源和任务监控交给yarn管理,spark直连yarn,不需要额外构建spark集群,有yarn-client和yarn-cluster两种模式,主要区别在于:Driver程序的运行节点,即cluster模式的driver运行在集群子节点,有容错功能,client模式的driver运行在客户端。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容