Spark搭建

Spark搭建(三种模式)

Local模式

主要用于本地开发测试

本文档主要介绍如何在IDEA中配置Spark开发环境

  • 打开IDEA,创建Maven项目

  • 在IDEA设置中安装Scala插件

    image.png
  • 在pom.xml文件中添加Scala依赖

            <dependency>
                <groupId>org.scala-lang</groupId>
                <artifactId>scala-library</artifactId>
                <version>2.12.10</version>
            </dependency>
    
            <dependency>
                <groupId>org.scala-lang</groupId>
                <artifactId>scala-compiler</artifactId>
                <version>2.12.10</version>
            </dependency>
    
            <dependency>
                <groupId>org.scala-lang</groupId>
                <artifactId>scala-reflect</artifactId>
                <version>2.12.10</version>
            </dependency>
    
  • 在pom.xml中添加Scala编译插件

    需要加在build->plugins标签下

                <!-- Scala Compiler -->
                <plugin>
                    <groupId>org.scala-tools</groupId>
                    <artifactId>maven-scala-plugin</artifactId>
                    <version>2.15.2</version>
                    <executions>
                        <execution>
                            <goals>
                                <goal>compile</goal>
                                <goal>testCompile</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
    
  • 在pom.xml文件中添加Spark-Core依赖

            <dependency>
                <groupId>org.apache.spark</groupId>
                <artifactId>spark-core_2.12</artifactId>
                <version>3.1.3</version>
            </dependency>
    
  • 编写第一个Spark程序

    • 准备words.txt数据,每一行包含多个单词,单词之间以逗号分隔

      java,spark,java,hadoop
      java,spark,java,hadoop
      java,spark,java,hadoop
      java,spark,java,hadoop
      java,spark,java,hadoop
      java,spark,java,hadoop
      java,spark,java,hadoop
      java,spark,java,hadoop
      java,spark,java,hadoop
      java,spark,java,hadoop
      
    • 编写代码

      注意words.txt文件路径,按自身情况修改

      package com.shujia.core
      
      import org.apache.spark.rdd.RDD
      import org.apache.spark.{SparkConf, SparkContext}
      
      object Demo01WordCount {
        def main(args: Array[String]): Unit = {
          // 1、构建Spark环境
          // 配置Spark任务
          val conf: SparkConf = new SparkConf()
          conf.setAppName("Demo01WordCount") // 设置任务名
          conf.setMaster("local") // 设置Spark的运行方式
          // 创建SparkContext --> Spark程序的入口
          val sc: SparkContext = new SparkContext(conf)
      
          // 2、构建Spark程序
          // 加载数据
          val lineRDD: RDD[String] = sc.textFile("spark/data/words.txt")
          // 将每个单词提取出来
          val wordsRDD: RDD[String] = lineRDD.flatMap(_.split(","))
          // 按每个单词进行分组
          val groupRDD: RDD[(String, Iterable[String])] = wordsRDD.groupBy(word => word)
          // 统计每个单词的数量
          val wordCntRDD: RDD[String] = groupRDD.map(kv => s"${kv._1},${kv._2.size}")
          // 将结果输出
          wordCntRDD.foreach(println)
        }
      }
      
    • 右键运行,结果如下

      image.png

  • 常见错误

    • windows环境下运行任务通常会有如下报错

      23/10/07 11:23:40 WARN Shell: Did not find winutils.exe: {}
      java.io.FileNotFoundException: java.io.FileNotFoundException: HADOOP_HOME and hadoop.home.dir are unset.
      
  • 原因分析

    • Spark程序运行时找不到winutils.exe程序或依赖
  • 解决方法

    • 下载winutils.exe程序

    • 在任意无中文路径位置新建bin目录,例如

      目录路径位置随意,但一定不要有中文目录

      D:/shujia/bigdata/hadoop3/bin
      
    • 将winutils.exe程序放入上述bin目录中

    • 在系统环境变量中增加一项HADOOP_HOME配置

    • D:/shujia/bigdata/hadoop3/目录作为HADOOP_HOME的值

      注意不要将bin目录包含在其中

    • 重启IDEA

      • 重新运行程序,检查错误是否消失
