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

2019-12-16  本文已影响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
上一篇下一篇

猜你喜欢

热点阅读