天天看点

【Spark】使用IDEA开发Spark Application以及打包测试

一、IDEA新建scala应用

Create New Project

【Spark】使用IDEA开发Spark Application以及打包测试

选择scala,IDEA,点击next

【Spark】使用IDEA开发Spark Application以及打包测试

项目名称:sparkApp,选择JDK,选择Scala SDK,点击finish

【Spark】使用IDEA开发Spark Application以及打包测试

等待加载项目,项目目录结构如下

【Spark】使用IDEA开发Spark Application以及打包测试

打开file下的 Project structure

【Spark】使用IDEA开发Spark Application以及打包测试

新建目录和设置属性:

把src设置为source;

在src下新建2个目录,main和test,其中main设置为source,test设置为test;

在main和test目录下分别新建3个目录:java,resource,scala;

main目录下的java和scala设置为source,resource设置为resource;

test目录下的java和scala设置为test,resource设置为test resource;

【Spark】使用IDEA开发Spark Application以及打包测试

二、新建scala object类

引入spark必须的包;

再次打开project struct,libraries,

【Spark】使用IDEA开发Spark Application以及打包测试

选择 spark-1.3.0-bin-2.5.0-cdh5.3.6/lib 目录下的所有 jar包;点击 ok

【Spark】使用IDEA开发Spark Application以及打包测试

可以在外部包看到引入的lib

【Spark】使用IDEA开发Spark Application以及打包测试

在Scala 目录下新建package:com.spark.app

【Spark】使用IDEA开发Spark Application以及打包测试

新建scala object:SparkDemo;

从hdfs读取文件生成rdd,处理完后保存结果到hdfs;

package com.spark.app

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

/*
scala的main方法必须在 object 中
 */
object SparkDemo {

  def main(args: Array[String]): Unit = {

    val inputFile = "hdfs://hadoop-senior.ibeifeng.com:8020/user/root/mapreduce/wordcount/input/wc.input" // Should be some file on your system
    val outputFile = "hdfs://hadoop-senior.ibeifeng.com:8020/user/root/mapreduce/wordcount/sparkOutput"

    val conf = new SparkConf().setAppName("Simple Application") //.setMaster("local")
    val sc = new SparkContext(conf)

    val rdd = sc.textFile(inputFile);
    val wordCount = rdd.flatMap(line => line.split(" ")).map(x => (x, 1)).reduceByKey((x, y) => (x + y))

    wordCount.saveAsTextFile(outputFile)

    sc.stop()
  }
}
           

右键运行 SparkDemo;查看hdfs上生成的文件;

bin/hdfs dfs -text /user/root/mapreduce/wordcount/sparkOutput/part-00000

(hive,3)
(hadoop,3)
(sqoop,2)
(hbase,2)
           

三、打包

再次打开project structure;选择artifacts,点击 + 号;选择JAR,点击 “from modules with dependencies”

【Spark】使用IDEA开发Spark Application以及打包测试

选择主类,SparkDemo;点击 ok

【Spark】使用IDEA开发Spark Application以及打包测试

删除jar包,选中jar包,点击 - 号删除;

【Spark】使用IDEA开发Spark Application以及打包测试

删除后,点击ok

【Spark】使用IDEA开发Spark Application以及打包测试

找到build -> build artifacts

【Spark】使用IDEA开发Spark Application以及打包测试

选中上文设置的jar,再点击build

【Spark】使用IDEA开发Spark Application以及打包测试

在根目录下有新的目录out,在下级目录可以找到生成的 sparkApp.jar

【Spark】使用IDEA开发Spark Application以及打包测试

四、发布到spark运行

把sparkApp.jar 用 filezilla 上传到 spark-1.3.0-bin-2.5.0-cdh5.3.6/jars 目录下

【Spark】使用IDEA开发Spark Application以及打包测试

spark-submit 入门了解,如果是多行,每一行最后的反斜杆 \ 不可以省略;

bin/spark-submit \
  --class <main-class> \        -- jar包的主类,在打包时已经设置主类,所以这一个配置可以删除
  --master <master-url> \       -- 集群管理器所在的节点
  --deploy-mode <deploy-mode> \      -- 部署模式,可以是client或cluster
  --conf <key>=<value> \        -- 配置的参数
  ... # other options
  <application-jar> \           -- jar包名称
  [application-arguments]       -- 启动应用的参数
           

sparkApp.jar 启动的 spark-submit 命令应该为:

bin/spark-submit \
  --master spark://hadoop-senior.ibeifeng.com:7077 \
  jars/sparkApp.jar
           

由于在上文已经运行 sparkDemo,在hdfs上有生成输出的文件;所以要先删除该目录

bin/hdfs dfs -rm -r mapreduce/wordcount/sparkOutput
           

在 spark-1.3.0-bin-2.5.0-cdh5.3.6 目录下运行 spark-submit 命令

【Spark】使用IDEA开发Spark Application以及打包测试

运行命令后;检验是否成功执行sparkDemo;

在hdfs上,/user/root/mapreduce/wordcount/sparkOutput 有新生成文件

【Spark】使用IDEA开发Spark Application以及打包测试

说明有执行成功。

继续阅读