Spark2.x在Idea中運行在遠程集羣中並進行調試

方法1

把自己的電腦作爲Driver端,直接把jar包提交到集羣,此時Spark的Master與Worker會一直和本機的Driver端保持連接,調試比較方便。

import org.apache.spark.SparkContext
import org.apache.spark.SparkConf
 
object WordCount {
  def main(args: Array[String]): Unit = {
    val sparkConf = new SparkConf().setAppName("SparkTest")
      //設置Master_IP
      .setMaster("spark://1.185.74.124:7077")
      //提交的jar包在你本機上的位置
      .setJars(List("C:\\Users\\Administrator\\IdeaProjects\\Spark2.1.0\\out\\artifacts\\Spark2_1_0_jar\\Spark2.1.0.jar"))
      //設置driver端的ip,這裏是你本機的ip
      .setIfMissing("spark.driver.host", "172.18.18.114")
    val sc = new SparkContext(sparkConf)
    println("SparkTest...")
    sc.stop
  }

效果圖:

方法2

1.導入依賴的包和源碼

在下載spark中到的導入spark的相關依賴了包和其源碼.zip

2.使用官方求Pi的例子

import org.apache.spark.{SparkConf, SparkContext}
 
object FirstDemo {
  def main(args: Array[String]) {
    val conf = new SparkConf().setAppName("Spark Pi")
    val spark = new SparkContext(conf)
    val slices = if (args.length > 0) args(0).toInt else 2
    val n = 100000 * slices
    val count = spark.parallelize(1 to n, slices).map { i =>
      val x = Math.random * 2 - 1
      val y = Math.random * 2 - 1
      if (x * x + y * y < 1) 1 else 0
    }.reduce(_ + _)
    println("*****Pi is roughly " + 4.0 * count / n)
    spark.stop()
  }
}

3.導出項目jar包

確認之後->build->build artifacts->rebuild

4.啓動集羣

先修改配置文件,再啓動集羣可能會導致master無法正常啓動,下次想取消遠程調試,可以把配置文件再改回來

[root@master sbin]# jps
30212 SecondaryNameNode
32437 -- main class information unavailable
30028 NameNode

所以請先啓動集羣

[root@master sbin]# ./start-all.sh 
starting org.apache.spark.deploy.master.Master, logging to /hadoop/spark-1.6.0-bin-hadoop2.6/logs/spark-root-org.apache.spark.deploy.master.Master-1-master.out
slave01: starting org.apache.spark.deploy.worker.Worker, logging to /hadoop/spark-1.6.0-bin-hadoop2.6/logs/spark-root-org.apache.spark.deploy.worker.Worker-1-slave01.out

5.修改配置文件spark-class
 spark-class在SPARK_HOME/bin下

done < <("$RUNNER" -cp "$LAUNCH_CLASSPATH" org.apache.spark.launcher.Main "$@")


修改成

done < <("$RUNNER" -cp "$LAUNCH_CLASSPATH" org.apache.spark.launcher.Main $JAVA_OPTS "$@")


$JAVA_OPTS 爲我們添加的參數,下面在命令行中爲其聲明(建議寫到配置文件中)

export JAVA_OPTS="$JAVA_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005


 

6.提交Spark,開啓端口監聽
上傳之前生成的jar包到master節點,在命令行中執行

spark-submit --master spark://master:7077 --class FirstDemo Spark02.jar 


出現如下結果,表示master正在監聽5005端口

[root@master ~]# spark-submit --master spark://master:7077 --class FirstDemo Spark02.jar 
Listening for transport dt_socket at address: 5005

7.Idea配置遠程

添加Remote組件,填寫master的ip的監聽端口

8.啓動調試

JAVA_OPTS參數說明:

-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005
參數說明:
-Xdebug 啓用調試特性
-Xrunjdwp 啓用JDWP實現,包含若干子選項:
transport=dt_socket JPDA front-end和back-end之間的傳輸方法。dt_socket表示使用套接字傳輸。
address=5005 JVM在5005端口上監聽請求,這個設定爲一個不衝突的端口即可。
server=y y表示啓動的JVM是被調試者。如果爲n,則表示啓動的JVM是調試器。
suspend=y y表示啓動的JVM會暫停等待,直到調試器連接上才繼續執行。suspend=n,則JVM不會暫停等待。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章