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

相关文章

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

搭建Kafka+zookeeper集群调度

前言 硬件环境 172.18.0.5        kafkazk1        Kafka+zookeeper                Kafka Broker集群 172.18.0.6        kafkazk2        Kafka+zookeeper                Kafka Broker集群 172.18.0.7        kafkazk3

安装nodejs环境

本文介绍了如何通过nvm(NodeVersionManager)安装和管理Node.js及npm的不同版本,包括下载安装脚本、检查版本并安装特定版本的方法。 1、安装nvm curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash 2、查看nvm版本 nvm --version 3、安装

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

高并发环境中保持幂等性

在高并发环境中保持幂等性是一项重要的挑战。幂等性指的是无论操作执行多少次,其效果都是相同的。确保操作的幂等性可以避免重复执行带来的副作用。以下是一些保持幂等性的常用方法: 唯一标识符: 请求唯一标识:在每次请求中引入唯一标识符(如 UUID 或者生成的唯一 ID),在处理请求时,系统可以检查这个标识符是否已经处理过,如果是,则忽略重复请求。幂等键(Idempotency Key):客户端在每次

pico2 开发环境搭建-基于ubuntu

pico2 开发环境搭建-基于ubuntu 安装编译工具链下载sdk 和example编译example 安装编译工具链 sudo apt install cmake gcc-arm-none-eabi libnewlib-arm-none-eabi libstdc++-arm-none-eabi-newlib 注意cmake的版本,需要在3.17 以上 下载sdk 和ex

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip

跨系统环境下LabVIEW程序稳定运行

在LabVIEW开发中,不同电脑的配置和操作系统(如Win11与Win7)可能对程序的稳定运行产生影响。为了确保程序在不同平台上都能正常且稳定运行,需要从兼容性、驱动、以及性能优化等多个方面入手。本文将详细介绍如何在不同系统环境下,使LabVIEW开发的程序保持稳定运行的有效策略。 LabVIEW版本兼容性 LabVIEW各版本对不同操作系统的支持存在差异。因此,在开发程序时,尽量使用

Go Playground 在线编程环境

For all examples in this and the next chapter, we will use Go Playground. Go Playground represents a web service that can run programs written in Go. It can be opened in a web browser using the follow