Spark AWS Сборка SBT Elasticsearch Fat jar вызывает исключение org.elasticsearch.had oop .EsHadoopIllegalArgumentException: не удается определить версию ES - PullRequest
0 голосов
/ 17 июня 2020

Я написал искру (версия 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")
...