【问题标题】:Looking for performance tips on Spark DStream to Parquet files寻找有关 Spark DStream 到 Parquet 文件的性能提示
【发布时间】: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


    【解决方案1】:
    spark.read().json(spark.createDataset(rdd.rdd(), Encoders.STRING()));
    

    从上面看,读取 json() 可能不适合性能敏感的工作。 Spark 在其数据源 api 中使用 JacksonParser 来读取 json。如果您的 json 结构很简单,请尝试使用 map() 函数自己解析它来创建 Row。

    【讨论】:

    • 谢谢,是的,很简单。让我试试,让你知道结果。
    猜你喜欢
    • 2019-01-05
    • 2017-03-27
    • 2018-02-04
    • 2020-05-17
    • 2017-07-26
    • 2016-12-31
    • 2019-03-08
    • 2021-05-02
    • 1970-01-01
    相关资源
    最近更新 更多