пользовательская искра не находит базы данных кустов при работе на пряжи

Запуск собственной версии Spark on Yarn в HDP отлично работает, следуя руководству из https://georgheiler.com/2019/05/01/headless-spark-on-yarn/, т.е. следующее:

# download a current headless version of spark
export SPARK_DIST_CLASSPATH=$(hadoop classpath)
export HADOOP_CONF_DIR=/usr/hdp/current/spark2-client/conf
export SPARK_HOME=<<path/to>>/spark-2.4.3-bin-without-hadoop/
<<path/to>>/spark-2.4.3-bin-without-hadoop/bin/spark-shell --master yarn --deploy-mode client --queue <<my_queue>> --conf spark.driver.extraJavaOptions='-Dhdp.version=2.6.<<version>>' --conf spark.yarn.am.extraJavaOptions='-Dhdp.version=2.6.<<version>>'

Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 2.4.3
      /_/

Однако:

spark.sql("show databases").show

только возвращает:

+------------+
|databaseName|
+------------+
|     default|
+------------+

Теперь пытаемся передать исходную конфигурацию HDP (которая, по-видимому, не читается моей пользовательской версией spark), например:

один:

--files /usr/hdp/current/spark2-client/conf/hive-site.xml

два:

--conf spark.hive.metastore.uris='thrift://master001.my.corp.com:9083,thrift://master002.my.corp.com:9083,thrift://master003.my.corp.com:9083' --conf spark.hive.metastore.sasl.enabled='true' --conf hive.metastore.uris='thrift://master001.my.corp.com:9083,thrift://master002.my.corp.com:9083,thrift://master003.my.corp.com:9083' --conf hive.metastore.sasl.enabled='true'

три:

--conf spark.yarn.dist.files='/usr/hdp/current/spark2-client/conf/hive-site.xml'

четыре:

--conf spark.sql.warehouse.dir='/apps/hive/warehouse'

все не помогает решить вопрос. Как заставить Spark распознавать базы данных ульев?


person Georg Heiler    schedule 21.05.2019    source источник
comment
Вероятно, связано с этим   -  person abiratsis    schedule 26.05.2019
comment
Наконец ответил в stackoverflow.com/questions/63668341/ с предварительно созданными jar-файлами, включая Hive   -  person Georg Heiler    schedule 31.08.2020


Ответы (2)


Вы можете скопировать hive-site.xml, расположенный в /usr/hdp/hdp.version/hive/conf или /opt/hdp/hdp.version/hive/conf, в зависимости от где установлен HDP, в каталог conf установки Headless Spark. Теперь, когда вы перезапускаете Spark-Shell, он должен выбрать эту конфигурацию улья и загрузить все схемы, присутствующие в Apache Hive.

person Yayati Sule    schedule 21.05.2019
comment
/usr/hdp/current/spark2-client/conf/hive-site.xml уже был скопирован и тоже не работал. Теперь, следуя вашему предложению и используя: /usr/hdp/current/hive-client/conf/hive-site.xml, он терпит неудачу, как упоминалось выше. - person Georg Heiler; 21.05.2019
comment
Вам необходимо скопировать файл hive-site.xml в папку hive / conf, которая находится в папке с именем 2.6.5.xxx внутри /usr/hdp/. Для моей установки путь следующий: /usr/hdp/2.6.5.0-292/hive/conf/ - person Yayati Sule; 21.05.2019
comment
/usr/hdp/current/hive-client - это программная ссылка на /usr/hdp/<<my_version>>/hive/conf/, но, как упоминалось выше, загружается неправильная конфигурация. Мое место назначения для копии: <<path/to>>/spark-2.4.3-bin-without-hadoop/conf - person Georg Heiler; 21.05.2019
comment
У вас есть spark-thrift-sparkconf.conf в вашем <<path/to>>/spark-2.4.3-bin-without-hadoop/conf каталоге? Этот файл создается Apache Ambari для Apache Spark2 в комплекте с вашим дистрибутивом HDP. - person Yayati Sule; 21.05.2019
comment
Нет, но этого тоже нет в оригинале: ls /usr/hdp/current/spark2-client/conf путь - person Georg Heiler; 21.05.2019
comment
Файл, который я упомянул в своем последнем комментарии, находится в каталоге /usr/hdp/2.6.5.0-xxx/spark2/conf. Файл создается Ambari при установке дистрибутива HDP. Вы должны смотреть на /usr/hdp/2.6.5.0-xxx/spark2/conf вместо /usr/hdp/current/spark2-client/conf. - person Yayati Sule; 21.05.2019
comment
Даже копирование spark-defaults.conf spark-env.sh не устранило проблему, и даже в /usr/hdp/2.6.5.0-xxx/spark2/conf для меня нет такого файла. Однако я могу найти этот файл на другом узле кластера. Но даже с этим файлом он все равно не может найти базы данных. - person Georg Heiler; 21.05.2019
comment
Позвольте нам продолжить это обсуждение в чате. - person Yayati Sule; 21.05.2019