Standalone模式
  • 1、上传解压

    tar -zxvf spark-3.1.3-bin-without-hadoop.tgz -C /usr/local/soft
    mv spark-3.1.3-bin-without-hadoop spark-3.1.3
    
  • 2、修改配置文件

    # 重命名文件
    cp spark-env.sh.template spark-env.sh
    cp workers.template workers
    

    增加配置vim spark-env.sh

    master相当于RM worker相当于NM

    export SPARK_MASTER_HOST=master
    export SPARK_MASTER_PORT=7077
    export SPARK_WORKER_CORES=1
    export SPARK_WORKER_MEMORY=2g
    export JAVA_HOME=/usr/local/soft/jdk1.8.0_171
    export SPARK_DIST_CLASSPATH=$(/usr/local/soft/hadoop-3.1.3/bin/hadoop classpath)
    

    增加从节点配置vim workers

    以node1、node2作为从节点

    node1
    node2
    
  • 3、复制到其它节点

    cd /usr/local/soft/
    scp -r spark-3.1.3 node1:`pwd`
    scp -r spark-3.1.3 node2:`pwd`
    
  • 4、配置环境变量

  • 5、在主节点执行启动命令

    注意:start-all.sh 与Hadoop的sbin目录中的启动命令有冲突

    cd /usr/local/soft/spark-3.1.3/
    ./sbin/start-all.sh	
    
  • 6、访问Spark Web UI

    http://master:8080/
    
  • 7、测试及使用

    切换目录cd /usr/local/soft/spark-3.1.3/examples/jars

    standalone client模式 :日志在本地输出,一般用于上线前测试

    • 提交自带的SparkPi任务

      spark-submit --class org.apache.spark.examples.SparkPi --master spark://master:7077 --executor-memory 512m --total-executor-cores 1 spark-examples_2.12-3.1.3.jar 100
      

    standalone cluster模式:上线使用,不会在本地打印日志

    • 提交自带的SparkPi任务

      spark-submit --class org.apache.spark.examples.SparkPi --master spark://master:7077 --executor-memory 512M --total-executor-cores 1 --deploy-mode cluster spark-examples_2.12-3.1.3.jar 100
      
  • 8、其他运行方式

    • spark-shell spark 提供的一个交互式的命令行,可以直接写代码

      spark-shell --master spark://master:7077
      
On Yarn模式

在公司一般不适用standalone模式

因为公司一般已经有yarn 不需要搞两个资源管理框架

