eclipse-spark開發環境

備註:服務器上安裝的hadoop2.6.0、spark-1.5.2、scala-2.11.7,服務器上RDD操作沒有問題

windows本地配置eclipse-spark開發環境:

1、從spark 官網下載的都是使用Scala2.10編譯的,別的版本很少編譯過,用scala2.11.7報如下錯誤

Description    Resource    Path    Location    Type
More than one scala library found in the build path (D:/scala-SDK-4.3.0-vfinal-2.11-win32.win32.x86_64/eclipse/plugins/org.scala-lang.scala-library_2.11.7.v20150622-112736-1fbce4612c.jar, C:/Users/Administrator/Downloads/spark-assembly-1.5.2-hadoop2.6.0.jar).At least one has an incompatible version. Please update the project build path so it contains only one compatible scala library.    spark-mllib        Unknown    Scala Classpath Problem

解決辦法如下:

安裝scala2.10.4,然後做如下配置eclipse環境



到這裏eclipse配置已經弄完,spark也能夠訪問本地(當前的win7)的文件來進行RDD操作,但不能訪問HDFS上的數據,繼續往下解決問題

2、HDFS的9000端口連接不上,報如下錯誤



(1)設置win7下的telnetclient,默認沒法使用



(2)關閉防火牆 (service iptables stop),在win7下能訪問8080端口


(3)本地telnet一下看能否與hdfs的9000相通


經過驗證,到這還是訪問不了9000端口的
(4)修改spark服務器與防火牆相關的配置
     1>>確保hadoop的hdfs配置的都是hostname
     2>>chkconfig iptables off 這個命令需要重啓才生效,在這我沒有修改iptables文件(網上有一些人說linux默認關閉9000端口,不允許遠程登錄,所以需要修改/etc/sysconfig/iptables 文件,添加以下內容:
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 9000 -j ACCEPT)

     3>>在spark機器上的hosts裏把不相干的host映射配置刪除掉
   把這行註釋掉:::   localhost localhost.localdomain localhost6 localhost6.localdomain6 之後,只剩如下

 在當天晚上的時候我雖然全都按以上操作完了,可是還是telnet不通9000端口,但是第二天起來開機本想繼續第一天的問題,發現能telnet過去了,在這初步猜測是:service iptables stop是不是有些端口沒有關掉?還是因爲hosts文件裏有一些干擾配置項。
(5)telnet測試通過,信息如下


(6)HDFS上的數據spark也能正常訪問

package com.panguoyuan.rdd

import org.apache.log4j.{ Level, Logger }
import org.apache.spark.{ SparkConf, SparkContext }
import org.apache.spark.SparkContext._

object test01 {

 def main(args: Array[String]) {
    val conf = new SparkConf().setAppName("test01")
    conf.setMaster("local")
    val sc = new SparkContext(conf)
    Logger.getRootLogger.setLevel(Level.WARN)
    
    // 2.1節
    // 2.1.1 RDD 創建操作
    val data = Array(1, 2, 3, 4, 5, 6, 7, 8, 9)
    val distData = sc.parallelize(data, 3)
    println(distData.distinct())

//    val distFile1 = sc.textFile("data.txt") // 本地當前目錄下的文件
    val distFile2 = sc.textFile("hdfs://master1:9000/wk01/input/file2.txt") // HDFS 文件
//    val distFile3 = sc.textFile("file:/input/data.txt") // 本地指定目錄下的文件
//    val distFile4 = sc.textFile("/input/data.txt") // 本地指定目錄下的文件
    
    println(distFile2.collect().toList)
  }
}
























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