【发布时间】:2019-04-01 20:31:11
【问题描述】:
我想将 Elasticsearch 索引存储到不使用 ES-Hadoop 连接器的 HDFS 文件。 一个建议的解决方案是使用 Streaming Custom Receivers 读取并保存为 parquet 文件,代码如下:
JavaDStream<String> jsonDocs = ssc.union(dsList.get(0), dsList.subList(1, dsList.size())); // I have a couple receivers
jsonDocs.foreachRDD( rdd -> {
Dataset<Row> ds = spark.read().json(spark.createDataset(rdd.rdd(), Encoders.STRING()));
ds.write().mode(SaveMode.Append).option("compression","gzip").parquet(path);
有了这个,我得到了一些不错的性能数字,但是,因为我是 Spark 的新手,我想知道是否还有改进的空间。 例如,我看到 json() 和 parquet() 作业花费了大部分时间,而 json() 作业需要很长时间还是可以避免? (为简单起见,我从代码 sn-p 中省略了一些其他工作,例如 count()。)
使用结构化流式传输看起来不错,但尚未找到使用自定义接收器流式传输的简单解决方案。 提前致谢,
【问题讨论】:
标签: java apache-spark spark-streaming