【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上面并没有真正的数据落地:

【sparkstreaming写hdfs调研】调研将kafka消息,从sparkstreaming写入hdfs_第1张图片

到底是什么原因呢,怎么会都是size 0

 

这个查了很久,一般不会有这个情况的。

 

这里我去查询了一下,说有几点写hdfs的问题,是愚见。

1.RDD的saveASTextFile如果文件存在则无法写入,也就意味着数据只能覆盖无法追加,对于有数据追加需求的人很不友好。

这种覆盖方式肯定不能接受的,没有意义。

2.说不覆盖的话自己控制目录,合并一个文件,解决task的并发情况下,小文件问题,但是缺点是,合并非常耗费性能,且容易抛出异常。

这种也不太友好,不想晚上睡觉的时候半夜来个电话说挂了。

 

所以,还是放弃写hdfs。我现在写的是mysql,后面可以改造去写hbase。现在暂时不写hdfs了。

 

调研到此结束。

 

再说一个坑,也和别的人聊过了。就是,redis也好,mysql也好,驱动那边的代码,写到foreach里面来建立连接,为什么呢,因为,只有主节点或者部分节点有自带的连接类的,写到foreach里面,在打包任务的时候,会保证不会报错。

 

 

 

你可能感兴趣的:(大数据,spark-streaming)