【问题标题】:Apache spark - loading data from elasticsearch is too slowApache spark - 从弹性搜索加载数据太慢
【发布时间】:2018-07-09 22:14:24
【问题描述】:

我是 Apache Spark 的新手,我正在尝试从我在其上运行的 scala 脚本加载一些弹性搜索数据。

这是我的脚本:

import org.apache.spark.sql.SparkSession

val sparkSession = SparkSession.builder.appName("Simple Application").getOrCreate()
val options = Map("es.nodes" -> "x.x.x.x:9200", "pushdown" -> "true")

import sparkSession.implicits._
val df = sparkSession.read.format("org.elasticsearch.spark.sql").options(options).load("my_index-07.05.2018/_doc").limit(5).select("SomeField", "AnotherField", "AnotherOne")

df.cache()
df.show()

它可以工作,但是它非常慢。我在这里做错了吗?

连接性根本不是问题,我尝试查询的索引大约有 200k 个文档,但我将查询限制为 5 个结果。

顺便说一句,我必须通过在命令行中将 elasticsearch-hadoop 依赖项作为参数传递来运行 spark-shell(或提交)(--packages org.elasticsearch:elasticsearch-hadoop:6.3.0)。这是正确的方法吗?有没有办法只构建包含所有依赖项的 sbt 包?

非常感谢

【问题讨论】:

  • 您找到答案了吗?我在使用 azure databricks 时遇到了同样的问题,即使是大型集群
  • 有什么解决方案吗?

标签: scala apache-spark elasticsearch


【解决方案1】:

您是在一台机器上本地运行它吗?如果是这样,这可能是正常的......你 将不得不检查您的网络您的 spark web ui 等...

关于使用 spark-submit 提交所有依赖项而不在 shell 中指定它们,我们通常使用 sbt 程序集创建 FAT jar。

http://queirozf.com/entries/creating-scala-fat-jars-for-spark-on-sbt-with-sbt-assembly-plugin

【讨论】:

  • 我确实在我自己的笔记本电脑上运行它,但我只是从索引中查询纯数据,根本没有做任何数学运算。这还正常吗?
  • 正是在运行 df.show() 时,它需要很长时间并且只显示“[Stage 2:> (0 + 2) / 2]”
  • 如果你先尝试简化它会怎样? val df = sparkSession.read.format("org.elasticsearch.spark.sql").options(options).load("my_index-07.05.2018/_doc").show
  • 不要做限制和选择的事情。 Spark 是懒惰的,所以在你调用一个动作之前它什么都不做。我想让你尝试创建一个数据框,允许 spark 和驱动程序在不指定限制的情况下完成她的工作,你也可以使用 show(10) 来限制行数
  • 我做到了,运行 show 时很慢,甚至 show(5)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-24
  • 2019-01-08
  • 2016-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-17
相关资源
最近更新 更多