搭建Spark真实分布式运行环境

2024-08-28 22:58

本文主要是介绍搭建Spark真实分布式运行环境,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

搭建Spark真实分布式运行环境

文章目录

  • 搭建Spark真实分布式运行环境
    • 配置不依赖于HDFS的spark standslone模式
      • 准备工作
        • 配置基本环境
        • 配置免密登录
      • 分布式spark standalone 环境部署,不依赖于HDFS
        • 配置spark-env.sh文件
        • 配置 slaves.template 文件
        • 将配置好的spark文件分发至slaves机器
        • 启动spark
      • 测试
        • 添加slave1和slave2到master的免密登录
      • 运行spark执行任务

Spark是一个计算分析平台,使用内存进行计算,相当于只是一个计算框架。

Hadoop是一个大数据平台,使用磁盘进行计算。包括HDFS存储平台,MapReduce计算分析平台,Yarn资源调度平台。

Spark部署模式:

Local

Standalone

Yarn

Mesos

具体有什么样的区别,请参考:https://blog.csdn.net/WYpersist/article/details/79731621

一点点小结:

1.local(本地模式):常用于本地开发测试,本地分为local单线程和local-cluster多线程

2.standalone(集群模式):典型的Mater/slave模式,不过也能看出Master是有单点故障的;Spark支持ZooKeeper来实现 HA

3.on yarn(集群模式):运行在 yarn 资源管理器框架之上,由 yarn 负责资源管理,Spark 负责任务调度和计算

4.on mesos(集群模式):运行在 mesos 资源管理器框架之上,由 mesos 负责资源管理,Spark 负责任务调度和计算

5.on cloud(集群模式):比如 AWS 的 EC2,使用这个模式能很方便的访问 Amazon的 S3;Spark 支持多种分布式存储系统:HDFS 和 S3

由于只想跑spark,暂时用不到HDFS,所以就了解了一下:

在这里插入图片描述

配置standalone模式,不一定需要配置hadoop,因为可以不需要HDFS,从本地文件读取数据需要在每台机器上保证路径一致,或者可以使用NFS代替HDFS。

配置不依赖于HDFS的spark standslone模式

准备工作

配置基本环境

基本环境(在三台虚拟机上 ubuntu18.04):

安装统一在 /home/wj/apps/ 目录下

Java:1.8.0

Scala:2.11.8

Maven:3.5.4

配置免密登录

免密登录,现在只配置master免密登录slaves ,我的虚拟机的IP信息如下:

spark-master :192.168.73.134
spark-slave1 :192.168.73.135
spack-slave2 :192.168.73.137

安装ssh-server,ubuntu 18.04中只默认安装了 ssh-agent,可以使用命令 ps –e | grep ssh查看。

sudo apt-get install openssh-server

开启ssh-server服务:

service sshd restart

在 master 上执行 ssh-keygen -t rsa 生成对应 rsa key pair ,在 ~/.ssh/ 目录下

将 id_rsa.pub 内容拷贝至 authorized_keys,将这个 authorized_keys 文件放置在 slaves 机器上的 .ssh 目录下便可从该 master 单向免密登录。

注意,有时需要修改 authorized_keys 的权限:

chmod 600 authorized_keys

Host文件配置

为了不直接使用IP,可以通过设置hosts文件达到ssh Spark-slave1这样的的效果(三个节点设置相同)

sudo gedit /etc/hosts

在文件尾部添加如下行,保存后退出:

192.168.73.134	spark-master
192.168.73.135	spark-slave1
192.168.73.137	spark-slave2

测试,可通过在spark-master上通过 ssh spark-slave1 命令登录到 spark-slave1 上

