天天看點

【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以及打包測試

說明有執行成功。

繼續閱讀