Я написал искру (версия 2.4.1) - scala код для чтения AWS Elasti c -поиск (версия 6.7) данных индекса. Я использую Intellij IDE, когда я создаю толстую банку, она работает правильно на моем локальном компьютере, но когда я запускаю ту же банку на EC2, она выдает ошибку (такая же версия Spark установлена на EC2 и локальном компьютере).
команда:
spark-submit --class "com.std.SparkElk" --master local [*] "SparkElkData-assembly-0.1.jar"
Ошибка: - Исключение в thread "main" org.elasticsearch.had oop .EsHadoopIllegalArgumentException: не удается определить версию ES - обычно это происходит, если кластер сети / Elasticsearch недоступен или при нацеливании на экземпляр WAN / Cloud без правильной настройки es.nodes.wan .only '
Нет проблем с соединением между elasti c -search и ec2. Я предполагаю, что есть некоторая проблема с зависимостями, которая не добавляется в jar, но тогда почему jar успешно работает на локальном компьютере и не работает на ec2
Scala code :-
import org.apache.spark.sql.SparkSession
object SparkElk {
def main(args:Array[String])={
val spark = SparkSession.builder.appName("Elk Data Processing")
.master("local")
.config("fs.s3a.access.key", "access_key")
.config("fs.s3a.secret.key", "secret_key")
.config("fs.s3a.endpoint", "s3.ap-south-1.amazonaws.com")
.config("fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem")
.config("es.nodes","elasticsearch url")
.config("es.port","443")
.config("es.nodes.wan.only", "true")
.config("es.http.timeout", "5m")
.config("es.net.ssl","true")
.getOrCreate()
val rawDataDf = spark.sqlContext.read.format("es").load(index_name)
rawDataDf.show(1,false)
spark.stop()
}
}
build.sbt:-
name := "SparkElkData"
version := "0.1"
scalaVersion := "2.11.11"
libraryDependencies += "org.apache.spark" %% "spark-sql" % "2.4.1"
libraryDependencies += "org.elasticsearch" %% "elasticsearch-spark-20" % "6.7.0"
assemblyMergeStrategy in assembly := {
case PathList("META-INF", xs @ _*) => MergeStrategy.discard
case "git.properties" => MergeStrategy.last
case x => MergeStrategy.first
}
mainClass in assembly := Some("com.std.SparkElk")
fullClasspath in Runtime := (fullClasspath in (Compile, run)).value
assembly.sbt:-
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.10")