rdd.saveAsTextFile("hdfs://pro-app-175:9000/user/hadoop/spark/data")
Protocol message end-group tag did not match expected tag
顯然是我端口弄錯了,所以,改成8020即可。
rdd.saveAsTextFile("hdfs://pro-app-175:8020/user/hadoop/spark/data")
這裏我們想將來hive可用,所以,搞一個時間分區
/**
* 獲取今天日期
* @return
*/
def NowDay(): String = {
val now: Date = new Date()
val dateFormat: SimpleDateFormat = new SimpleDateFormat("yyyy")
val date = dateFormat.format(now)
return date
}
但是我們看到,hdfs上面並沒有真正的數據落地:
到底是什麼原因呢,怎麼會都是size 0
這個查了很久,一般不會有這個情況的。
這裏我去查詢了一下,說有幾點寫hdfs的問題,是愚見。
1.RDD的saveASTextFile如果文件存在則無法寫入,也就意味着數據只能覆蓋無法追加,對於有數據追加需求的人很不友好。
這種覆蓋方式肯定不能接受的,沒有意義。
2.說不覆蓋的話自己控制目錄,合併一個文件,解決task的併發情況下,小文件問題,但是缺點是,合併非常耗費性能,且容易拋出異常。
這種也不太友好,不想晚上睡覺的時候半夜來個電話說掛了。
所以,還是放棄寫hdfs。我現在寫的是mysql,後面可以改造去寫hbase。現在暫時不寫hdfs了。
調研到此結束。
再說一個坑,也和別的人聊過了。就是,redis也好,mysql也好,驅動那邊的代碼,寫到foreach裏面來建立連接,爲什麼呢,因爲,只有主節點或者部分節點有自帶的連接類的,寫到foreach裏面,在打包任務的時候,會保證不會報錯。