(如果slave需要免密登录master,还需要继续配置,这里暂时先不进行配置,一种完全错误的侥幸心理

分布式spark standalone 环境部署,不依赖于HDFS

使用spark版本为官网下载预编译版本:spark-2.2.0-bin-hadoop2.7.tgz

安装在 /home/wj/apps/ 目录下

配置spark-env.sh文件
cd conf/
mv spark-env.sh.template spark-env.sh
gedit spark-env.sh

在后面添加 :

export JAVA_HOME=/home/wj/apps/jdk1.8.0_181
export SPARK_MASTER_IP=spark-master
export SPARK_MASTER_PORT=7077
配置 slaves.template 文件
mv slaves.template slaves
gedit slaves

在后面添加 :

spark-slave1
spark-slave2
将配置好的spark文件分发至slaves机器
scp -r spark-2.2.0-bin-hadoop2.7 spark-slave1:/home/wj/apps/
scp -r spark-2.2.0-bin-hadoop2.7 spark-slave2:/home/wj/apps/
启动spark

在spark下的文件夹sbin中,执行命令:

./start-all.sh

可见到:

spark-master:

在这里插入图片描述

spark-slave1:

在这里插入图片描述

spark-slave2:

在这里插入图片描述

配置完成

测试

通过master主机上访问http://localhost:8080/ 发现Alive workers只有1,且过一段时间之后,slave1和slave2上的worker会死掉,考虑大概率是因为ssh免密登录是单向的。

添加slave1和slave2到master的免密登录

在slave1和slave2上生成公钥私钥对(按照上述方式),然后使用ssh-copy-id命令直接完成权限授予,在当前机器下,若想访问某台机器,便将其公钥复制到某台机器上。

ssh-copy-id 命令可以把本地主机的公钥复制到远程主机的authorized_keys文件上,ssh-copy-id命令也会给远程主机的用户主目录(home)和~/.ssh, 和~/.ssh/authorized_keys设置合适的权限。

现在三台机器之间互相可以免密登录。

再次启动,slaves 上的 worker 不会自动死掉。

但是:Alive workers仍然显示只有1个,在网上查询了一下,问题原因如下,解决方案也很简单,在master机器上屏蔽127.0.0.1相关的映射就可以了

在这里插入图片描述
但是,在后一次实践中,发现这个操作方式存在两点问题

第一,如果127.0.1.1这个地址映射到了nameserver中,即nameserver必须采用这个地址进行域名解析,该文件在/etc/resolv.conf中,如果在/etc/hosts中删除的话,会造成无法联网的问题。在ubuntu16.04中,在我实践过程中,是这个地址,在ubuntu18.04中为127.0.0.53,删除之后无故障。在虚拟机集群中,删除之后该问题得到解决,但是在物理机上,发现并没有解决问题。

第二,发现最终原因在于/spark/conf/spark-env.sh的配置写得太简陋了,关于slave相关的信息不全,补全之后,这个问题得到了解决。

之前的配置信息:

export JAVA_HOME=/home/wj/apps/jdk1.8.0_181
export SPARK_MASTER_IP=spark-master
export SPARK_MASTER_PORT=7077

适当补全之后的配置信息:

export JAVA_HOME=/home/wj/apps/jdk1.8.0_181
export SPARK_MASTER_IP=spark-master
export SPARK_MASTER_PORT=7077
export SPARK_MASTER_HOST=spark-master
export SPARK_LOCAL_IP=spark-slave

环境整体上应该配置完成

运行spark执行任务

通过bin目录下的spark-shell启动scala面板,需要给超级权限

sudo ./spark-shell --master spark://spark-master:7077 --executor-memory 512m --total-executor-cores 3

--master 如果在机群中有多个spark集群,需要使用这个参数指定具体是哪一个spark集群

如果只使用 --master 参数,则启动的是单机版本,启动多机版本需要指定后面两个参数,第一个参数表示每台机器可用的内存,第二个参数表示所有机器加起来可以使用的core数。

这与sparkUI上的一致,每个application需要提供cores和memory

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

这篇关于搭建Spark真实分布式运行环境的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1116124

相关文章

本地搭建DeepSeek-R1、WebUI的完整过程及访问

《本地搭建DeepSeek-R1、WebUI的完整过程及访问》:本文主要介绍本地搭建DeepSeek-R1、WebUI的完整过程及访问的相关资料,DeepSeek-R1是一个开源的人工智能平台,主... 目录背景       搭建准备基础概念搭建过程访问对话测试总结背景       最近几年,人工智能技术

在Mysql环境下对数据进行增删改查的操作方法

《在Mysql环境下对数据进行增删改查的操作方法》本文介绍了在MySQL环境下对数据进行增删改查的基本操作,包括插入数据、修改数据、删除数据、数据查询(基本查询、连接查询、聚合函数查询、子查询)等,并... 目录一、插入数据:二、修改数据:三、删除数据:1、delete from 表名;2、truncate

通过prometheus监控Tomcat运行状态的操作流程

《通过prometheus监控Tomcat运行状态的操作流程》文章介绍了如何安装和配置Tomcat,并使用Prometheus和TomcatExporter来监控Tomcat的运行状态,文章详细讲解了... 目录Tomcat安装配置以及prometheus监控Tomcat一. 安装并配置tomcat1、安装

mysqld_multi在Linux服务器上运行多个MySQL实例

《mysqld_multi在Linux服务器上运行多个MySQL实例》在Linux系统上使用mysqld_multi来启动和管理多个MySQL实例是一种常见的做法,这种方式允许你在同一台机器上运行多个... 目录1. 安装mysql2. 配置文件示例配置文件3. 创建数据目录4. 启动和管理实例启动所有实例

5分钟获取deepseek api并搭建简易问答应用

《5分钟获取deepseekapi并搭建简易问答应用》本文主要介绍了5分钟获取deepseekapi并搭建简易问答应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1、获取api2、获取base_url和chat_model3、配置模型参数方法一:终端中临时将加

IDEA运行spring项目时,控制台未出现的解决方案

《IDEA运行spring项目时,控制台未出现的解决方案》文章总结了在使用IDEA运行代码时,控制台未出现的问题和解决方案,问题可能是由于点击图标或重启IDEA后控制台仍未显示,解决方案提供了解决方法... 目录问题分析解决方案总结问题js使用IDEA,点击运行按钮,运行结束,但控制台未出现http://

解决Spring运行时报错:Consider defining a bean of type ‘xxx.xxx.xxx.Xxx‘ in your configuration

《解决Spring运行时报错:Considerdefiningabeanoftype‘xxx.xxx.xxx.Xxx‘inyourconfiguration》该文章主要讲述了在使用S... 目录问题分析解决方案总结问题Description:Parameter 0 of constructor in x

解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题

《解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题》文章详细描述了在使用lombok的@Data注解标注实体类时遇到编译无误但运行时报错的问题,分析... 目录问题分析问题解决方案步骤一步骤二步骤三总结问题使用lombok注解@Data标注实体类,编译时

VScode连接远程Linux服务器环境配置图文教程

《VScode连接远程Linux服务器环境配置图文教程》:本文主要介绍如何安装和配置VSCode,包括安装步骤、环境配置(如汉化包、远程SSH连接)、语言包安装(如C/C++插件)等,文中给出了详... 目录一、安装vscode二、环境配置1.中文汉化包2.安装remote-ssh,用于远程连接2.1安装2

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j