Spark整合yarn只需要在一个节点整合, 可以删除node1 和node2中所有的Spark 文件

  • 1、停止Spark Standalone模式集群

    # 切换目录
    cd /usr/local/soft/spark-3.1.3/
    # 停止集群
    ./sbin/stop-all.sh
    
  • 2、增加hadoop 配置文件地址

    vim spark-env.sh
    # 增加HADOOP_CONF_DIR
    export HADOOP_CONF_DIR=/usr/local/soft/hadoop-3.1.3/etc/hadoop
    
  • 3、关闭Yarn

    stop-yarn.sh
    
  • 4、修改Yarn配置

    cd /usr/local/soft/hadoop-3.1.3/etc/hadoop/
    vim yarn-site.xml
    
    # 加入如下配置
        <property>
            <name>yarn.nodemanager.pmem-check-enabled</name>
            <value>false</value>
        </property>
    
        <property>
            <name>yarn.nodemanager.vmem-check-enabled</name>
            <value>false</value>
        </property>
    
  • 5、同步到其他节点

    scp -r yarn-site.xml node1:`pwd`
    scp -r yarn-site.xml node2:`pwd`
    
  • 6、启动Yarn

    start-yarn.sh
    
  • 7、测试及使用

    切换目录cd /usr/local/soft/spark-3.1.3/examples/jars

    Spark on Yarn Client模式:日志在本地输出,一班用于上线前测试

    • 提交自带的SparkPi任务

      spark-submit --master yarn --deploy-mode client --class org.apache.spark.examples.SparkPi  --executor-memory 512M --num-executors 2 spark-examples_2.12-3.1.3.jar 100
      

    Spark on Yarn Cluster模式:上线使用,不会在本地打印日志

    • 提交自带的SparkPi任务

      spark-submit --master yarn --deploy-mode cluster --class org.apache.spark.examples.SparkPi  --executor-memory 512M --num-executors 2 spark-examples_2.12-3.1.3.jar 100
      
    • 获取yarn程序执行日志 执行成功之后才能获取到

      yarn logs -applicationId application_1652086375126_0002
      
  • 8、开启Spark On Yarn的WEB UI

    修改配置文件

    # 切换目录
    cd /usr/local/soft/spark-3.1.3/conf
    
    # 去除后缀
    cp spark-defaults.conf.template spark-defaults.conf
    
    # 修改spark-defaults.conf
    vim spark-defaults.conf
    
    # 加入以下配置
    spark.eventLog.enabled  true
    spark.eventLog.dir      hdfs://master:9000/user/spark/applicationHistory
    spark.yarn.historyServer.address        master:18080
    spark.eventLog.compress true
    spark.history.fs.logDirectory   hdfs://master:9000/user/spark/applicationHistory
    spark.history.retainedApplications      15
    

    创建HDFS目录用于存储Spark History日志

    hdfs dfs -mkdir -p /user/spark/applicationHistory
    

    启动Spark History Server

    cd /usr/local/soft/spark-3.1.3/
    ./sbin/start-history-server.sh
    
