Spark-3(2)

2.2.6.3 bin/spark-submit (PI)

2.2.7 查看历史服务器 WEB UI

三、Spark 环境搭建-Standalone HA

3.1 背景

3.2 高可用 HA

​3.3 基于 Zookeeper 实现 HA

3.3.1 spark-env.sh

3.3.2 启动 HA 集群

3.3.3 master 主备切换


一、Spark 环境搭建-Local

1.1 服务器环境

  • 已部署好 Hadoop 集群(HDFS\YARN),要求版本 Hadoop3 以上
  • JDK 1.8
  • 操作系统 CentOS 7 (建议 7.6)

本次基于这篇文章的 Hadoop 集群环境搭建 Spark:Hadoop YARN HA 集群安装部署详细图文教程_Stars.Sky的博客-CSDN博客

IP主机名运行角色
192.168.170.136hadoop01namenode datanode resourcemanager nodemanager JournalNode DFSZKFailoverController QuorumPeerMain Spark
192.168.170.137hadoop02namenode datanode resourcemanager nodemanager JournalNode DFSZKFailoverController QuorumPeerMain Spark
192.168.170.138hadoop03datanode nodemanage JournalNode QuorumPeerMain Spark

1.2 基本原理

本质:启动一个 JVM Process 进程(一个进程里面有多个线程),执行任务 Task。

Local 模式可以限制模拟 Spark 集群环境的线程数量, 即 Local[N] 或 Local[*]:

  • 其中 N 代表可以使用 N 个线程,每个线程拥有一个 cpu core。如果不指定 N,则默认是 1 个线程(该线程有 1 个 core)。通常 Cpu 有几个 Core,就指定几个线程,最大化利用计算能力。
  • 如果是 local[*],则代表 Run Spark locally with as many worker threads as logical cores on your machine,按照 Cpu 最多的 Cores 设置线程数。
1.2.1 Local 下的角色分布

资源管理:

  • Master:Local 进程本身。
  • Worker:Local 进程本身。

任务执行:

  • Driver:Local 进程本身。
  • Executor:不存在,没有独立的 Executor 角色,由 Local 进程(也就是 Driver)内的线程提供计算能力。

注意:

  1. Driver 也算一种特殊的 Executor,只不过多数时候,我们将 Executor 当做纯 Worker 对待, 这样和 Driver 好区分(一类是管理一类是工人) 。
  2. Local 模式只能运行一个 Spark 程序,如果执行多个 Spark 程序,那就是由多个相互独立的Local 进程在执行。

1.3 搭建

Spark 下载地址:Apache Downloads

Anaconda 下载地址:Index of /

1.3.1 安装 Anaconda
# 上传安装包后赋予权限
[root@hadoop01 ~]# chmod +x Anaconda3-2023.03-1-Linux-x86_64.sh 

# 执行安装脚本
[root@hadoop01 ~]# ./Anaconda3-2023.03-1-Linux-x86_64.sh 

先按回车键:

再按空格键,直到出现让你输入 yes:
最后输入安装路径,并耐心等待安装完成:

最后进行初始化,输入 yes:

[root@hadoop01 ~]# source ~/.bashrc 

# 测试安装是否成功
(base) [root@hadoop01 ~]# conda list

1.3.1.1 添加国内阿里源
(base) [root@hadoop01 ~]# vim ~/.condarc
channels:
  - defaults
show_channel_urls: true
default_channels:
  - http://mirrors.aliyun.com/anaconda/pkgs/main
  - http://mirrors.aliyun.com/anaconda/pkgs/r
  - http://mirrors.aliyun.com/anaconda/pkgs/msys2
custom_channels:
  conda-forge: http://mirrors.aliyun.com/anaconda/cloud
  msys2: http://mirrors.aliyun.com/anaconda/cloud
  bioconda: http://mirrors.aliyun.com/anaconda/cloud
  menpo: http://mirrors.aliyun.com/anaconda/cloud
  pytorch: http://mirrors.aliyun.com/anaconda/cloud
  simpleitk: http://mirrors.aliyun.com/anaconda/cloud

# 清除索引缓存
(base) [root@hadoop01 ~]# conda clean -i

