(超详细) Spark环境搭建(Local模式、 StandAlone模式、Spark On Yarn模式)-程序员宅基地

技术标签: 大数据学习之路  Spark学习之路  spark  hadoop  大数据  

Spark环境搭建

JunLeon——go big or go home


目录

Spark环境搭建

目录

Spark环境搭建

一、环境准备

1、软件准备

2、Hadoop集群搭建

3、Anaconda环境搭建

二、Spark Local模式搭建

1、Spark下载、上传和解压

2、配置环境变量

3、配置Spark配置文件

4、测试

5、补充:spark-shell、spark-submit

三、Spark Standone模式搭建

1、Hadoop集群与Spark集群节点规划

2、三台虚拟机分别安装Anaconda3环境

3、配置Spark配置文件

(1)配置spark-env.sh文件

(2)配置spark-defaults.conf文件

(3)配置slaves文件(新版本为workers文件)

(4)配置log4j.properties 文件 [可选配置]

4、将配置好的spark分发到其他两台服务器上

5、启动节点

6、web端访问:

 四、Spark On Yarn模式搭建


前言:

        Spark部署模式主要有4种:Local模式(单机模式)、Standalone模式(使用Spark自带的简单集群管理器)、Spark On Yarn模式(使用YARN作为集群管理器)和Spark On Mesos模式(使用Mesos作为集群管理器)。

        本教程做前三种环境搭建的详细讲解。

一、环境准备

1、软件准备

Linux:CentOS-7-x86_64-DVD-1708.iso

Hadoop:hadoop-2.7.3.tar.gz

Java:jdk-8u181-linux-x64.tar.gz

Anaconda:Anaconda3-2021.11-Linux-x86_64.sh

Spark:spark-2.4.0-bin-without-hadoop.tgz

2、Hadoop集群搭建

请查看 大数据学习——Hadoop集群完全分布式的搭建(超详细)_IT路上的军哥的博客-程序员宅基地_hadoop完全分布式搭建

注:本教程中使用Hadoop完全分布式集群,主机名分别为spark-master、spark-slave01、spark-slave02

3、Anaconda环境搭建

(1)下载Anaconda3

Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

注:如果打不开网页,可以尝试换浏览器打开

(2)上传Anaconda的文件到Linux

上传到指定目录:/opt/software        #没有的话就创建

(3)Anaconda On Linux 安装

在该目录下,执行Anaconda文件

cd /opt/software
sh ./Anaconda3-2021.11-Linux-x86_64.sh

进入以下界面:直接回车即可

接下来 阅读许可条款 ,一直空格

在此处是询问是否同意许可条款,输入 yes

指定 anaconda3 安装路径:

将路径修改为 /opt/anaconda3 目录下 

 此处需要初始化,输入 yes

最后,使用exit退出远程连接工具,重新连接,如果出现以下base字样,说明安装成功!

 注:base是默认的虚拟环境。

以上单台 Anaconda On Linux 环境搭建成功,即可开始安装spark。

(4)配置国内源:

vi  ~/.condarc这个文件,追加以下内容:

注:该文件是一个空文件,直接添加即可

channels:
  - defaults
show_channel_urls: true
default_channels:
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
  conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud

 (5)创建pyspark环境

conda create -n pyspark python=3.6  # 基于python3.6创建pyspark虚拟环境
conda activate pyspark      # 激活(切换)到pyspark虚拟环境

注:如果执行 conda create -n pyspark python=3.6 命令下载失败,可能是你的虚拟机不能ping通网络,可以看看ping www.baidu.com是否能够ping通

(6)pip下载pyhive、pyspark、jieba包

pyspark环境中使用pip下载pyhive、pyspark、jieba包

pip install pyspark==2.4.0 jieba pyhive -i https://pypi.tuna.tsinghua.edu.cn/simple

二、Spark Local模式搭建

Spark Local模式也称单机或者本地模式,仅供测试用。并在spark-master主机进行操作。

1、Spark下载、上传和解压

(1)Spark版本下载

该环境搭建spark使用spark-2.4.0版本

下载地址:Index of /dist/spark/spark-2.4.0

(2)上传Spark压缩包

上传到指定目录:/opt/software

(3)解压上传好的压缩包

cd /opt/software
tar -zxvf spark-2.4.0-bin-without-hadoop.tgz -C /opt
mv spark-2.4.0-bin-without-hadoop/ spark-2.4.0

解压之后进行重命名,重命名为spark-2.4.0

2、配置环境变量

