1. 程式人生 > >Spark本地開發環境搭建與遠端debug設定

Spark本地開發環境搭建與遠端debug設定

快速看完《Spark大資料處理 技術、應用與效能優化》前四章後,對Spark有了一個初步的瞭解,終於踏出了第一步,現在需要在Spark叢集中做些測試例子,熟悉一下開發環境和開發的流程。本文主要總結了如何在本地使用Maven搭建開發環境以及如何進行遠端debug。由於採用的Spark是今年5月24號才釋出的Spark2.1.1,網上大多數例子都是Spark1.X,因此走了不少彎路,才搭建好開發環境。

一:版本概述

Spark版本:2.1.1
IntelliJ IDEA:2017.1.5
開發環境:mac
測試環境:Linux

二:本地開發環境搭建

1、新建一個Maven專案,archetype選擇scala

這裡寫圖片描述

2、匯入spark相關包

配置pom.xml,然後Maven自動下載依賴包,Spark2.X已經不提供spark-assembly-1.5.0-hadoop2.4.0.jar 之類的jar包,改成了一些小的jar包,存放在jars目錄下。開發的時候可以全部匯入jars目錄下的jar包,但更方便的是使用maven可以方便的自動匯入spark2.1.1開發所需要的包。

<dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-core_2.11</artifactId>
      <version>2.1.1</version>
      <scope>provided</scope>
</dependency>

3、編寫WordCount

package com.xuxp.test

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

/**
  * Created by xuxp on 2017/8/21.
  */
object WordCount {
  def main(args: Array[String]): Unit = {
    if (args.length == 0) {
      System.err.println("Usage: SparkWordCount <inputfile> <outputfile>")
      System.exit(1)
    }
    val conf = new SparkConf().setAppName("WominWordCount")
    val sc = new SparkContext(conf)
    val textRdd = sc.textFile(args(0))
    val result = textRdd.flatMap ( line => line.split("\\s+") ).map(word => (word, 1)).reduceByKey(_ + _)
    result.saveAsTextFile(args(1))
  }
}

4、打包配置

在project settings->Artifacts新建一個JAR—>from modules with dependencies
選擇Main Class.
這裡寫圖片描述

配置好後Build—>Build Artifacts —>build,就能生成打包好的jar包
這裡寫圖片描述

5、jar包上傳

配置檔案上傳tools—>deployment
這裡寫圖片描述

開啟Browse Remote Host,將檔案直接拖過去,就實現檔案上傳
這裡寫圖片描述

6、執行jar包

寫一個執行指令碼,上傳後,每次只需要./run-spark.sh就能很快的執行。執行時需要保證README.md在hdfs中。
這裡寫圖片描述

執行完畢後,可以查詢outputdir/part-00000中的檔案hadoop fs -cat outputdir/part-00000
這裡寫圖片描述

三:遠端開發除錯

1、在遠端伺服器的bash中設定SPARK_SUBMIT_OPTS

export SPARK_SUBMIT_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=41999

這是臨時設定,每次都需要進行設定一下,暫不永久設定。

2、在IntelliJ IDEA中配置remote debug

這裡寫圖片描述

3、打個斷點

這裡寫圖片描述

4、在遠端伺服器上執行程式

執行時會出現程式掛起,監聽埠中,此時進行下一步
這裡寫圖片描述

5、在IntelliJ IDEA中debug

出現如下情況,說明遠端debug成功
這裡寫圖片描述
程式會繼續輸出,並在斷點出停住。

這裡寫圖片描述

總結

不得不說IntelliJ IDEA確實是一個非常強大的整合開發環境,提供版本管理,ssh,遠端debug等強大功能,是Spark開發的利器,事實上Spark的開發團隊也是使用IntelliJ IDEA來開發Spark的。

網上的有關spark的搭建文章有時候並不適合自己,需要根據自己的環境,軟體的版本來選擇搭建的方式。

參考資料

How to debug a scala based Spark program on Intellij IDEA - Stack Overflow
想研讀下spark的原始碼,怎麼搭閱讀和除錯的環境呢? - 知乎
IntelliJ IDEA 匯入 spark 原始碼 步驟 - - CSDN部落格
Spark修煉之道(進階篇)——Spark入門到精通:第三節 Spark Intellij IDEA開發環境搭建-部落格-雲棲社群-阿里雲


轉自:https://blog.csdn.net/ping_hu/article/details/77513429