美文网首页
Spark开发--IDEA--编程环境搭建(六)

Spark开发--IDEA--编程环境搭建(六)

作者: 无剑_君 | 来源:发表于2019-12-16 13:36 被阅读0次

    一、环境准备

    IntelliJ IDEA 2018.2

    1. 安装scala


      安装scala

      配置环境变量:

    SCALA_HOME:C:\Program Files (x86)\scala
    path:%SCALA_HOME%\bin
    
    1. 安装scala插件


      安装scala插件
      安装scala插件
    2. 配置全局的Scala SDK


      项目配置
    配置Scala
    下载安装
    下载完成
    选择Scala

    选择Browser:


    本地加载 设置结果

    二、构建maven工程

    1. 项目创建


      项目创建
    选择Maven 设置包名与项目名称 选择Maven 设置保存路径
    1. 导入依赖
      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <spark.version>2.4.4</spark.version>
        <scala.version>2.12</scala.version>
      </properties>
      <dependencies>
        <!--core包-->
        <dependency>
          <groupId>org.apache.spark</groupId>
          <artifactId>spark-core_${scala.version}</artifactId>
          <version>${spark.version}</version>
        </dependency>
      </dependencies>
    
    1. 新建Scala文件


      Scala
      新建Scala文件
    package com.xtsz
    
    import org.apache.spark.{SparkConf, SparkContext}
    
    object MySpark {
    
      def main(args: Array[String]) {
        // 定义应用名称
        val conf = new SparkConf().setAppName("mySpark")
        //  setMaster("local") 本机的spark就用local,远端的就写ip
        //  如果是打成jar包运行则需要去掉 setMaster("local")因为在参数中会指定。
        conf.setMaster("local")
        val sc =new SparkContext(conf)
        //  parallelize()函数创建RDD
        val rdd =sc.parallelize(List(1,2,3,4,5,6)).map(_*3)
        // 过滤器
        val mappedRDD=rdd.filter(_>10).collect()
        //  对集合求和
        println(rdd.reduce(_+_))
        println("数学就是工作")
      }
    }
    
    1. 运行


      运行
      运行结果
    2. 打包


      项目设置
      打包设置
      选择入口类
      选择入口类
      确定
      设定jar包
      构建jar包

      去掉代码中的:

    conf.setMaster("local")
    
    构建jar包

    构建结果:


    构建结果

    三、传统导包方式

    请安装:

    1. 新建项目

    新建项目

    2.导入Spark依赖

    新建目录
    导入依赖
    导入依赖jar包

    3. 打包上传

    删除多余的包
    打包

    四、上传运行(独立模式运行)

    1. 文件上传


      文件上传
    2. 提交作业

    root@master:/usr/local/spark-2.4.4-bin-hadoop2.7# ./bin/spark-submit --class com.xtsz.MySpark --master spark://master:7077 /root/sparkexam.jar
    
    

    运行结果:


    运行结果

    Spark运行基本流程:
    Spark的基本运行流程如下:

    1. 当一个Spark应用被提交时,首先需要为这个应用构建起基本的运行环境,即由任务控制节点(Driver)创建一个SparkContext,由SparkContext负责和资源管理器(Cluster Manager)的通信以及进行资源的申请、任务的分配和监控等。SparkContext会向资源管理器注册并申请运行Executor的资源;
    2. 资源管理器为Executor分配资源,并启动Executor进程,Executor运行情况将随着“心跳”发送到资源管理器上;
      SparkContext根据RDD的依赖关系构建DAG图,DAG图提交给DAG调度器(DAGScheduler)进行解析,将DAG图分解成多个“阶段”(每个阶段都是一个任务集),并且计算出各个阶段之间的依赖关系,然后把一个个“任务集”提交给底层的任务调度器(TaskScheduler)进行处理;Executor向SparkContext申请任务,任务调度器将任务分发给Executor运行,同时,SparkContext将应用程序代码发放给Executor;
    3. 任务在Executor上运行,把执行结果反馈给任务调度器,然后反馈给DAG调度器,运行完毕后写入数据并释放所有资源。


      Spark运行基本流程

    六、独立模式远程运行

    1. 代码编写
    package com.neuedu
    
    import org.apache.spark.{SparkConf, SparkContext}
    
    object MySpark {
    
      def main(args: Array[String]) {
        // 定义应用名称
        val conf = new SparkConf().setAppName("mySpark")
        //  setMaster("local") 本机的spark就用local,远端的就写ip
        //  如果是打成jar包运行则需要去掉 setMaster("local")因为在参数中会指定。
        //  本地环境,如果是独立环,注释以下内容及 conf.setMaster("spark://master:7077")
        //  conf.setMaster("local")
        // YARN环境
        conf.setMaster("spark://master:7077")
        // 此处可以是相对路径,也可是绝对路(上传要改为linux路径)
        conf.setJars(Array("/root/sparkexam1.jar"))
        val sc = new SparkContext(conf)
        //  parallelize()函数创建RDD
        val rdd = sc.parallelize(List(1, 2, 3, 4, 5, 6)).map(_ * 3)
        // 过滤器
        val mappedRDD = rdd.filter(_ > 10).collect()
        //  对集合求和
        println(rdd.reduce(_ + _))
        println("数学就是工作")
      }
    }
    

    说明:
    如果远程运行,请注意:

     conf.setJars(Array("/root/spark-test.jar"))
    

    这个路径,报错找不到jar包,打包后,请将jar拷贝到报错相应路径即可。

    错误
    jar路径
    注意:
    打包时,要将除自身外其它的jar全部删除。
    1. 运行


      直接运行

    六、常见问题:

    1. Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties

    2. java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.
      解决:
      配置HADOOP_HOME并拷贝:winutils.exe 到bin目录。

    3. Exception in thread "main" java.lang.NoSuchMethodError: scala.Predef$.intArrayOps([I)[I
      原因:
      scala版本不一致。

    4. idea搭建maven spark环境(解决java.lang.ClassNotFoundException异常)
      在idea中执行成功 但是在spark submit提交会出现ClassNotFoundException异常,可以看下解决异常图,要选择copy to the output将所有的jar分开。
      注意:
      检查包名与提交运行是否一致。

    package com.neuedu
    

    运行命令:

    ./bin/spark-submit --class com.xtsz.MySpark --master spark://master:7077 /root/sparkexam.jar
    

    相关文章

      网友评论

          本文标题:Spark开发--IDEA--编程环境搭建(六)

          本文链接:https://www.haomeiwen.com/subject/jkczwctx.html