配置Spark由如下5个环境变量需要设置

  • SPARK_HOME: 表示Spark安装路径在哪里

  • PYSPARK_PYTHON: 表示Spark想运行Python程序, 那么去哪里找python执行器

  • JAVA_HOME: 告知Spark Java在哪里

  • HADOOP_CONF_DIR: 告知Spark Hadoop的配置文件在哪里

  • HADOOP_HOME: 告知Spark  Hadoop安装在哪里

这5个环境变量 都需要配置在: /etc/profile

# JAVA_HOME
export JAVA_HOME=/opt/jdk1.8.0_181
# HADOOP_HOME
export HADOOP_HOME=/opt/hadoop-2.7.3
# SPARK_HOME
export SPARK_HOME=/opt/spark-2.4.0
# HADOOP_CONF_DIR
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
# PYSPARK_PYTHON
export PYSPARK_PYTHON=/opt/anaconda3/envs/pyspark/bin/python
export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$SPARK_HOME/bin:$PATH

PYSPARK_PYTHONJAVA_HOME 需要同样配置在: ~/.bashrc

vi  ~/.bashrc

# 默认启动pyspark虚拟环境
conda activate pyspark

# JAVA_HOME
export JAVA_HOME=/opt/jdk1.8.0_181
# PYSPARK_PYTHON
export PYSPARK_PYTHON=/opt/anaconda3/envs/pyspark/bin/python
export PATH=$JAVA_HOME/bin:$PATH

 配置好环境变量记得使文件生效:

source /etc/profile
source ~/.bashrc

3、配置Spark配置文件

(1)spark-env.sh

cd /opt/spark-2.4.0/conf
cp spark-env.sh.template spark-env.sh

在该文件最后追加以下内容:

export JAVA_HOME=/opt/jdk1.8.0_181
export SPARK_DIST_CLASSPATH=$(/opt/hadoop-2.7.3/bin/hadoop classpath)

4、测试

(1)验证Spark是否安装成功

pyspark

进入pyspark虚拟环境后,输入pyspark后出现spark的logo则说明已成功:

(2)运行Spark自带的Pi实例

run-example SparkPi
run-example SparkPi 2>&1 | grep "Pi is roughly"     # 过滤日志信息

(3)运行WordCount.py文件

在家目录下,创建一个.py文件,添加以下代码:

附:WordCount.py代码

# ~/WordCount.py
if __name__ == '__main__':
  # 导入相关依赖包
  from pyspark import SparkConf, SparkContext
  # 创建SparkConf,创建一个SparkContext对象
  conf = SparkConf().setMaster("local").setAppName("My App")
  sc = SparkContext(conf = conf)
  # 设置文件路径
  logFile = "file:///opt/spark-2.4.0/README.md"
  # 负责读取README.md文件生成RDD
  logData = sc.textFile(logFile, 2).cache()
  # 统计RDD元素中包含字母a和字母b的行数
  numAs = logData.filter(lambda line: 'a' in line).count()
  numBs = logData.filter(lambda line: 'b' in line).count()
  # 打印输出统计结果
  print('Lines with a: %s, Lines with b: %s' % (numAs, numBs))

 执行任务提交:

spark-submit ~/WordCount.py

5、补充:spark-shell、spark-submit

(1)spark-shell

同样是一个解释器环境, 和pyspark不同的是, 这个解释器环境运行的不是python代码, 而是scala程序代码。

scala> sc.parallelize(Array(1,2,3,4,5)).map(x=> x + 1).collect()
res0: Array[Int] = Array(2, 3, 4, 5, 6)

(2)spark-submit

作用: 提交指定的Spark代码到Spark环境中运行

使用方法:

# 语法
bin/spark-submit [可选的一些选项] jar包或者python代码的路径 [代码的参数]
​
# 示例
bin/spark-submit /opt/spark-2.4.0/examples/src/main/python/pi.py 10
# 此案例运行Spark官方所提供的示例代码,来计算圆周率值。后面的10是主函数接受的参数, 数字越高, 计算圆周率越准确。

(3)pyspark、spark-shell、spark-submit对比

功能 bin/spark-submit bin/pyspark bin/spark-shell
功能 提交java\scala\python代码到spark中运行 提供一个python
解释器环境用来以python代码执行spark程序 提供一个scala
解释器环境用来以scala代码执行spark程序
特点 提交代码用 解释器环境 写一行执行一行 解释器环境 写一行执行一行
使用场景 正式场合, 正式提交spark程序运行 测试\学习\写一行执行一行\用来验证代码等 测试\学习\写一行执行一行\用来验证代码等

三、Spark StandAlone模式搭建

1、Hadoop集群与Spark集群节点规划

(1)集群主机名、IP规划

