Я хочу сохранить индексы Elasticsearch в файлах HDFS, не используя ES-Hadoop Connector.Предлагаемое решение заключается в использовании потоковых пользовательских приемников для чтения и сохранения в виде файлов паркета, а код выглядит так:
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 () длительное время или их можно избежать?(Я упустил некоторые другие задания, например count (), из фрагмента кода для простоты.)
Использование структурированной потоковой передачи выглядит хорошо, но я не нашел простого решения с потоковой передачей пользовательских приемников.Заранее спасибо,