" name="sm-site-verification"/>
侧边栏壁纸
博主头像
PySuper博主等级

千里之行,始于足下

  • 累计撰写 203 篇文章
  • 累计创建 14 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

Spark部署 之 StandAlone

PySuper
2022-03-24 / 0 评论 / 0 点赞 / 30 阅读 / 7707 字
温馨提示:
所有牛逼的人都有一段苦逼的岁月。 但是你只要像SB一样去坚持,终将牛逼!!! ✊✊✊

架构分析

  • Spark自带的一种集群模式
  • 是完整的Spark运行环境:
    • Master角色以Master进程存在,Worker角色以Worker进程存在
    • Driver和Executor运行于Worker进程内, 由Worker提供资源供给它们运行
Spark-StandAlone

StandAlone集群在进程上主要有3类进程:

  • 主节点Master进程
    • Master角色,管理整个集群资源,并托管运行各个任务的Driver
  • 从节点Workers进程
    • Worker角色,管理每个机器的资源,分配对应的资源来运行Executor(Task)
    • 每个从节点分配资源信息给Worker管理,资源信息包含内存Memory和CPU Cores核数
  • 历史服务器HistoryServer(可选)
    • Spark Application运行完成以后,保存事件日志数据至HDFS
    • 启动HistoryServer可以查看应用运行相关信息
Spark-StandAlone
Spark-StandAlone

安装配置

#############################  在所有节点上安装anaconda  #############################
# 将安装脚本发送到各个节点
cd /hadoop/file && scp Anaconda3-2021.05-Linux-x86_64.sh  node-212:`pwd`/

# 在各个节点 执行安装
sh ./Anaconda3-2021.05-Linux-x86_64.sh

# 创建虚拟环境
/hadoop/software/anaconda3/bin/conda create -n pyspark python=3.8

 
##############################  在各个节点配置环境变量  ###############################
# 修改profile
vi /etc/profile

# java
export JAVA_HOME=/hadoop/software/jdk1.8.0_241
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

# hadoop
export HADOOP_HOME=/hadoop/software/hadoop-3.3.0
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

# spark
export SPARK_HOME=/hadoop/software/spark
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export PYSPARK_PYTHON=/hadoop/software/anaconda3/envs/pyspark/bin/python3.8	# 虚拟环境中的Python路径

# 修改bashrc
vi ~/.bashrc

# 追加环境变量
export JAVA_HOME=/hadoop/software/jdk1.8.0_241
export PYSPARK_PYTHON=/hadoop/software/anaconda3/envs/pyspark/bin/python3.8

##############################  修改Spark配置文件  ###############################

# 修改文件名,并编辑
mv workers.template workers && vi workers

# 将里面的localhost删除, 追加
node-211
node-212
node-213
# 功能: 这个文件就是指示了  当前SparkStandAlone环境下, 有哪些worker

##############################  修改Spark配置文件  ###############################

# 修改文件名,在底部追加如下内容
mv spark-env.sh.template spark-env.sh & vi spark-env.sh

# 设置JAVA安装目录
JAVA_HOME=/hadoop/software/jdk1.8.0_241

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

# 指定spark老大Master的IP和提交任务的通信端口
# 告知Spark的master运行在哪个机器上
export SPARK_MASTER_HOST=node-211
# 告知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://node-211:8020/sparklog/ -Dspark.history.fs.cleaner.enabled=true"

##############################  准备HDFS文件系统  ##################################

# 创建文件夹
hadoop fs -mkdir /sparklog

# 指定权限
hadoop fs -chmod 777 /sparklog

########################  配置spark-defaults.conf文件  #############################

# 修改文件名,追加配置
mv spark-defaults.conf.template spark-defaults.conf && vi spark-defaults.conf

# 开启spark的日期记录功能
spark.eventLog.enabled 	true
# 设置spark日志记录的路径
spark.eventLog.dir	 hdfs://node-211:8020/sparklog/ 
# 设置spark日志是否启动压缩
spark.eventLog.compress 	true

########################  配置log4j.properties 文件  ################################

# 修改spark日志级别
vi log4j.properties.template

# 只需要吧INFO改成WARN
log4j.rootCategory=INFO, console ==>> log4j.rootCategory=WARN, console

# 查看
cat /hadoop/software/spark/conf/log4j.properties.template | grep rootCategory

############################  将Spark分发到其他节点  ##################################

# 进入到spark的文件夹中
cd /hadoop/software/
scp -r spark node-212:`pwd`/
scp -r spark node-213:`pwd`/

######################################################################################

启动Spark

# 启动历史服务器
sbin/start-history-server.sh

######################################################################################

# 启动全部master和worker
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

######################################################################################

连接集群

pyspark

bin/pyspark --master spark://node-211:7077

> sc.parallelize([1,2,3,4,5]).map(lambda x:x+1).collect()

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

spark-shell

bin/spark-shell --master spark://node-211:7077
# 同样适用--master来连接到集群使用
// 测试代码
sc.parallelize(Array(1,2,3,4,5)).map(x=> x + 1).collect()

spark-submit (PI)

bin/spark-submit --master spark://node-211:7077 /hadoop/software/spark/examples/src/main/python/pi.py 100
# 同样使用--master来指定将任务提交到集群运行

层次结构

  • 程序,不同的spark程序
  • Job,并行计算任务
  • Stage,每个任务中的一步操作
  • Task,每个Executor的工作内容,Spark中最小执行单位

总结

  • StandAlone的原理?
    • Master和Worker角色以独立进程的形式存在,并组成Spark运行时环境(集群)
  • Spark角色在StandAlone中的分布?
    • Master角色:Master进程
    • Worker角色:Worker进程
    • Driver角色和Executor角色:以线程运行在Worker中
  • Standalone如何提交Spark应用?
    • bin/spark-submit --master spark://server:7077
  • 4040\8080\18080分别是什么?
    • 4040是单个程序运行的时候绑定的端口可供查看本任务运行情况
  • Job\State\Task的关系?
    • 一个Spark程序会被分成多个子任务(Job)运行
    • 每一个Job会分成多个State(阶段)来运行
    • 每一个State内会分出来多个Task(线程)来执行具体任务

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区