主机名 IP地址 节点类型
spark-master 192.168.83.100 Master
spark-slave01 192.168.83.101 Slave
spark-slave02 192.168.83.102 Slave

(2)节点规划

节点进程 spark-master spark-slave01 spark-slave02
NameNode
Secondary NameNode
DataNode
ResourceManager
NodeManager
JobHistoryServer(YARN)
Master
Worker
HistoryServer(Spark)

注:

JobHistoryServer:YARN资源管理器的历史服务器,将YARN运行的程序的历史日志记录下来,通过历史服务器方便用户查看程序运行的历史信息。

HistoryServer:Spark的历史服务器,将Spark运行的程序的历史日志记录下来, 通过历史服务器方便用户查看程序运行的历史信息。

2、三台虚拟机分别安装Anaconda3环境

此Anaconda环境搭建参考以上 环境准备中的第3点。也可以从第一台分发到另外两台:

scp -r /opt/anaconda3 root@spark-slava01:/opt
scp -r /opt/anaconda3 root@spark-slava02:/opt

3、配置Spark配置文件

可以在spark-master主机操作,最后再进行分发。

注:Spark安装路径为:/opt/spark-2.4.0

spark配置文件路径为:/opt/spark-2.4.0/conf

cd /opt/spark-2.4.0/conf

(1)配置spark-env.sh文件

# 1. 改名
mv spark-env.sh.template spark-env.sh
# 2. 编辑spark-env.sh, 在底部追加如下内容
vi spark-env.sh

spark-env.sh文件底部追加以下内容

## 设置JAVA安装目录
export JAVA_HOME=/opt/jdk1.8.0_181
## 设置hadoop命令路径
export SPARK_DIST_CLASSPATH=$(/opt/hadoop-2.7.3/bin/hadoop classpath)
## 以上两行在local模式中已经添加,如果有请勿重复配置
## HADOOP软件配置文件目录,读取HDFS上文件和运行YARN集群
HADOOP_CONF_DIR=/opt/hadoop-2.7.3/etc/hadoop
YARN_CONF_DIR=/opt/hadoop-2.7.3/etc/hadoop
## 指定spark老大Master的IP和提交任务的通信端口
# 告知Spark的master运行在哪个机器上
export SPARK_MASTER_HOST=spark-master
# 告知sparkmaster的通讯端口
export SPARK_MASTER_PORT=7077
# 告知spark master的webui端口
SPARK_MASTER_WEBUI_PORT=8080
# worker cpu可用核数
SPARK_WORKER_CORES=1
# worker可用内存
SPARK_WORKER_MEMORY=1g
# worker的工作通讯地址
SPARK_WORKER_PORT=7078
# worker的webui地址
SPARK_WORKER_WEBUI_PORT=8081
## 设置历史服务器
# 配置的意思是  将spark程序运行的历史日志 存到hdfs的/sparklog文件夹中
SPARK_HISTORY_OPTS="-Dspark.history.fs.logDirectory=hdfs://spark-master:9000/sparklog/ -Dspark.history.fs.cleaner.enabled=true"

(2)配置spark-defaults.conf文件

# 1. 改名
mv spark-defaults.conf.template spark-defaults.conf
vi spark-defaults.conf
# 2. 修改内容, 追加如下内容
# 开启spark的日期记录功能
spark.eventLog.enabled  true
# 设置spark日志记录的路径
spark.eventLog.dir   hdfs://spark-master:9000/sparklog/ 
# 设置spark日志是否启动压缩
spark.eventLog.compress  true

(3)配置slaves文件(新版本为workers文件)

# 改名, 去掉后面的.template后缀
mv slaves.template slaves
# 编辑worker文件
vi slaves
# 将文件里面最后一行的localhost删除

追加从节点worker运行的服务器,配置三台主机名

spark-master
spark-slave01
spark-slave02

(4)配置log4j.properties 文件 [可选配置]

# 1. 改名
mv log4j.properties.template log4j.properties
# 2. 修改内容 参考下图
vi log4j.properties

定位到19行:将INFO修改为WARN

4、将配置好的spark分发到其他两台服务器上

将在spark-master主机上配置好的spark分发到另外两台服务器上:

scp -r /opt/spark-2.4.0/ root@spark-slave01:/opt/
scp -r /opt/spark-2.4.0/ root@spark-slave02:/opt/

将主机的/etc/profile文件和~/.bashrc文件也同时分发到另外两台:

scp /etc/profile root@spark-slave01:/etc/
scp /etc/profile root@spark-slave02:/etc/
scp ~/.bashrc root@spark-slave01:~/
scp ~/.bashrc root@spark-slave02:~/

 分发过去之后需要分别在两台使配置文件生效:

