от
Я написал класс: CreateHiveConnection, и он содержит только один метод:
hiveConn()
, который возвращает объект подключения и создает из него jar-файл и запускает его с помощью spark-submit. Метод:
import java.sql.{Connection, DriverManager, SQLException}
import org.apache.hadoop.conf.Configuration
import org.apache.hadoop.security.UserGroupInformation
def hiveConn(): Connection = {
    val driver   = "org.apache.hive.jdbc.HiveDriver"
    var connection: Connection = null
    val conf = new Configuration()
    conf.set("hadoop.security.authentication", "Kerberos")
    System.setProperty("java.security.krb5.kdc", "ip")
    System.setProperty("java.security.krb5.realm", "DEV.COM")
    UserGroupInformation.loginUserFromKeytab("username@DEV.COM", "/home/username/username.keytab")
    try {
        Class.forName(driver)
        if((connection == null)  || connection.isClosed()) {
            connection = DriverManager.getConnection(url, username, password)
        }
    } catch {
        case cnf:ClassNotFoundException => println("Invalid driver used. Check the settings.")
            cnf.printStackTrace()
        case e:Exception => e.printStackTrace()
    }
    connection
}
После создания файла JAR я отправляю его, как показано ниже:
SPARK_MAJOR_VERSION=2 spark

Но если я отправлю банку, я получу следующее исключение:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hive/service/rpc/thrift/TCLIService$Iface
Если я запускаю jar в режиме кластера, как показано ниже:
SPARK_MAJOR_VERSION=2 spark

Я получаю исключение:

Exception in thread "main" java.lang.IllegalArgumentException: Error while instantiating 'org.apache.spark.sql.hive.HiveSessionStateBuilder':
    at org.apache.spark.sql.SparkSession$.org$apache$spark$sql$SparkSession$$instantiateSessionState(SparkSession.scala:1075)
    at org.apache.spark.sql.SparkSession$$anonfun$sessionState$2.apply(SparkSession.scala:142)
    at org.apache.spark.sql.SparkSession$$anonfun$sessionState$2.apply(SparkSession.scala:141)
    at scala.Option.getOrElse(Option.scala:121)
    at org.apache.spark.sql.SparkSession.sessionState$lzycompute(SparkSession.scala:141)
    at org.apache.spark.sql.SparkSession.sessionState(SparkSession.scala:138)
    at org.apache.spark.sql.DataFrameReader.(DataFrameReader.scala:689)
    at org.apache.spark.sql.SparkSession.read(SparkSession.scala:650)
    at com.columns.metadata.GpMeta.getControlTableData(GpMeta.scala:32)
    at com.partition.source.Pickup$.main(Pickup.scala:59)
    at com.partition.source.Pickup.main(Pickup.scala)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:782)
    at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:180)
    at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:205)
    at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:119)
    at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
Но если я запускаю код на spark-shell, код работает
SPARK_MAJOR_VERSION=2 spark

Как видите, результат 18434382
печатается без каких-либо дополнительных jar-файлов или конфигураций, добавленных в код на spark-shell. Я попытался добавить несколько зависимостей, чтобы устранить исключение classNotFound, но ни одна из них, похоже, не работает. Может ли кто-нибудь дать мне знать, почему результаты отличаются, если я создал jar-файл на IntelliJ , запустив его с помощью
spark, который завершается ошибкой и успешно работает без каких-либо дополнительных jar-файлов и зависимостей от spark?
Как мне решить проблему?
    

        

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.
Анти-спам проверка:
Чтобы избежать проверки в будущем, пожалуйста войдите или зарегистрируйтесь.
...