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

相关文章

MySQL多实例管理如何在一台主机上运行多个mysql

《MySQL多实例管理如何在一台主机上运行多个mysql》文章详解了在Linux主机上通过二进制方式安装MySQL多实例的步骤,涵盖端口配置、数据目录准备、初始化与启动流程,以及排错方法,适用于构建读... 目录一、什么是mysql多实例二、二进制方式安装MySQL1.获取二进制代码包2.安装基础依赖3.清

Go语言编译环境设置教程

《Go语言编译环境设置教程》Go语言支持高并发(goroutine)、自动垃圾回收,编译为跨平台二进制文件,云原生兼容且社区活跃,开发便捷,内置测试与vet工具辅助检测错误,依赖模块化管理,提升开发效... 目录Go语言优势下载 Go  配置编译环境配置 GOPROXYIDE 设置(VS Code)一些基本

在IntelliJ IDEA中高效运行与调试Spring Boot项目的实战步骤

《在IntelliJIDEA中高效运行与调试SpringBoot项目的实战步骤》本章详解SpringBoot项目导入IntelliJIDEA的流程,教授运行与调试技巧,包括断点设置与变量查看,奠定... 目录引言:为良驹配上好鞍一、为何选择IntelliJ IDEA?二、实战:导入并运行你的第一个项目步骤1

Windows环境下解决Matplotlib中文字体显示问题的详细教程

《Windows环境下解决Matplotlib中文字体显示问题的详细教程》本文详细介绍了在Windows下解决Matplotlib中文显示问题的方法,包括安装字体、更新缓存、配置文件设置及编码調整,并... 目录引言问题分析解决方案详解1. 检查系统已安装字体2. 手动添加中文字体(以SimHei为例)步骤

Java JDK1.8 安装和环境配置教程详解

《JavaJDK1.8安装和环境配置教程详解》文章简要介绍了JDK1.8的安装流程,包括官网下载对应系统版本、安装时选择非系统盘路径、配置JAVA_HOME、CLASSPATH和Path环境变量,... 目录1.下载JDK2.安装JDK3.配置环境变量4.检验JDK官网下载地址:Java Downloads

Jenkins分布式集群配置方式

《Jenkins分布式集群配置方式》:本文主要介绍Jenkins分布式集群配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装jenkins2.配置集群总结Jenkins是一个开源项目,它提供了一个容易使用的持续集成系统,并且提供了大量的plugin满

SQLite3 在嵌入式C环境中存储音频/视频文件的最优方案

《SQLite3在嵌入式C环境中存储音频/视频文件的最优方案》本文探讨了SQLite3在嵌入式C环境中存储音视频文件的优化方案,推荐采用文件路径存储结合元数据管理,兼顾效率与资源限制,小文件可使用B... 目录SQLite3 在嵌入式C环境中存储音频/视频文件的专业方案一、存储策略选择1. 直接存储 vs

如何使用Haporxy搭建Web群集

《如何使用Haporxy搭建Web群集》Haproxy是目前比较流行的一种群集调度工具,同类群集调度工具有很多如LVS和Nginx,本案例介绍使用Haproxy及Nginx搭建一套Web群集,感兴趣的... 目录一、案例分析1.案例概述2.案例前置知识点2.1 HTTP请求2.2 负载均衡常用调度算法 2.

k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)

《k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)》本文记录在K8s上运行的MySQL/MariaDB备份方案,通过工具容器执行mysqldump,结合定时任务实... 目录前言一、获取需要备份的数据库的信息二、备份步骤1.准备工作(X86)1.准备工作(arm)2.手

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热