source /etc/profile
source ~/.bashrc

5、启动节点

1)启动Hadoop集群

start-all.sh    # 只在spark-master主机上执行

2)启动spark集群

cd /opt/spark-2.4.0/sbin
./start-all.sh

开启全部节点后,如图所示:

6、web端访问:

web端访问需要关闭防火墙:

systemctl stop firewalld

1)访问HDFS

192.168.83.100:50070    # IP:端口号

2)访问YARN

192.168.83.100:8088 # IP:端口号

3)访问Spark

192.168.83.100:8080 # IP:端口号

如图所示说明成功:

 四、Spark On Yarn模式搭建

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/JunLeon/article/details/123625680

智能推荐

C#连接OPC C#上位机链接PLC程序源码 1.该程序是通讯方式是CSharp通过OPC方式连接PLC_c#opc通信-程序员宅基地

文章浏览阅读565次。本文主要介绍如何使用C#通过OPC方式连接PLC,并提供了相应的程序和学习资料,以便读者学习和使用。OPC服务器是一种软件,可以将PLC的数据转换为标准的OPC格式,允许其他软件通过标准接口读取或控制PLC的数据。此外,本文还提供了一些学习资料,包括OPC和PLC的基础知识,C#编程语言的教程和实例代码。这些资料可以帮助读者更好地理解和应用本文介绍的程序。1.该程序是通讯方式是CSharp通过OPC方式连接PLC,用这种方式连PLC不用考虑什么种类PLC,只要OPC服务器里有的PLC都可以连。_c#opc通信

Hyper-V内的虚拟机复制粘贴_win10 hyper-v ubuntu18.04 文件拷贝-程序员宅基地

文章浏览阅读1.6w次,点赞3次,收藏10次。实践环境物理机:Windows10教育版,操作系统版本 17763.914虚拟机:Ubuntu18.04.3桌面版在Hyper-V中的刚安装好Ubuntu虚拟机之后,会发现鼠标滑动很不顺畅,也不能向虚拟机中拖拽文件或者复制内容。在VMware中,可以通过安装VMware tools来使物理机和虚拟机之间达到更好的交互。在Hyper-V中,也有这样的工具。这款工具可以完成更好的鼠标交互,我的..._win10 hyper-v ubuntu18.04 文件拷贝

java静态变量初始化多线程,持续更新中_类初始化一个静态属性 为线程池-程序员宅基地

文章浏览阅读156次。前言互联网时代,瞬息万变。一个小小的走错,就有可能落后于别人。我们没办法去预测任何行业、任何职业未来十年会怎么样,因为未来谁都不能确定。只能说只要有互联网存在,程序员依然是个高薪热门行业。只要跟随着时代的脚步,学习新的知识。程序员是不可能会消失的,或者说不可能会没钱赚的。我们经常可以听到很多人说,程序员是一个吃青春饭的行当。因为大多数人认为这是一个需要高强度脑力劳动的工种,而30岁、40岁,甚至50岁的程序员身体机能逐渐弱化,家庭琐事缠身,已经不能再进行这样高强度的工作了。那么,这样的说法是对的么?_类初始化一个静态属性 为线程池

idea 配置maven,其实不用单独下载Maven的。以及设置新项目配置,省略每次创建新项目都要配置一次Maven_安装idea后是不是不需要安装maven了?-程序员宅基地

文章浏览阅读1w次,点赞13次,收藏43次。说来也是惭愧,一直以来,在装环境的时候都会从官网下载Maven。然后再在idea里配置Maven。以为从官网下载的Maven是必须的步骤,直到今天才得知,idea有捆绑的 Maven 我们只需要搞一个配置文件就行了无需再官网下载Maven包以后再在新电脑装环境的时候,只需要下载idea ,网上找一个Maven的配置文件 放到 默认的 包下面就可以了!也省得每次创建项目都要重新配一次Maven了。如果不想每次新建项目都要重新配置Maven,一种方法就是使用默认的配置,另一种方法就是配置 .._安装idea后是不是不需要安装maven了?

奶爸奶妈必看给宝宝摄影大全-程序员宅基地

文章浏览阅读45次。家是我们一生中最重要的地方,小时候,我们在这里哭、在这里笑、在这里学习走路,在这里有我们最真实的时光,用相机把它记下吧。  很多家庭在拍摄孩子时有一个看法,认为儿童摄影团购必须是在风景秀丽的户外,即便是室内那也是像大酒店一样...

构建Docker镜像指南,含实战案例_rocker/r-base镜像-程序员宅基地

