Недавно я использовал spark 2.2 для запроса огромного кластера эластичного поиска с 3 узлами и 1000 миллиардами строк данных. И я использовал org.elasticsearch :asticsearch-spark-20_2.11: 5.5.0 для интеграции spark-es.
Однако результирующий набор слишком велик (содержит 100 миллиардов строк данных), и для завершения задания «спарк» потребуется 2 часа.
Я подтвердил, что все поля являются простыми строковыми типами, и моя программа верна (без установки некоторых параметров оптимизации), и spark сделал pushDown, чтобы помочь минимизировать вывод, но все же он слишком велик. Ниже приведены мои настройки при использовании spark, какие-либо предложения по оптимизации?
es.scroll.size="10000"
pushdown="true"
es.scroll.keepalive="10m"
My spark sql code:
val conf = new SparkConf()
.setAppName("Simple Example")
.set("es.resource", "myIndex/info")
.set("es.read.field","field1, field2, field3")
.set("es.scroll.size","10000")
.set("es.scroll.keepalive","10m")
.set("es.nodes","192.168.12.12")
.set("es.port","9200")
.set("pushdown","true");
val sc = new SparkContext(conf);
val df = sc.sql("select * from myIndex where name = 'exampleName'")
И я проверяю интерфейс искры, временная шкала подразумевает, что Executor compute time
слишком длинный.