前期准备查看网卡配置静态IPvi /etc/sysconfig/network-scripts/ifcfg-ens32 ---- 根据自己网卡设置。设置主机名hostnamectl --static set-hostname 主机名例如hostnamectl --static set-hostname hadoop001配置IP与主机名映射vi /etc/hosts关闭防火墙systemctl stop firewalldsystemctl disable firewalld配置免密登录传送门一、JDK的安装1、安装jdk在/opt/model中上传jdk包并解压tar -zxvf jdk-8u151-linux-x64.tar.gz重命名方便配置环境变量避免更换jdk版本修改配置文件2、配置Java环境变量系统级全局/etc/profile,/etc/bash.bashrc,/etc/bashrc对所有用户生效用户级个人~/.bash_profile,~/.bashrc,~/.profile只对当前用户生效/etc/profile✅ 几乎所有 Linux/Unix 系统都有Ubuntu、CentOS、macOS 等/etc/bashrc✅ CentOS/RHEL 系统使用CentOS、RHEL、Fedora/etc/bash.bashrc✅ Ubuntu 使用Ubuntu、Debian~/.bash_profile✅ 用户可创建所有支持 Bash 的系统~/.profile✅ Ubuntu 默认生成Ubuntu、Debian~/.bashrc✅ 用户级 shell 配置所有支持 Bash 的系统vi /etc/profileexport JAVA_HOME/opt/module/java #此处是自己实际的Java安装路径export CLASSPATH.:\$JAVA_HOME/lib/dt.jar:\$JAVA_HOME/lib/tools.jarexport PATH\$PATH:\$JAVA_HOME/bin3、加载环境变量source /etc/profile验证环境变量是否生效:env | grep HOMEenv | grep PATH4、进行校验​二、Hadoop的环境搭建见 https://blog.csdn.net/qq_41946216/article/details/134345137?spm1001.2014.3001.5501三、Spark的环境搭建1、spark的下载安装1.1. 下载https://archive.apache.org/dist/spark/spark-3.3.1/​下载 spark-3.3.1-bin-hadoop3.tgz 安装包1.2 上传使用xshell上传到指定安装路径此处是安装路径是/opt/module​1.3 解压重命名tar -xzvf spark-3.3.1-bin-hadoop3.tgzmv spark-3.3.1-bin-hadoop3 spark​​1.4 配置环境变量vi /etc/profile#SPARK_HOMEexport SPARK_HOME/opt/module/sparkexport PATH$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin#export PYSPARK_PYTHONxxx#注意 使用pyspark则配置PYSPARK_PYTHON 和虚拟环境否则无需配置1.5 加载环境变量source /etc/profile验证环境变量是否生效:env | grep SPARK_HOMEenv | grep PATH1.6检验安装spark-submit --version出现下图说明安装成功​2、本地模式本地模式Local Mode开发测试专用。它不启动任何Spark服务进程所有代码都在同一个JVM中运行连网络通信都模拟了。所有进程Driver和Executor都运行在同一个JVM进程中不涉及任何网络通信。伪分布式模式即伪分布式模式--master local[*] 或 不指定且spark-defaults.conf中的无任何配置2.1. 配置 spark-env.shSpark环境变量由如下5个环境变量需要设置01 JAVA_HOME: 告知Spark Java在哪里02 HAD0OP_HOME: 告知Spark Hadoop安装在哪里03 HADOOP_CONF_DIR:告知Spark Hadoop的配置文件在哪里04 SPARK_HOME: 告诉Spark安装路径在哪里cd $SPARK_HOME/confcp spark-env.sh.template spark-env.shvi spark-env.shexport JAVA_HOME/opt/module/javaexport HADOOP_HOME/opt/module/hadoopexport HADOOP_CONF_DIR/opt/module/hadoop/etc/hadoopexport SPARK_HOME/opt/module/spark2.2. 本地模式测试spark-submit \--class org.apache.spark.examples.SparkPi \$SPARK_HOME/examples/jars/spark-examples_*.jar 10方式二spark-submit \--class org.apache.spark.examples.SparkPi \--master local[2] \$SPARK_HOME/examples/jars/spark-examples_*.jar 10二者区别对比项不指定 --master指定 --master运行模式取决于spark-defaults.conf中的配置未配置使用默认值local[*]本地模式强制使用本地模式资源分配本地或 YARN 集群 CPU 核心使用本地固定CPU 核心执行位置可能提交到 Hadoop YARN 集群只在当前机器上运行适用场景生产环境集群模式开发测试、调试注意此方式返回结果返回到Driver端即本地如果返回结果过大则会导致driver端挂掉。3、Standalone单机模式Standalone 模式可用于小规模生产环境或作为全链路压力测试的环境。因为它完整模拟了分布式调度、Shuffle、任务重试和容错机制能真实反映应用在YARN/K8s上的行为。3.1. 配置 spark-env.sh与masterSpark环境变量由如下5个环境变量需要设置01 JAVA_HOME: 告知Spark Java在哪里02 HAD0OP_HOME: 告知Spark Hadoop安装在哪里03 HADOOP_CONF_DIR:告知Spark Hadoop的配置文件在哪里04 SPARK_HOME: 告诉Spark安装路径在哪里cd $SPARK_HOME/confcp spark-env.sh.template spark-env.shvi spark-env.sh# 环境变量通常不需要改 export JAVA_HOME/opt/module/javaexport HADOOP_HOME/opt/module/hadoopexport HADOOP_CONF_DIR/opt/module/hadoop/etc/hadoopexport SPARK_HOME/opt/module/spark# Master 配置 # 必填Master节点的主机名Worker和Driver通过这个地址连接Master# Master的RPC通信端口默认7077一般不需要改# Master的Web UI端口默认8080用于浏览器查看集群状态export SPARK_MASTER_HOSThadoop001export SPARK_MASTER_PORT7077export SPARK_MASTER_WEBUI_PORT8080# Worker 配置 # 单台机器上启动的Worker实例数默认为1# 每个Worker节点可用的CPU核心数# 这里设置为12留出2个核心给操作系统和系统进程使用export SPARK_WORKER_CORES2# 每个Worker节点可用的内存大小# 这里设置为48g留出16GB给操作系统和文件缓存export SPARK_WORKER_MEMORY2g# 每个Worker节点的Web UI端口默认8081export SPARK_WORKER_WEBUI_PORT8081# 高级配置 # 【可选】单台机器上启动的Worker实例数# 默认1。如果机器资源非常充足如128核、512GB内存可以设为2或更多# 注意每个实例会独立占用SPARK_WORKER_CORES和SPARK_WORKER_MEMORY# export SPARK_WORKER_INSTANCES1# 【强烈推荐】Spark临时数据存储目录用于Shuffle、溢写等# 使用本地磁盘如SSD不要用NFS或HDFS否则Shuffle性能会严重下降# 多个目录用逗号分隔可以分摊I/O压力export SPARK_LOCAL_DIRS/opt/module/spark/data/spark-tmp# 高可用配置可选生产环境推荐 # 如果使用ZooKeeper实现Master高可用取消下面注释并填写ZK地址# export SPARK_DAEMON_JAVA_OPTS-Dspark.deploy.recoveryModeZOOKEEPER -Dspark.deploy.zookeeper.urlhadoop1:2181,hadoop2:2181,hadoop3:21813.2. 配置 workerscd $SPARK_HOME/confcp workers.template workersvi workershadoop001#hadoop002#hadoop003如果在集群上需要去掉 hadoop002 与 hadoop003 注释3.3. 启动Master与worker#启动cd $SPARK_HOME/sbin./start-all.sh 或者分步启动-------------------------------# 启动Master $SPARK_HOME/sbin/start-master.sh # 启动所有Worker会通过SSH免密登录到hadoop2和hadoop3启动 $SPARK_HOME/sbin/start-workers.sh3.4. 查看进程[roothadoop001 sbin]#jps19024 Worker19082 Jps18955 Master如果是集群则需要jps查看hadoop002 与 hadoop003上的 worker3.5.Web UI验证http://hadoop001:80803.6 Standalone单机模式测试spark-submit \--class org.apache.spark.examples.SparkPi \--master spark://hadoop001:7077 \--deploy-mode client \--total-executor-cores 2 \--executor-memory 1g \$SPARK_HOME/examples/jars/spark-examples_*.jar 104、Standalone集群模式4.1. 配置 workerscd $SPARK_HOME/confcp workers.template workersvi workershadoop001#hadoop002#hadoop003如果在集群上需要去掉 hadoop002 与 hadoop003 注释4.2. 分发文件注意在分发文件前要做好三台机器的IP与主机名映射 /etc/hosts进行分发文件scp -r /opt/module/spark roothadoop002:/opt/module/sparkscp -r /opt/module/spark roothadoop003:/opt/module/sparkscp -r /etc/profile roothadoop002:/etc/profilescp -r /etc/profile roothadoop003:/etc/profile让三台机器文件生效hadoop001 source /etcprofilehadoop002 source /etcprofilehadoop003 source /etcprofile4.3. 启动Master与worker#在 Master节点Hadoop001上启动cd $SPARK_HOME/sbin./start-all.sh 或者分步启动-------------------------------# 启动Master $SPARK_HOME/sbin/start-master.sh # 启动所有Worker会通过SSH免密登录到hadoop2和hadoop3启动 $SPARK_HOME/sbin/start-workers.sh4.4. 查看进程hadoop001节点hadoop002节点hadoop003节点4.5.Web UI验证http://hadoop001:80804.6 Standalone 集群模式测试spark-submit \--class org.apache.spark.examples.SparkPi \--master spark://hadoop001:7077 \--deploy-mode client \--total-executor-cores 2 \--executor-memory 1g \$SPARK_HOME/examples/jars/spark-examples_*.jar 10spark-submit \--class org.apache.spark.examples.SparkPi \--master spark://hadoop001:7077 \--deploy-mode cluster\--total-executor-cores 2 \--executor-memory 1g \$SPARK_HOME/examples/jars/spark-examples_*.jar 105、Spark On Yarn模式5.1. 配置 spark-env.shSpark环境变量由如下5个环境变量需要设置01 JAVA_HOME: 告知Spark Java在哪里02 HAD0OP_HOME: 告知Spark Hadoop安装在哪里03 HADOOP_CONF_DIR:告知Spark Hadoop的配置文件在哪里04 SPARK_HOME: 告诉Spark安装路径在哪里cd $SPARK_HOME/confcp spark-env.sh.template spark-env.shvi spark-env.sh# 环境变量通常不需要改 export JAVA_HOME/opt/module/javaexport SPARK_HOME/opt/module/sparkexport HADOOP_HOME/opt/module/hadoop# 核心配置连接 Hadoop/YARN 集群二选一即可 # 推荐设置 HADOOP_CONF_DIR指向包含 core-site.xml, hdfs-site.xml, yarn-site.xml 的目录# Spark 会从这里读取 YARN ResourceManager 和 HDFS 的地址[citation:1][citation:5]export HADOOP_CONF_DIR/opt/module/hadoop/etc/hadoop5.2. 配置 spark-defualt.confcd $SPARK_HOME/confcp spark-defaults.conf.template spark-defaults.confvi spark-defaults.conf# Spark on YARN 通用配置 # 如果 Spark 自身的 JAR 包已上传到 HDFS可配置此项以加速任务启动# spark.yarn.jars hdfs:///path/to/spark-jars/*.jar# 动态资源分配可选建议生产环境开启 # 需配合 External Shuffle Service 使用[citation:6]spark.dynamicAllocation.enabled truespark.dynamicAllocation.minExecutors 0spark.dynamicAllocation.maxExecutors 20spark.dynamicAllocation.initialExecutors 0# 性能相关可选参数 # 堆外内存配置避免因内存开销过大导致 Container 被 YARN 杀死[citation:4]# spark.yarn.executor.memoryOverhead 1024# spark.yarn.driver.memoryOverhead 10245.3. 单机模式测试spark-submit \--master yarn \--deploy-mode client \--class org.apache.spark.examples.SparkPi \--driver-memory 2g \--executor-memory 2g \--executor-cores 2 \--num-executors 2 \$SPARK_HOME/examples/jars/spark-examples_*.jar 105.4. 集群模式注意在分发文件前要做好三台机器的IP与主机名映射 /etc/hosts进行分发文件scp -r /opt/module/spark roothadoop002:/opt/module/sparkscp -r /opt/module/spark roothadoop003:/opt/module/sparkscp -r /etc/profile roothadoop002:/etc/profilescp -r /etc/profile roothadoop003:/etc/profile让三台机器文件生效hadoop001 source /etc/profilehadoop002 source /etc/profilehadoop003 source /etc/profile5.5 集群模式测试spark-submit \--master yarn \--deploy-mode client \--class org.apache.spark.examples.SparkPi \--driver-memory 2g \--executor-memory 2g \--executor-cores 2 \--num-executors 2 \$SPARK_HOME/examples/jars/spark-examples_*.jar 10spark-submit \--master yarn \--deploy-mode cluster\--class org.apache.spark.examples.SparkPi \--driver-memory 2g \--executor-memory 2g \--executor-cores 2 \--num-executors 2 \$SPARK_HOME/examples/jars/spark-examples_*.jar 106、集群管理器、资源提供模式及 Driver部署方式6.1.集群管理器本地模式、Standalone单机模式、Standalone集群模式、Spark on Yarn模式的集群管理器区别Local 模式用 --master local[*] 强制指定与Excutor所有的资源调度都由当前JVM进程内部的一个线程池模拟完成。客户单与Driver都在同一个机器。Standalone是Spark内置的集群管理器用于资源管理与调度及运算。内有Master进程和worker进程Master用于调度资源worker用于执行Excutor。单机与集群均需启动Master与worker进程。Spark on Yarn模式是使用外部Yarn集群管理器。无需Master和worker。6.2. 资源提供模式本地模式、Standalone单机模式、Standalone集群模式、Spark on Yarn模式的spark任务提交可以指定资源提供方式使用 --master 指定资源提供方式常见的--master值含义资源由谁管理local[*]本地模式用本机多线程模拟无直接使用本机 JVMspark://host:7077Standalone 集群模式Spark 自带的 Master 进程yarnYARN 集群模式Hadoop 的 ResourceManagerk8s://...Kubernetes 集群模式Kubernetes API Servermesos://...Mesos 集群模式Mesos Master6.3. Driver部署方式本地模式、Standalone单机模式、Standalone集群模式、Spark on Yarn模式的spark任务提交可以指定Driver部署方式使用--deploy-mode指定Driver部署方式值Driver 位置特点client在执行spark-submit的机器上日志实时可见但客户端不能断开连接cluster在集群内部由资源管理器调度客户端可断开稳定适合生产日志需通过 Web UI 查看重点是一般会选择cluster因为client因为 在执行的时候driver是运行在 执行spark-submit的机器上且会有返回结果到控制台如果返回结果过大则会导致此节点进程被杀死或内存溢出等问题甚至宕机。