Spark -store JavaDStream <string> rdd到localdisk

时间:2016-05-30 09:45:26

标签: java apache-spark apache-kafka

我正在写一个从kafka主题中读取的火花代码。

SparkConf sparkConfig =
        new SparkConf().setAppName("KafkaStreaming").setMaster("local[5]");
JavaStreamingContext jsc =
        new JavaStreamingContext(sparkConfig,Durations.seconds(5));
final HiveContext sqlContext = new HiveContext(jsc.sc());
JavaPairReceiverInputDStream<String, String> messages =
        KafkaUtils.createStream(jsc,
                                prop.getProperty("zookeeper.connect"),
                                prop.getProperty("group.id"), 
                                topicMap);

JavaDStream<String> lines =
    messages.map(
        new Function<Tuple2<String, String>, String>() {
            private static final long serialVersionUID = 1L;

            public String call(Tuple2<String, String> tuple2) {
                return tuple2._2();
            }
        });

如何将这些行rdd存储在本地磁盘中 我正在尝试下面的事情:

lines.dstream().saveAsTextFiles   

但它不起作用。有没有其他方法可以将textFile存储到我的localdisk.spark

2 个答案:

答案 0 :(得分:1)

根据您的需要,几乎没有选择:

  • 你可以使用你提到的saveAsTextFiles。它应该工作,所以请指定完整的例子,我将尝试我自己的机器。每个批处理间隔的文件名基于prefixsuffix生成:“prefix-TIME_IN_MS.suffix”。
  • 您可以创建任何自定义逻辑,以便在foreachRDD()方法
  • 中保存事件
  • 您可以启用提前写入日志,并且所有消息都将成为 以二进制格式存储在检查点目录中

答案 1 :(得分:1)

您可以使用以下内容:

lines.foreachRDD(new Function<JavaRDD<String>, Void>() {

            public Void call(JavaRDD<String> rdd) throws Exception {
                rdd.saveAsTextFile("/home/xxx/xxx");
                return null;
            }
        });  

但是这将存储在hdfs中。不确定是否要存储在hdfs中。