首先,我的代碼是這樣的
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
object PvCount {
def main(args: Array[String]): Unit = {
//獲取SparkConf
val sparkConf = new SparkConf().setMaster("local[2]").setAppName("PV-Count")
//創建SparkContext
val sparkContext = new SparkContext(sparkConf)
//讀取文件
val fileRDD: RDD[String] = sparkContext.textFile("file:////Users/zhaozhuang/Desktop/4、Spark/Spark第二天/第二天教案/資料/運營商日志/access.log")
//統計數量
val count = fileRDD.count()
println("一共有"+count+"行數據")
sparkContext.stop()
}
}
我的Spark是裝在虛擬機上的,然后運行就報錯
java.net.BindException: Can’t assign requested address: Service ‘sparkDriver’ failed after 16 retries (on a random free port)! Consider explicitly setting the appropriate binding address for the service ‘sparkDriver’ (for example spark.driver.bindAddress for SparkDriver) to the correct binding address.
大概翻譯一哈:
java.net.BindException:無法分配請求的地址:'sparkDriver’服務在16次重試后(在一個隨機自由的端口上)失敗了!考慮顯式地適當的將’sparkDriver’服務(比如 SparkDriver的spark.driver.bindAddress)綁定到正確的綁定地址
雖然翻譯了出來,但我還是沒完全明白,就知道是地址錯誤之類的
然后查閱了各種方法,都沒用,看到了一個和我的報錯並不相同的解決辦法,我還是決定試試
val sparkConf = new SparkConf().setMaster("local[2]").setAppName("PV-Count").set("spark.driver.host", "localhost")
在sparkConf中添加了一個設置,就奇跡般地成功了
但是我的Spark是安裝在虛擬機的,為啥?
所以我又把localhost改成了node01(我虛擬機的主機名),結果又報同樣的錯
為什么?還是沒搞懂原因,不過有解決辦法了,所以先記錄一下,找到原因再來解決吧