用idea开发我们的spark项目

写在前面

如果你是刚入行的java(或大数据)菜鸟,如果你还不会使用idea这样的“神兵利器”,如果你还对 mvn clean package 这样的命令一知半解。那么,你有必要花点时间,瞧一瞧这篇文章,正所谓,“工欲善其事,必先利其器”,它将指导你一步一步用idea开发出我们的spark程序,用maven编译打包我们的Scala(Scala与Java混合)代码。当然,大神请自动忽略。

开发环境

  • macOs Mojave
  • idea 2019.3.1
  • maven-3.6.4
  • spark-2.4.3
  • hadoop-2.7.4
  • jdk-1.8
  • scala-2.1.8

快速开始

1. 创建一个空的maven项目

maven

2. 使用Scala插件

使用scala插件,Scala插件的安装和使用在此将不做赘述。引入Scala插件之后,我们就能愉快地编辑我们的Scala代码。

3. 编辑pom文件



    4.0.0

    com.dr.leo
    leo-study-spark
    1.0-SNAPSHOT

    跟着leo学习spark
    https://www.jlpyyf.com
    
        
            leo
            leo.jie
            [email protected]
            
                developer
            
        
    

    
        UTF-8
        1.8
        1.8
        2.4.3
        2.11
        
        provided
    

    
        
            org.apache.spark
            spark-core_${scala.version}
            ${spark.version}
            ${spark.cope}
        
        
        
            org.apache.spark
            spark-sql_${scala.version}
            ${spark.version}
            ${spark.cope}
        

        
        
            org.apache.spark
            spark-hive_${scala.version}
            ${spark.version}
            ${spark.cope}
        

        
        
            mysql
            mysql-connector-java
            5.1.32
        

        
            com.microsoft.sqlserver
            mssql-jdbc
            6.1.0.jre8
        

    

    
        
            
                org.scala-tools
                maven-scala-plugin
                2.15.0
                
                    
                        
                            compile
                            testCompile
                        
                    
                
                
                    ${scala.version}
                    
                        -target:jvm-1.5
                    
                
            
            
                org.apache.maven.plugins
                maven-eclipse-plugin
                2.10
                
                    true
                    
                        ch.epfl.lamp.sdt.core.scalabuilder
                    
                    
                        ch.epfl.lamp.sdt.core.scalanature
                    
                    
                        org.eclipse.jdt.launching.JRE_CONTAINER
                        ch.epfl.lamp.sdt.launching.SCALA_CONTAINER
                    
                
            
            
                maven-assembly-plugin
                3.1.1
                
                    
                        jar-with-dependencies
                    
                    leo-study-spark
                    false
                
                
                    
                        make-assembly
                        package
                        
                            single
                        
                    
                
            
            
                org.apache.maven.plugins
                maven-compiler-plugin
                3.6.0
                
                    1.8
                    1.8
                
            
            
                org.codehaus.mojo
                build-helper-maven-plugin
                1.10
                
                    
                        add-source
                        generate-sources
                        
                            add-source
                        
                        
                            
                            
                                src/main/java
                                src/main/scala
                            
                        
                    
                
            
        
    

    
        
            
                org.scala-tools
                maven-scala-plugin
                
                    ${scala.version}
                
            
        
    



pom 文件中引入了spark的一些核心依赖以及编译打包Scala和Java代码的插件。

4. 编写WordCount程序

object WordCount {
  def main(args: Array[String]): Unit = {
    println(JavaTest.sayHello())
    val javaTest = new JavaTest
    javaTest.sayHi()
    val conf = new SparkConf().setMaster("local[4]").setAppName("WordCount")
    val sc = new SparkContext(conf)
    sc.textFile(args(0)).flatMap(_.split(" "))
      .map((_, 1))
      .reduceByKey(_ + _)
      .saveAsTextFile(args(1))
    sc.stop()
  }
}
  • 最终的项目结构:
project
  1. 编译打包,发往集群上运行
  • 注意一:一般情况下,我们pom中引入的spark相关依赖是不需要打进我们最终的jar中的。所以修改,spark相关依赖的scope属性值为provided。
  • 注意二:如果jar需要以集群模式运行,则需要注释我们的WordCount程序中的 setMaster("local[4]")
  • 运行maven的打包命令
mvn clean package
  • 打包结果
maven
  • leo-study-spark.jar就是我们需要在集群上运行的可执行jar包
  • 上传leo-study-spark.jar到集群,执行如下命令:
spark-submit --master yarn --deploy-mode cluster --driver-memory 2G --executor-memory 2g --num-executors 5 --conf spark.yarn.executor.memoryOverhead=2048 --conf spark.network.timeout=30000 --class com.dr.leo.WordCount leo-study-spark.jar hdfs://leo/test/test.txt hdfs://leo/test/leo_word_count
  • 运行结果截图
success
  • WordCount的输出结果
wordcount
  • yarn ui 查看我们刚刚提交的任务
yran

Scala代码中调用Java的方法的结果输出。

小节

以上便完成了spark的项目的搭建,以及用maven编译打包我们的Scala程序。整个流程最核心的其实是pom.xml文件,当然,这个pom.xml文件应该不是最完美的,如有不足之处,还望大家积极指正,与君共勉。

你可能感兴趣的:(用idea开发我们的spark项目)