1、编辑需要运行的spark代码
最好是在linux环境的spark-shell,测试成功
package cn.edu.swpu.scs

import org.apache.spark.{SparkConf, SparkContext}


object App {
  def main(args: Array[String]){

    val sparkConf = new SparkConf()
    val sc = new SparkContext(sparkConf)

    val rdd = sc.textFile("hdfs://node1:9000/lab2")

    /**
     * 统计各咖啡商品的销售额,按金额降序排列后保存
     */
    //将Online Retail.txt按行读取至RDD
    val   rdd1 = rdd.map(x=>x.split("\t"))  //按照\t切分为数据
      .filter(x=>x(2).matches(".*COFFEE.*"))  //正则表达式匹配
      .map(x=>(x(1)->x(5).toDouble)).groupByKey()   //将字符数组转化为key-value,并将value.toDouble
      .map(x=>(x._1,x._2.sum)).sortBy(x=>x._2,false)  //对数据销售额求和,降序排列
      .saveAsTextFile("hdfs://node1:9000/OutputLab2_1") //持久化

     val rdd4= rdd.map(x=>x.split("\t")).map(x=>(x(6)->x(5).toDouble))
    /**
     * 统计各顾客的总消费金额,按金额降序排列后保存
     */
    val rdd2 = rdd4.groupByKey().map(x=>(x._1,x._2.sum))
      .sortBy(x=>x._2,false)
      .saveAsTextFile("hdfs://node1:9000/OutputLab2_2")

    /**
     * 统计各顾客最贵订单的金额,按金额降序排列后保存
     */
    val rdd3 = rdd4.groupByKey().map(x=>(x._1,x._2.max))
      .sortBy(x=>x._2,false)
      .saveAsTextFile("hdfs://node1:9000//OutputLab2_3")
  }
}
2、编译

在主类中点击右键,选择“Recompile …”编译项目;
也可运行build --> recompile执行编译。

下面放一个我编译遇见的错误
3、打包jar包

执行:File --> Project Structure --> Project Settings --> Artifacts --> + --> JAR --> Empty

在idea上编写spark程序直接提交到yarn上执行 idea运行spark_jar包


在idea上编写spark程序直接提交到yarn上执行 idea运行spark_jar包_02


添加成功编译的class文件

在idea上编写spark程序直接提交到yarn上执行 idea运行spark_jar包_03


在idea上编写spark程序直接提交到yarn上执行 idea运行spark_jar包_04

注意要实现编译,才有此class文件,没编译或编译失败都无此文件

执行Build --> Build Artifacts,

在idea上编写spark程序直接提交到yarn上执行 idea运行spark_scala_05


完成后,在项目的out目录中可找到创建的JAR包,如下图:

在idea上编写spark程序直接提交到yarn上执行 idea运行spark_scala_06

4、执行jar包

将程序打包好的jar包上传至linux中(采用PuTTY 或者 Xftp都可以)

若需读取HDFS数据,则要先启动HDFS并将数据传上去

在idea上编写spark程序直接提交到yarn上执行 idea运行spark_hdfs_07

在linux中提交JAR包,输入spark-submit命令即可,具体的命令格式为:
spark-submit --class cn.edu.swpu.scs.App
--master yarn \
--deploy-mode cluster\
~/SparkTest.jar
注:
① \ 是Linux命令换行符,命令太长的情况可输入 \ 换下一行输入后续命令
② --是spark-submit的参数符号,后跟spark-submit命令参数
参数解释:
① class 主类包名和类名,请自行替换为jar包中实际的包名和类名
② master 程序提交模式,参数取值:local 本地模式(单线程);local[*] 本地模式(最大线程数量);local[n] 本地模式(执行线程数量);spark://node1:7077 Standalone模式,请自行替换为实际的Master地址;yarn YARN模式;若不指定该参数,缺省值为local[*]
③ deploy-mode 指定集群模式,参数取值:client(缺省值),cluster;当master设置为Standalone模式或YARN模式又需要使用cluster模式时可配置该参数
④ 也可以在这里配置其他的spark-conf参数

成功运行

在idea上编写spark程序直接提交到yarn上执行 idea运行spark_spark_08


记录一个提交过程的错误