搭建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

相关文章

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

Java -jar命令如何运行外部依赖JAR包

《Java-jar命令如何运行外部依赖JAR包》在Java应用部署中,java-jar命令是启动可执行JAR包的标准方式,但当应用需要依赖外部JAR文件时,直接使用java-jar会面临类加载困... 目录引言:外部依赖JAR的必要性一、问题本质:类加载机制的限制1. Java -jar的默认行为2. 类加

python获取cmd环境变量值的实现代码

《python获取cmd环境变量值的实现代码》:本文主要介绍在Python中获取命令行(cmd)环境变量的值,可以使用标准库中的os模块,需要的朋友可以参考下... 前言全局说明在执行py过程中,总要使用到系统环境变量一、说明1.1 环境:Windows 11 家庭版 24H2 26100.4061

如何搭建并配置HTTPD文件服务及访问权限控制

《如何搭建并配置HTTPD文件服务及访问权限控制》:本文主要介绍如何搭建并配置HTTPD文件服务及访问权限控制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、安装HTTPD服务二、HTTPD服务目录结构三、配置修改四、服务启动五、基于用户访问权限控制六、

java -jar命令运行 jar包时运行外部依赖jar包的场景分析

《java-jar命令运行jar包时运行外部依赖jar包的场景分析》:本文主要介绍java-jar命令运行jar包时运行外部依赖jar包的场景分析,本文给大家介绍的非常详细,对大家的学习或工作... 目录Java -jar命令运行 jar包时如何运行外部依赖jar包场景:解决:方法一、启动参数添加: -Xb

pytest+allure环境搭建+自动化实践过程

《pytest+allure环境搭建+自动化实践过程》:本文主要介绍pytest+allure环境搭建+自动化实践过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、pytest下载安装1.1、安装pytest1.2、检测是否安装成功二、allure下载安装2.

使用vscode搭建pywebview集成vue项目实践

《使用vscode搭建pywebview集成vue项目实践》:本文主要介绍使用vscode搭建pywebview集成vue项目实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录环境准备项目源码下载项目说明调试与生成可执行文件核心代码说明总结本节我们使用pythonpywebv

VS配置好Qt环境之后但无法打开ui界面的问题解决

《VS配置好Qt环境之后但无法打开ui界面的问题解决》本文主要介绍了VS配置好Qt环境之后但无法打开ui界面的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目UKeLvb录找到Qt安装目录中designer.UKeLvBexe的路径找到vs中的解决方案资源

eclipse如何运行springboot项目

《eclipse如何运行springboot项目》:本文主要介绍eclipse如何运行springboot项目问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目js录当在eclipse启动spring boot项目时出现问题解决办法1.通过cmd命令行2.在ecl

Windows Server 2025 搭建NPS-Radius服务器的步骤

《WindowsServer2025搭建NPS-Radius服务器的步骤》本文主要介绍了通过微软的NPS角色实现一个Radius服务器,身份验证和证书使用微软ADCS、ADDS,具有一定的参考价... 目录简介示意图什么是 802.1X?核心作用802.1X的组成角色工作流程简述802.1X常见应用802.