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

本文详细介绍了如何在IDEA中创建Scala项目,配置Spark SDK,新建scala对象,引入Spark库,并实现从HDFS读取和保存数据。接着讲解了如何打包Spark应用为jar文件,并将其提交到Spark集群运行,以及验证执行结果的过程。

一、IDEA新建scala应用

Create New Project

选择scala,IDEA,点击next

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

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

打开file下的 Project structure

新建目录和设置属性:

把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;

二、新建scala object类

引入spark必须的包;

再次打开project struct,libraries,

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

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

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

新建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”

选择主类,SparkDemo;点击 ok

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

删除后,点击ok

找到build -> build artifacts

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

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

四、发布到spark运行

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

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 命令

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

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

说明有执行成功。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值