【数据平台】Eclipse+Scala远程开发调试关于hostname的问题
生活随笔
收集整理的這篇文章主要介紹了
【数据平台】Eclipse+Scala远程开发调试关于hostname的问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、代碼:
import org.apache.spark.SparkConf import org.apache.spark.SparkContextobject wc {def main(args : Array[String]){System.setProperty("hadoop.home.dir", "D:\\dev\\hadoop-2.7.4");val conf = new SparkConf()//創建SparkConf對象conf.setAppName("WordCount").setMaster("spark://master:7077")//設置應用程序的名稱,在程序運行的監控界面可以看到名稱//conf.setAppName("WordCount").setMaster("local")//運行模式//創建SparkContext對象,通過傳入SparkConf實例來定制Spark運行的具體參數和配置信息val sc = new SparkContext(conf)/*根據具體的數據來源(HDFS、HBase、Local FS、DB、S3等)通過SparkContext來創建RDD* RDD的創建基本有三種方式:根據外部的數據來源(例如HDFS)、根據Scala集合、由其它的RDD操作* 數據會被RDD劃分成為一系列的Partitions,分配到每個Partition的數據屬于一個Task的處理范疇*///讀取本地文件并設置為一個Partionval lines = sc.textFile("hdfs://master:9000/tmp/README.md",1)//hdfs路徑//對每一行的字符串進行單詞拆分并把所有行的拆分結果通過flat合并成為一個大的單詞集合val words = lines.flatMap{line => line.split(" ")}val pairs = words.map{word => (word,1)}//對相同的Key,進行Value的累計(包括Local和Reducer級別同時Reduce)val wordCounts = pairs.reduceByKey(_+_)//在命令行中打印該結果wordCounts.foreach(wordNumberPair => println(wordNumberPair._1 + " : " +wordNumberPair._2))sc.stop()//記得關閉創建的SparkContext對象} }執行報錯:
16/01/07 13:50:16 INFO AppClient$ClientEndpoint: Connecting to master spark://ip:7077... 16/01/07 13:50:36 ERROR SparkUncaughtExceptionHandler: Uncaught exception in thread Thread[appclient-registration-retry-thread,5,main] java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.FutureTask@116465dc rejected from java.util.concurrent.ThreadPoolExecutor@565b576f[Running, pool size = 1, active threads = 1, queued tasks = 0, completed tasks = 0] at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2048)2、分析:
查看7077端口發現是監聽本機地址,不過先從hostname著手。
本機開發是win7+eclipse環境,所以在C:\Windows\System32\drivers\etc\HOSTS中,增加一行IP Master對應的關系。
再執行,連接可以進入,不過一直出不來結果,WARN提示:
WARN TaskSchedulerImpl: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient resources3、針對該錯誤,分析:
? ? 執行到:
wordCounts.foreach(wordNumberPair => println(wordNumberPair._1 + " : " +wordNumberPair._2))出現上述錯誤。查核Spark UI,看開發本機的UI
看執行日志也正常,最后看master上的spark-env.sh配置,SPARK_WORKER_MEMORY=8192m,是否是這個導致這個資源不足的錯誤提示?
同樣的代碼提交到集群內任何一臺機子都可以正確執行,spark-submit --class wc /home/hadoop/wc.jar
那說明不是這個資源問題,問題還在遠程開發調試上。
4、進一步集群分析:
? http://master:8080/ 看到:
?任務在集群上提交了各節點執行。
發現提交的用戶是本機的用戶名administrator,而集群內是hadoop,那是否關系到用戶名呢?
找了下sparkconf配置好像沒有可以設置用戶名,那就只有在windows創建一個hadoop用戶然后用來開發提交。
總結
以上是生活随笔為你收集整理的【数据平台】Eclipse+Scala远程开发调试关于hostname的问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【数据平台】Eclipse+MapRed
- 下一篇: 【正一专栏】马蓉到底对王宝强还有啥感情?