Custom Spark не находит базы данных кустов при работе на пряже - PullRequest
0 голосов
/ 21 мая 2019

Запуск пользовательской версии spark on пряжа в 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'

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

Ответы [ 2 ]

0 голосов
/ 26 мая 2019

Банки улья должны находиться в classpath Spark, чтобы поддержка улья была включена.если банки улья отсутствуют в classpath, используется реализация каталога 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
    }
  }

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

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

0 голосов
/ 21 мая 2019

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

...