<think>好的,我现在需要帮助用户了解如何搭建Apache Spark环境。首先,我应该回忆一下之前用户提供的引用内容,看看有没有相关的步骤。引用1提到了执行spark-shell.cmd来启动本地环境,引用3详细说明了Java接入Spark环境搭建,包括Hadoop的下载和配置。引用4则涉及在代码中设置Spark配置。 首先,用户需要搭建Spark环境,可能需要从安装Java开始,因为Spark依赖Java。根据引用3,用户需要JDK 1.8,比如corretto-1.8.0_392。接下来是Hadoop的安装,但Spark本身是否必须依赖Hadoop呢?可能只有在需要HDFS支持时才需要,但本地模式可能不需要。不过引用3提到了下载Hadoop 3.3.6,所以可能需要配置Hadoop的环境变量。 然后,下载Spark的预编译版本,解压后设置环境变量,如SPARK_HOME。接着,配置Spark的参数,可以通过spark-defaults.conf或者代码中设置,如引用4中的例子。启动本地环境的话,运行spark-shell.cmd,如引用1所述。 可能还需要配置日志级别,避免过多的日志输出。测试环境是否成功,可以运行spark-shell并执行简单任务,比如计算Pi。此外,如果用户需要集群模式,可能还需要配置workers、master节点等,但用户的问题可能更关注本地环境搭建。 需要分步骤写出来,先安装Java,再安装Spark,配置环境变量,修改配置文件,启动测试。同时要注意不同操作系统下的路径问题,比如用户引用3是在win11下,所以可能需要说明Windows的步骤,但Spark通常是在Linux下运行,所以可能需要提到两种系统?不过用户提供的引用3明确是win11,所以可能以Windows为主,但也要提到Linux的通用步骤。 另外,用户可能遇到的问题,比如环境变量未正确设置,Java版本不兼容,Hadoop的dll文件缺失(在Windows下需要winutils),这些在引用3中提到过。因此,需要提醒用户下载winutils并配置HADOOP_HOME。 总结步骤: 1. 安装JDK 8并配置环境变量。 2. 下载并解压Spark,设置SPARK_HOME。 3. 下载Hadoop的winutils,配置HADOOP_HOME。 4. 修改Spark配置文件(如spark-env.cmd,添加Java路径)。 5. 测试运行spark-shell.cmd。 6. 可选:配置集群模式或IDE集成。 同时,生成相关问题,例如如何验证安装成功,常见问题解决,如何配置集群等。</think>### Apache Spark环境搭建步骤 #### 一、环境准备 1. **安装JDK 8+** Spark依赖Java环境,需先安装JDK 1.8或更高版本。 - 下载地址:[Amazon Corretto JDK 8](https://docs.aws.amazon.com/corretto/latest/corretto-8-ug/downloads-list.html) - 配置环境变量: ```bash JAVA_HOME = C:\jdk1.8.0_392 # 根据实际路径修改 PATH = %JAVA_HOME%\bin;... ``` 2. **下载Hadoop工具(仅Windows必需)** 在Windows系统运行Spark需额外配置Hadoop的`winutils.exe`工具[^3]。 - 下载`hadoop-3.3.6`并解压,配置环境变量: ```bash HADOOP_HOME = C:\hadoop-3.3.6 PATH = %HADOOP_HOME%\bin;... ``` - 将`winutils.exe`复制到`%HADOOP_HOME%\bin`目录(需从第三方仓库获取)。 --- #### 二、安装Apache Spark 1. **下载Spark预编译包** - 官网下载地址:[Apache Spark Download](https://spark.apache.org/downloads.html) 选择与Hadoop版本兼容的包(如`spark-3.5.0-bin-hadoop3.tgz`)。 - 解压到本地目录(如`C:\spark-3.5.0`)。 2. **配置环境变量** ```bash SPARK_HOME = C:\spark-3.5.0 PATH = %SPARK_HOME%\bin;... ``` 3. **修改Spark配置文件** - 进入`%SPARK_HOME%\conf`目录,复制`spark-env.cmd.template`为`spark-env.cmd`。 - 添加Java路径(Windows): ```bash set JAVA_HOME=C:\jdk1.8.0_392 ``` --- #### 三、验证安装 1. **启动本地模式** 执行以下命令启动Spark Shell[^1]: ```bash %SPARK_HOME%\bin\spark-shell.cmd ``` 成功启动后会显示`SparkSession`信息。 2. **运行测试任务** 输入以下代码计算Pi值: ```scala val pi = spark.sparkContext.parallelize(1 to 100000).map{ _ => val (x, y) = (math.random, math.random) if (x*x + y*y <= 1) 1 else 0 }.reduce(_ + _) println(s"Pi ≈ ${4.0 * pi / 100000}") ``` --- #### 四、集群模式配置(可选) 1. **配置主节点和工作节点** - 在`%SPARK_HOME%\conf\workers`文件中添加工作节点IP。 - 在`spark-env.cmd`中设置`SPARK_MASTER_HOST`为主节点IP。 2. **启动集群** ```bash %SPARK_HOME%\sbin\start-master.cmd # 启动主节点 %SPARK_HOME%\sbin\start-worker.cmd spark://主节点IP:7077 # 启动工作节点 ``` --- #### 五、IDE集成(以IntelliJ IDEA为例) 1. **新建Maven项目** 添加Spark依赖到`pom.xml`: ```xml <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_2.12</artifactId> <version>3.5.0</version> </dependency> ``` 2. **编写示例代码** ```scala import org.apache.spark.{SparkConf, SparkContext} object WordCount { def main(args: Array[String]): Unit = { val conf = new SparkConf().setAppName("WordCount").setMaster("local[*]") val sc = new SparkContext(conf) val text = sc.textFile("input.txt") text.flatMap(_.split(" ")).countByValue().foreach(println) sc.stop() } } ``` ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值