Для включения поддержки улья необходимо, чтобы jar-файлы Hive были в пути к классам Spark. если jar-файлы улья отсутствуют в пути к классам, используется реализация каталога in-memory
В Spark-shell мы можем подтвердить это, выполнив

sc.getConf.get("spark.sql.catalogImplementation") 

что даст in-memory

Зачем нужны классы ульев

    def enableHiveSupport(): Builder = synchronized {
      if (hiveClassesArePresent) {
        config(CATALOG_IMPLEMENTATION.key, "hive")
      } else {
        throw new IllegalArgumentException(
          "Unable to instantiate SparkSession with Hive support because " +
            "Hive classes are not found.")
      }
    }

SparkSession.scala

  private[spark] def hiveClassesArePresent: Boolean = {
    try {
      Utils.classForName(HIVE_SESSION_STATE_BUILDER_CLASS_NAME)
      Utils.classForName("org.apache.hadoop.hive.conf.HiveConf")
      true
    } catch {
      case _: ClassNotFoundException | _: NoClassDefFoundError => false
    }
  }

Если классы отсутствуют, поддержка Hive не включена. Ссылка на код, в котором вышеуказанные проверки выполняются как часть инициализации оболочки Spark.

В приведенном выше коде, вставленном как часть вопроса, SPARK_DIST_CLASSPATH заполняется только путем указания пути к классам Hadoop и отсутствующих путей к банкам Hive.

