【数据平台】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()//創(chuàng)建SparkConf對象conf.setAppName("WordCount").setMaster("spark://master:7077")//設(shè)置應(yīng)用程序的名稱,在程序運行的監(jiān)控界面可以看到名稱//conf.setAppName("WordCount").setMaster("local")//運行模式//創(chuàng)建SparkContext對象,通過傳入SparkConf實例來定制Spark運行的具體參數(shù)和配置信息val sc = new SparkContext(conf)/*根據(jù)具體的數(shù)據(jù)來源(HDFS、HBase、Local FS、DB、S3等)通過SparkContext來創(chuàng)建RDD* RDD的創(chuàng)建基本有三種方式:根據(jù)外部的數(shù)據(jù)來源(例如HDFS)、根據(jù)Scala集合、由其它的RDD操作* 數(shù)據(jù)會被RDD劃分成為一系列的Partitions,分配到每個Partition的數(shù)據(jù)屬于一個Task的處理范疇*///讀取本地文件并設(shè)置為一個Partionval lines = sc.textFile("hdfs://master:9000/tmp/README.md",1)//hdfs路徑//對每一行的字符串進(jìn)行單詞拆分并把所有行的拆分結(jié)果通過flat合并成為一個大的單詞集合val words = lines.flatMap{line => line.split(" ")}val pairs = words.map{word => (word,1)}//對相同的Key,進(jìn)行Value的累計(包括Local和Reducer級別同時Reduce)val wordCounts = pairs.reduceByKey(_+_)//在命令行中打印該結(jié)果wordCounts.foreach(wordNumberPair => println(wordNumberPair._1 + " : " +wordNumberPair._2))sc.stop()//記得關(guān)閉創(chuàng)建的SparkContext對象} }執(zhí)行報錯:
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端口發(fā)現(xiàn)是監(jiān)聽本機(jī)地址,不過先從hostname著手。
本機(jī)開發(fā)是win7+eclipse環(huán)境,所以在C:\Windows\System32\drivers\etc\HOSTS中,增加一行IP Master對應(yīng)的關(guān)系。
再執(zhí)行,連接可以進(jìn)入,不過一直出不來結(jié)果,WARN提示:
WARN TaskSchedulerImpl: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient resources3、針對該錯誤,分析:
? ? 執(zhí)行到:
wordCounts.foreach(wordNumberPair => println(wordNumberPair._1 + " : " +wordNumberPair._2))出現(xiàn)上述錯誤。查核Spark UI,看開發(fā)本機(jī)的UI
看執(zhí)行日志也正常,最后看master上的spark-env.sh配置,SPARK_WORKER_MEMORY=8192m,是否是這個導(dǎo)致這個資源不足的錯誤提示?
同樣的代碼提交到集群內(nèi)任何一臺機(jī)子都可以正確執(zhí)行,spark-submit --class wc /home/hadoop/wc.jar
那說明不是這個資源問題,問題還在遠(yuǎn)程開發(fā)調(diào)試上。
4、進(jìn)一步集群分析:
? http://master:8080/ 看到:
?任務(wù)在集群上提交了各節(jié)點執(zhí)行。
發(fā)現(xiàn)提交的用戶是本機(jī)的用戶名administrator,而集群內(nèi)是hadoop,那是否關(guān)系到用戶名呢?
找了下sparkconf配置好像沒有可以設(shè)置用戶名,那就只有在windows創(chuàng)建一個hadoop用戶然后用來開發(fā)提交。
總結(jié)
以上是生活随笔為你收集整理的【数据平台】Eclipse+Scala远程开发调试关于hostname的问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【数据平台】Eclipse+MapRed
- 下一篇: 【数据平台】基于pyhs2库Python