spark本地提交集羣運行踩過的坑

spark本地提交集羣運行踩過的坑

1.本地提交,集羣跑spark程序設置(scala)

 val conf = new SparkConf().setAppName("SparkWordCount")
    conf.setMaster("spark://hadoop-01:7077")
    conf.setJars(Array("D:\\hadoop\\spark\\target\\zbs_com-1.0-SNAPSHOT.jar"))

問題1:

requirement failed: Can only call getServletHandlers on a running MetricsSystem

收到了請求但處理消息有問題。像是對象序列化後的id值不一致,感覺應該是兩邊jdk、或者spark版本不一致導致的。查看java -version,都是1.8,排除。spark版本,集羣是2.2.1,我本機是2.3.0,比集羣版本高。

解決辦法:統一Spark版本。將本機也改爲2.2.1版本,並修改環境變量,重啓電腦。即可以正常提交任務。

原文鏈接:https://blog.csdn.net/nazhidao/article/details/79979417

問題2

Intellij控制檯輸出警告:WARN TaskSchedulerImpl: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient resources

這一行特別醒目

WARN TaskSchedulerImpl: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient resources
在sparkui界面的
Caused by: java.net.UnknownHostException: DESKTOP-J06F0SV
初始工作沒有接受任何資源;檢查你的集羣用戶界面以確保工人註冊並有足夠的資源
這是我的提交任務後的集羣信息:
網上說法
:
1.集羣配置
2.內存問題

3.我的問題是 :
在這裏插入圖片描述

在這裏插入圖片描述

這個是主機名 DESK(…)在電腦屬性(環境變量)處可以看到加到集羣的/etc/hosts裏

附代碼

最後修改的代碼:

package spark

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

object spark_test {
  def main(args: Array[String]): Unit = {
    //ps:模板封裝成一個方法以後調用方法即可
    //模板代碼
    /*
     需要創建SparkConf()對象 相當於MR中配置
     必傳參數
     setAppName() 設置任務的名稱 不傳默認是一個UUID產生名字
     設置運行模式
     不寫這個參數可以打包提交集羣
     寫這個參數設置本地模式
     setMaster() 傳入的參數有如下寫法
     "local"   --> 本地一個線程來進行任務處理
     "local[數值]" --> 開始相應數值的線程來模擬spark集羣運行任務
     "local[*]" --> 開始相應線程數來模擬spark集羣運行任務
     兩者區別:
     數值類型--> 使用當前數值個數來進行處理
     * -->當前程序有多少空閒線程就用多少空閒線程處理
     */
    //    val spark=SparkSession
    val conf = new SparkConf().setAppName("SparkWordCount")

    conf.setMaster("spark://hadoop-01:7077")
    conf.setJars(Array("D:\\hadoop\\spark\\target\\zbs_com-1.0-SNAPSHOT.jar"))
//    conf.setExecutorEnv("executor-memory","128m")
    val sc =  new SparkContext(conf)
    //通過sparkcontext對象就可以處理數據

    //讀取文件 參數是一個String類型的字符串 傳入的是路徑
    val lines: RDD[String] = sc.textFile("hdfs://192.168.182.201:9000/abc")

    //切分數據
    val words: RDD[String] = lines.flatMap(_.split(" "))

    //將每一個單詞生成元組 (單詞,1)c
    val tuples: RDD[(String, Int)] = words.map((_,1))

    //spark中提供一個算子 reduceByKey 相同key 爲一組進行求和 計算value
    val sumed: RDD[(String, Int)] = tuples.reduceByKey(_+_)

    //對當前這個結果進行排序 sortBy 和scala中sotrBy是不一樣的 多了一個參數
    //默認是升序  false就是降序
    val sorted: RDD[(String, Int)] = sumed.sortBy(_._2,false)

    //將數據提交到集羣存儲 無法返回值
    sorted.saveAsTextFile("hdfs://hadoop-01:9000/out/12")

    //本地模式
    //一定要設置setMaster()
    //可以直接打印
    //println(sorted.collect.toBuffer)
    //這種打印也可以
    //sorted.foreach(println)
    //    val add1:RDD[Int] = sc.parallelize(List(1,2,3,4,5,6))
    //    val value:RDD[(Int,Int)] = add1.map((_,1))
    //    value.partitionBy()
    //    add1.mapPartitions()
    //回收資源停止sc,結束任務
    sc.stop()

  }


}

dd1.map((_,1))
// value.partitionBy()
// add1.mapPartitions()
//回收資源停止sc,結束任務
sc.stop()

}

}


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