person DaRkMaN    schedule 26.05.2019
comment
Но разве Spark по умолчанию не компилируется с поддержкой hive? - person Georg Heiler; 26.05.2019
comment
Spark скомпилирован для Hive, но jar-файлы Hive не являются путем пути к классам во время выполнения. Пользователь может либо сделать его частью пути к классам, либо установить spark.sql.hive.metastore.jars, либо использовать искровый код, скомпилированный с профилем _2 _ (spark.apache.org/docs/latest/), чтобы jar-файлы улья были доступны в каталоге сборки Spark. - person DaRkMaN; 26.05.2019
comment
Если мы используем дистрибутив, упомянутый в блоге (spark.apache.org/ docs / latest / hadoop-provided.html), он не содержит jar-файлов Hive или Hadoop и должен предоставляться во время выполнения. - person DaRkMaN; 26.05.2019
comment
Звучит многообещающе. Через минуту протестирую. Между тем: вы добавляете полный /usr/hdp/current/hive-client/lib? Или только его части? - person Georg Heiler; 26.05.2019
comment
Нам нужно добавить полный путь к папке lib, хотя я не уверен, в каком каталоге есть банки Hive в дистрибутиве HDP. - person DaRkMaN; 26.05.2019
comment
Но у меня все еще та же проблема: export SPARK_DIST_CLASSPATH="/usr/hdp/current/hive-client/lib*:${SPARK_DIST_CLASSPATH}" - person Georg Heiler; 26.05.2019
comment
Не решает и загружаетсяecho $SPARK_DIST_CLASSPATH /usr/hdp/current/hive-client/lib*:/usr/hdp/<<hdpVers>>/hadoop/conf:/usr/hdp/<<hdpVers>>/hadoop/lib/*:/usr/hdp/<<hdpVers>>/hadoop/.//*:/usr/hdp/<<hdpVers>>/hadoop-hdfs/./:/usr/hdp/<<hdpVers>>/hadoop-hdfs/lib/*:/usr/hdp/<<hdpVers>>/hadoop-hdfs/.//*:/usr/hdp/<<hdpVers>>/hadoop-yarn/lib/*:/usr/hdp/<<hdpVers>>/hadoop-yarn/.//*:/usr/hdp/<<hdpVers>>/hadoop-mapreduce/lib/*:/usr/hdp/<<hdpVers>>/hadoop-mapreduce/.//*:/usr/hdp/<<hdpVers>>/tez/*:/usr/hdp/<<hdpVers>>/tez/lib/*:/usr/hdp/<<hdpVers>>/tez/conf - person Georg Heiler; 26.05.2019
comment
Путь к классам улья кажется неправильным, можем ли мы добавить косую черту после lib, за которой следует *, и попробовать. А также можем мы проверить значение sc.getConf.get (spark.sql.catalogImplementation) после запуска оболочки. - person DaRkMaN; 26.05.2019
comment
Верный. Исправление пути теперь приводит к загрузке jar-файлов, но теперь я нахожусь в аду пути к классам. java.lang.NoSuchMethodError: jline.console.completer.CandidateListCompletionHandler.setPrintSpaceAfterFullCompletion(Z)V at scala.tools.nsc.interpreter.jline.JLineConsoleReader.initCompletion(JLineReader.scala:139) at scala.tools.nsc.interpreter.jline.InteractiveReader.postInit(JLineReader.scala:54) at org.apache.spark.repl.SparkILoop$$anonfun$process$1$$anonfun$1.apply(SparkILoop.scala:190) - person Georg Heiler; 26.05.2019
comment
пытается: export SPARK_DIST_CLASSPATH=$(hadoop classpath) cp -R /usr/hdp/current/hive-client/lib/*hive* . export SPARK_DIST_CLASSPATH="/path/to/hivestuff/*:${SPARK_DIST_CLASSPATH}" снова не возвращает базы данных из куста. - person Georg Heiler; 26.05.2019
comment
но, возможно, мне не хватает нескольких банок. Я сделаю вашу ссылку позже - person Georg Heiler; 26.05.2019
comment
Хорошо, также попытался вручную поместить jline jar 2.14.6 в папку sparks lib и установить путь к классам улья - это не помогает. Загружается только метастор улья in -memory. - person Georg Heiler; 26.05.2019
comment
Быстрый способ проверить, работает ли наш обходной путь, - запустить spark-sql вместо spark-shell (проблема возникает с версии ›2.40) после добавления только jar-файлов Hive в пути к классам и таблицы списков. - person DaRkMaN; 27.05.2019
comment
интересное: /path/to/spark-2.4.3-bin-without-hadoop/bin/spark-sql --conf spark.drver.extraJavaOptions='-Dhdp.version=2.6.<<HDPV>>' --conf spark.yarn.am.extraJavaOptions='-Dhdp.version=2.6.<<HDPV>>' не работает с ClassNotFoundException: org.apache.spark.sql.hive.thriftserver.SparkSQLCLIDriver - person Georg Heiler; 27.05.2019
comment
Я думаю, что это тоже известная проблема. В основном нам нужна среда, в которой нет проблем, связанных с Hive. Остались только другие параметры: pyspark оболочка и SparkR оболочка. - person DaRkMaN; 27.05.2019