kafka引领HDFS

时间:2016-01-21 07:06:32

标签: apache-spark hdfs apache-kafka

我正在使用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)

1 个答案:

答案 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")

或者您也可以使用以下任一方法: -

  1. DStream.saveAsNewAPIHadoopFiles(<HDFS URL with Location>)
  2. DStream.saveAsHadoopFiles(<HDFS URL with Location>)