1.3.2 创建 pyspark 环境
# 查看 python 版本
[root@hadoop01 ~]# python
Python 3.10.9 (main, Mar  1 2023, 18:23:06) [GCC 11.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()

# 创建一个新的独立的 Python 环境
[root@hadoop01 ~]# conda create -n pyspark python=3.10.9

# 切换环境
[root@hadoop01 ~]# conda activate pyspark                                                                                                               
(pyspark) [root@hadoop01 ~]#
1.3.3 安装 spark
(pyspark) [root@hadoop01 ~]# tar -zxvf spark-3.2.4-bin-hadoop3.2.tgz -C /bigdata/
(pyspark) [root@hadoop01 ~]# mv /bigdata/spark-3.2.4-bin-hadoop3.2/ /bigdata/spark-3.2.4

1.3.4 添加环境变量
(pyspark) [root@hadoop01 ~]# vim /etc/profile
# spark
export SPARK_HOME=/bigdata/spark-3.2.4
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export PYSPARK_PYTHON=/usr/local/anaconda3/envs/pyspark/bin/python3.10
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HADOOP_HOME/lib/native

(pyspark) [root@hadoop01 ~]# vim /root/.bashrc 
export JAVA_HOME=/usr/java/jdk1.8.0_381
export PYSPARK_PYTHON=/usr/local/anaconda3/envs/pyspark/bin/python3.10

(pyspark) [root@hadoop01 ~]# source /etc/profile

  • SPARK_HOME:表示 Spark 安装路径在那里;
  • HADOOP_CONF_DIR:告知 Spark Hadoop 的配置文件在那里;
  • PYSPARK_PYTHON:告知 Spark 运行 python 程序的执行器在哪里。
  • LD_LIBRARY_PATH:加载 Hadoop 的本地库(通常是 C 语言编写的)
1.3.5 启动 spark
1.3.5.1 bin/pyspark

bin/pyspark 程序,可以提供一个交互式的 Python 解释器环境,在这里面可以写普通 python 代码,以及 spark 代码。

(pyspark) [root@hadoop01 ~]# cd /bigdata/spark-3.2.4/
[root@hadoop01 /bigdata/spark-3.2.4]# bin/pyspark 

示例代码, 将数组内容都 +1进行计算:
sc.parallelize([1,2,3,4,5]).map(lambda x: x + 1).collect()

在这个环境内,可以运行 spark 代码。图中的 parallelizemap 都是 spark 提供的 API。

1.3.5.2 WEB UI (4040)

每一个 Spark 程序在运行的时候,会绑定到 Driver 所在机器的 4040 端口上。如果 4040 端口被占用,会顺延到 4041 … 4042…

4040 端口是一个 WEBUI 临时端口,可以在浏览器内打开。输入:服务器 ip:4040 即可打开

打开监控页面后,可以发现在程序内仅有一个 Driver,因为我们是 Local 模式,Driver 即管理 又干活。同时打开另一个终端,输入 jps,可以看到 local 模式下的唯一进程存在。这个进程即是 master 也是 worker。

注意:如果把当前的 pyspark 程序终止或退出(Ctrl + D)的话,SparkSubmit 进程 和 Web UI 页面也将终止和失效。

1.3.5.3 spark-shell

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

这个仅作为了解即可,因为这个是用于 scala 语言的解释器环境。

1.3.5.4 bin/spark-submit

bin/spark-submit 程序,作用: 提交指定的 Spark 代码到 Spark 环境中运行。

# 语法
bin/spark-submit [可选的一些选项] jar 包或者 python 代码的路径 [代码的参数]

# 示例
[root@hadoop01 /bigdata/spark-3.2.4]# bin/spark-submit --master local[*] /bigdata/spark-3.2.4/examples/src/main/python/pi.py 10

# 此案例运行 Spark 官方所提供的示例代码来计算圆周率值。后面的 10 是主函数接受的参数,数字越高,计算圆周率越准确。

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

二、Spark 环境搭建-Standalone

2.1 Standalone 架构

Standalone 模式是 Spark 自带的一种集群模式,不同于前面本地模式启动多个进程来模拟集群的环境,Standalone 模式是真实地在多个机器之间搭建 Spark 集群的环境,完全可以利用该模式搭建多机器集群,用于实际的大数据处理。

StandAlone 是完整的 Spark 运行环境,其中:

  • Master 角色以 Master 进程存在,Worker 角色以 Worker 进程存在;
  • Driver 和 Executor 运行于 Worker 进程内,由 Worker 提供资源供给它们运行。

2.2 搭建

IP主机名运行角色
192.168.170.136hadoop01master worker
192.168.170.137hadoop02worker
192.168.170.138hadoop03worker
2.2.1 各个节点安装 Anaconda

具体安装步骤同上面 1.3.1-1.3.4 是一样的。

2.2.2 修改配置文件(在 hadoop01 上执行)
2.2.2.1 workers

这个文件就是指示了当前 Spark StandAlone 环境下有哪些 worker:

[root@hadoop01 ~]# cd /bigdata/spark-3.2.4/conf/
[root@hadoop01 /bigdata/spark-3.2.4/conf]# mv workers.template workers
[root@hadoop01 /bigdata/spark-3.2.4/conf]# vim workers 
hadoop01
hadoop02
hadoop03
2.2.2.2 spark-env.sh
[root@hadoop01 /bigdata/spark-3.2.4/conf]# mv spark-env.sh.template spark-env.sh
[root@hadoop01 /bigdata/spark-3.2.4/conf]# vim spark-env.sh
## 设置 JAVA 安装目录
JAVA_HOME=/usr/java/jdk1.8.0_381

## HADOOP 软件配置文件目录,读取 HDFS 上文件和运行 YARN 集群
HADOOP_CONF_DIR=/bigdata/hadoop/server/hadoop-3.2.4/etc/hadoop/
YARN_CONF_DIR=/bigdata/hadoop/server/hadoop-3.2.4/etc/hadoop/

## 指定 spark 老大 Master 的 IP 和提交任务的通信端口
# 告知 Spark 的 master 运行在哪个机器上
export SPARK_MASTER_HOST=hadoop01
# 告知 spark master 的通讯端口
export SPARK_MASTER_PORT=7077
# 告知 spark master 的 webui 端口
SPARK_MASTER_WEBUI_PORT=8081

# worker cpu 可用核数
SPARK_WORKER_CORES=1
# worker 可用内存
SPARK_WORKER_MEMORY=1g
# worker 的工作通讯地址
SPARK_WORKER_PORT=7078
# worker 的 webui 地址
SPARK_WORKER_WEBUI_PORT=8082

## 设置历史服务器
# 配置的意思是将 spark 程序运行的历史日志,存到 hdfs 的 /sparklog 文件夹中
SPARK_HISTORY_OPTS="-Dspark.history.fs.logDirectory=hdfs://hadoop01:8020/sparklog/ -Dspark.history.fs.cleaner.enabled=true"

# 如果 hadoop 集群是 HA,则需要用下面的设置。要使用则把注释去掉
#SPARK_HISTORY_OPTS="-Dspark.history.fs.logDirectory=hdfs://mycluster/sparklog/ -Dspark.history.fs.cleaner.enabled=true"

由于我的集群是高可用(HA)的,建议使用逻辑名称(Logical URI)而非具体的 Namenode 主机名和端口。这样可以确保即使当前的活动(Active)NameNode 发生变化,Spark 也能正确地找到日志目录。逻辑名称在 HA 配置中用于标识一个 Namenode 集群,而不是单个 Namenode。例如,如果逻辑名称是 mycluster,则您应该使用 hdfs://mycluster/sparklog/

注意:这里的 mycluster 应该与您在 HDFS 配置文件(通常是 hdfs-site.xml)中定义的逻辑名称(NameService ID)相匹配。这样,HA  客户端库就能自动确定哪个 NameNode 当前是 Active,并且进行相应的操作。(后续的同理)

注意:上面的配置的路径要根据你自己机器实际的路径来写。

在 HDFS 上创建程序运行历史记录存放的文件夹:

[root@hadoop01 /bigdata/spark-3.2.4/conf]# hadoop fs -mkdir /sparklog
[root@hadoop01 /bigdata/spark-3.2.4/conf]# hadoop fs -chmod 777 /sparklog
2.2.2.3 spark-defaults.conf
[root@hadoop01 /bigdata/spark-3.2.4/conf]# mv spark-defaults.conf.template spark-defaults.conf
[root@hadoop01 /bigdata/spark-3.2.4/conf]# vim spark-defaults.conf
# 开启spark的日期记录功能
spark.eventLog.enabled  true    
# # 设置spark日志记录的路径
spark.eventLog.dir       hdfs://hadoop01:8021/sparklog/
# # 设置spark日志是否启动压缩
spark.eventLog.compress         true

# hadoop HA 的配置,要使用则把注释去掉
#spark.eventLog.dir       hdfs://mycluster/sparklog/
2.2.2.4 log4j.properties(可选配置)
[root@hadoop01 /bigdata/spark-3.2.4/conf]# mv log4j.properties.template log4j.properties
[root@hadoop01 /bigdata/spark-3.2.4/conf]# vim log4j.properties
log4j.rootCategory=WARN, console

这个文件的修改不是必须的,  为什么修改为 WARN,因为 Spark 是个话痨会疯狂输出日志,设置级别为 WARN 只输出警告和错误日志,不要输出一堆废话。你如果为了更详细的信息可以默认 INFO。

2.2.3 分发 Spark 安装目录
[root@hadoop01 /bigdata]# cd /bigdata/
[root@hadoop01 /bigdata]# scp -r spark-3.2.4 hadoop02:$PWD
[root@hadoop01 /bigdata]# scp -r spark-3.2.4 hadoop03:$PWD

2.2.4 启动服务
# 启动历史服务器
[root@hadoop01 ~]# cd /bigdata/spark-3.2.4/sbin/
[root@hadoop01 /bigdata/spark-3.2.4/sbin]# ./start-history-server.sh 

# 启动全部 master 和 worker
[root@hadoop01 /bigdata/spark-3.2.4/sbin]# ./start-all.sh 

# 或者可以一个个启动:
# 启动当前机器的 master
sbin/start-master.sh
# 启动当前机器的 worker
sbin/start-worker.sh

# 停止全部
sbin/stop-all.sh

# 停止当前机器的 master
sbin/stop-master.sh

# 停止当前机器的 worker
sbin/stop-worker.sh

# 验证
[root@hadoop01 /bigdata/spark-3.2.4/sbin]# jps
7666 QuorumPeerMain
8739 DFSZKFailoverController
9315 NodeManager
8164 DataNode
9125 ResourceManager
10583 Worker
7977 NameNode
10649 Jps
8460 JournalNode
10492 Master

2.2.5 查看 Master 的 WEB UI

默认端口 master 我们设置到了 8081。如果端口被占用,会顺延到 8082 …;8083… 8084… 直到申请到端口为止。

2.2.6 连接到 StandAlone 集群
2.2.6.1 bin/pyspark
[root@hadoop01 ~]# cd /bigdata/spark-3.2.4/
(pyspark) [root@hadoop01 /bigdata/spark-3.2.4]# bin/pyspark --master spark://hadoop01:7077

# 通过 --master 选项来连接到 StandAlone 集群
# 如果不写 --master 选项, 默认是 local 模式运行

2.2.6.2 bin/spark-shell
(base) [root@hadoop01 /bigdata/spark-3.2.4]# bin/spark-shell --master spark://hadoop01:7077
# 同样适用 --master 来连接到集群使用

// 测试代码
sc.parallelize(Array(1,2,3,4,5)).map(x=> x + 1).collect()
2.2.6.3 bin/spark-submit (PI)
(base) [root@hadoop01 /bigdata/spark-3.2.4]# bin/spark-submit --master spark://hadoop01:7077 /bigdata/spark-3.2.4/examples/src/main/python/pi.py 10

# 同样使用 --master 来指定将任务提交到集群运行

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数大数据工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年大数据全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上大数据开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注大数据获取)
img

摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

因此收集整理了一份《2024年大数据全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
[外链图片转存中…(img-DU7fMi4N-1712861003502)]
[外链图片转存中…(img-gL0gRfrz-1712861003502)]
[外链图片转存中…(img-FO78mMUC-1712861003502)]
[外链图片转存中…(img-jmCO5vnu-1712861003503)]
[外链图片转存中…(img-5fhsyJ6U-1712861003503)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上大数据开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注大数据获取)
[外链图片转存中…(img-3kMGKlI2-1712861003503)]

  • 29
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spark-Thrift和Spark-SQL是Spark框架中的两个组件,它们有以下区别: 1. Spark-SQL是Spark的一个模块,用于处理结构化数据,支持SQL查询和DataFrame API。它提供了一种高效且易于使用的方法来处理和分析结构化数据。用户可以使用SQL语句或DataFrame API来查询和操作数据。Spark-SQL允许用户直接在Spark应用程序中使用SQL查询,而无需编写复杂的MapReduce代码。 2. Spark-Thrift是Spark的一个独立服务,它提供了一个标准的Thrift接口,用于执行SQL查询。它可以作为一个独立的进程运行,并通过网络接收来自客户端的SQL查询请求,并将查询转发到Spark集群中的Spark-SQL模块进行处理。Spark-Thrift使得可以使用不同的编程语言,如Java、Python、R等,通过Thrift接口与Spark集群交互。 因此,Spark-SQL是Spark框架中用于处理结构化数据的模块,而Spark-Thrift是提供Thrift接口让用户可以使用不同编程语言与Spark-SQL模块交互的独立服务。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [CDH15.0支持spark-sql和spark-thrift-server](https://blog.csdn.net/u012458821/article/details/87635599)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [122.Thrift和spark-sql客户端部署](https://blog.csdn.net/m0_47454596/article/details/126856172)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值