文章浏览阅读429次。Dockerfile介绍Dockerfile是构建镜像的指令文件,由一组指令组成,文件中每条指令对应linux中一条命令,在执行构建Docker镜像时,将读取Dockerfile中的指令,根据指令来操作生成指定Docker镜像。Dockerfile结构:主要由基础镜像信息、维护者信息、镜像操作指令、容器启动时执行指令。每行支持一条指令,每条指令可以携带多个参数。注释可以使用#开头。指令说明FROM 镜像 : 指定新的镜像所基于的镜像MAINTAINER 名字 : 说明新镜像的维护(制作)人,留下_rocker/r-base镜像

随便推点

毕设基于微信小程序的小区管理系统的设计ssm毕业设计_ssm基于微信小程序的公寓生活管理系统-程序员宅基地

文章浏览阅读223次。该系统将提供便捷的信息发布、物业报修、社区互动等功能,为小区居民提供更加便利、高效的服务。引言: 随着城市化进程的加速,小区管理成为一个日益重要的任务。因此,设计一个基于微信小程序的小区管理系统成为了一项具有挑战性和重要性的毕设课题。本文将介绍该小区管理系统的设计思路和功能,以期为小区提供更便捷、高效的管理手段。四、总结与展望: 通过本次毕设项目,我们实现了一个基于微信小程序的小区管理系统,为小区居民提供了更加便捷、高效的服务。通过该系统的设计与实现,能够提高小区管理水平,提供更好的居住环境和服务。_ssm基于微信小程序的公寓生活管理系统

如何正确的使用Ubuntu以及安装常用的渗透工具集.-程序员宅基地

文章浏览阅读635次。文章来源i春秋入坑Ubuntu半年多了记得一开始学的时候基本一星期重装三四次=-= 尴尬了 觉得自己差不多可以的时候 就吧Windows10干掉了 c盘装Ubuntu 专心学习. 这里主要来说一下使用Ubuntu的正确姿势Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的开源GNU/Linux操作系统,Ubuntu 是基于DebianGNU/Linux,支..._ubuntu安装攻击工具包

JNI参数传递引用_jni引用byte[]-程序员宅基地

文章浏览阅读335次。需求:C++中将BYTE型数组传递给Java中,考虑到内存释放问题,未采用通过返回值进行数据传递。public class demoClass{public native boolean getData(byte[] tempData);}JNIEXPORT jboolean JNICALL Java_com_core_getData(JNIEnv *env, jobject thisObj, jbyteArray tempData){ //resultsize为s..._jni引用byte[]

三维重建工具——pclpy教程之点云分割_pclpy.pcl.pointcloud.pointxyzi转为numpy-程序员宅基地

文章浏览阅读2.1k次,点赞5次,收藏30次。本教程代码开源:GitHub 欢迎star文章目录一、平面模型分割1. 代码2. 说明3. 运行二、圆柱模型分割1. 代码2. 说明3. 运行三、欧几里得聚类提取1. 代码2. 说明3. 运行四、区域生长分割1. 代码2. 说明3. 运行五、基于最小切割的分割1. 代码2. 说明3. 运行六、使用 ProgressiveMorphologicalFilter 分割地面1. 代码2. 说明3. 运行一、平面模型分割在本教程中,我们将学习如何对一组点进行简单的平面分割,即找到支持平面模型的点云中的所有._pclpy.pcl.pointcloud.pointxyzi转为numpy

以NFS启动方式构建arm-linux仿真运行环境-程序员宅基地

文章浏览阅读141次。一 其实在 skyeye 上移植 arm-linux 并非难事,网上也有不少资料, 只是大都遗漏细节, 以致细微之处卡壳,所以本文力求详实清析, 希望能对大家有点用处。本文旨在将 arm-linux 在 skyeye 上搭建起来,并在 arm-linux 上能成功 mount NFS 为目标, 最终我们能在 arm-linux 里运行我们自己的应用程序. 二 安装 Sky..._nfs启动 arm

攻防世界 Pwn 进阶 第二页_pwn snprintf-程序员宅基地

文章浏览阅读598次,点赞2次,收藏5次。00为了形成一个体系,想将前面学过的一些东西都拉来放在一起总结总结,方便学习,方便记忆。攻防世界 Pwn 新手攻防世界 Pwn 进阶 第一页01 4-ReeHY-main-100超详细的wp1超详细的wp203 format2栈迁移的两种作用之一:栈溢出太小,进行栈迁移从而能够写入更多shellcode,进行更多操作。栈迁移一篇搞定有个陌生的函数。C 库函数 void *memcpy(void *str1, const void *str2, size_t n) 从存储区 str2 _pwn snprintf

推荐文章

热门文章

相关标签