【sparkstreaming寫hdfs調研】調研將kafka消息,從sparkstreaming寫入hdfs

 

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裏面,在打包任務的時候,會保證不會報錯。

 

 

 

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