idea打成jar包通过spark-submit工具部署

准备工作

  • 新建好scala 项目,并集成spark-hadoop依赖

    新建scala项目,并引用spark-hadoop集成包(scala-sdk-2.10.6,spark-assembly-1.6.0-hadoop2.6.0.jar)

操作步骤

  • 新建scala项目

    打开idea开发工具==>File==>New==>Project==>Scala==>Scala ==>Next==>
    Project name:填写自己的项目名称 Project location:填写自己的项目在本地磁盘存放的路径 Project SDK:点击New找到jdk安装根路径(1.8以上),选中根目录 Scala SDK: 点击Create找到scala安装根路径(scala-2.10.6)
    ==>Finish

  • 添加spark-hadoop集成包 选中项目 ==>右键==>Open Module Setting==>Global Libraries==> 点+按钮选Java,找到spark-assembly-1.6.0-hadoop2.6.0.jar==>OK==>OK

  • 项目的依赖关系如图

  • 新建WordCount.scala

    package com.opensourceteam.model.common.bigdata.spark.quickstart
    import org.apache.spark.{SparkConf,SparkContext}

    /**
      * 开发者:刘文  Email:[email protected]
      * 16-1-19  下午11:07
      * 功能描述:
      */
    object WordCount extends App{
      /**
        * 第一步:创建Spark的配置对象SparkConf,设置Spark程序的运行时的配置信息,例如说通过setMaster来设置程序
        * 要连接的Spark集群的Master的URL,如果设置为local,则代表Spark程序在本地运行,特别适合机器配置条件非常差
        */
      val conf = new SparkConf
      /**
        * appname: 应用的名称
        * master:主机地址
        * 本地,不运行在集群值:local
        * 运行在集群:spark://s0:7077
        */
      conf.setAppName("IDEA第一个程序").setMaster("spark://s0:7077")

      /**
        * 创建SparkContext对象
        * SparkContext 是Spark程序的所有功能的唯一入口,无论是采用Scal,Java,Python,R等
        * 同时还会负则Spark程序往Master注册程序等
        * SparkContext是整个Spark应用程序中最为至关重要的一个对象
        */
      val sc =new  SparkContext(conf)
      /**
        * 根据具体的数据来源(HDFS、Hbse、local Fs、DB、S3等通过SparkContext来创建RDD)
        * RDD创建有三种方式:根据外部的数据来源例 如HDFS、根据Scala集合、由其它的RDD操作
        * 数据会被RDD划分成为一系列的Patitions,分配到每个Patition的数据属于一个Task的处理范畴
        */
      val path = "/library/wordcount/input/Data"
      val lines = sc.textFile(path, 3)  //读取文 件,并设置为一个Patitions (相当于几个Task去执行)

      val mapArray = lines.flatMap { x => x.split(" ") } //对每一行的字符串进行单词拆分并把把有行的拆分结果通过flat合并成为一个结果
      val mapMap = mapArray.map { x => (x,1) }

      val result  =  mapMap.reduceByKey(_+_) //对相同的Key进行累加
      result.collect().foreach(x => println("key:"+ x._1 + " value"  + x._2))
      val resultValue = result.map(x =>(x._2,x._1))
      val resultOrder = resultValue.sortByKey(false).map(x => (x._2 ,x._1))
      resultOrder.collect().foreach(x => println("key:"+ x._1 + " value:"  + x._2))
     // result.saveAsTextFile("output")

      sc.stop()
    }
  • 将项目打成jar 包 选中项目==>右键==>Open Module Settings==>Artifacts==>点+按钮选JAR==>From Modules With Dependencies...
    Module:选当前项目
    Main Class:选中默认的入口程序,可不填,但此时运行Jar文件时需要指定入口类的全路径
    Jar files from libraries ==> 选择 extract to the target JAR ==>OK

结果如图 最后点OK

  • 用idea工具打包,Build ==> Make Project 看工具又下方的进度,等待完成

  • 查看jar

    项目根路径/out/artifacts/spark_1_6_0_bin_hadoop2_6_idea_jar/spark-1.6.0-bin-hadoop2.6-idea.jar

  • 查看class

    项目根路径/out/production/spark-1.6.0-bin-hadoop2.6-idea/*

  • 在项目根路径下新建submit.sh文件

      #!/bin/bash
      SPARK_HOME=/opt/modules/bigdata/spark/spark-1.6.0-bin-hadoop2.6
       $SPARK_HOME/bin/spark-submit  --class  com.opensourceteam.model.common.bigdata.spark.quickstart.WordCount  --master spark://s0:7077  /home/hadoop/workspaces/idea/bigdata/spark/spark-1.6.0-bin-hadoop2.6-idea/out/artifacts/spark_1_6_0_bin_hadoop2_6_idea_jar/spark-1.6.0-bin-hadoop2.6-idea.jar
    
  • 执行 submit.sh 文件

    在终端 chmod u+x /home/hadoop/workspaces/idea/bigdata/spark/spark-1.6.0-bin-hadoop2.6-idea/submit.sh
    sh /home/hadoop/workspaces/idea/bigdata/spark/spark-1.6.0-bin-hadoop2.6-idea/submit.sh
    
  • 打开界面查看运行状态

    http://s0:18080