我正在使用creatDirectStream来集成SparkStreaming和Kafka。这是我使用的代码:
out
现在我想将消息存储到HDFS中。这样做是对的吗?
val ssc = new StreamingContext(new SparkConf, Seconds(10))
val kafkaParams = Map("metadata.broker.list" -> "sandbox:6667")
val topics = Set("topic1")
val messages = KafkaUtils.createDirectStream[String, String, StringDecoder, StringDecoder](
ssc, kafkaParams, topics)
答案 0 :(得分:0)
saveAsTextFiles("/tmp/spark/messages")
- 这会将您的数据保存在本地文件系统中,如果提供的文件夹结构(“/ tmp / spark / messages”)是本地HDFS的一部分,那么它也将显示在HDFS目录中,因为saveAsTextFiles
利用相同的MapeReduce API来编写输出。
以上内容适用于Spark Executors和HDFS位于相同物理机器上的情况,但如果您的HDFS目录或URL不同而且运行执行程序的机器不在同一台机器上,那么这将不起作用。
如果您需要确保数据在HDFS中保留,那么作为一种良好做法,您应始终提供完整的HDFS URL。这样的事情 - saveAsTextFiles("http://<HOST-NAME>:9000/tmp/spark/messages")
或者您也可以使用以下任一方法: -
DStream.saveAsNewAPIHadoopFiles(<HDFS URL with Location>)
DStream.saveAsHadoopFiles(<HDFS URL with Location>)