web-dev-qa-db-ja.com

Apache Spark 2.3.1 with Hive metastore 3.1.0

HDPクラスターを3.1.1.3.0.1.0-187にアップグレードし、次のことを発見しました。

  1. Hiveに新しいメタストアの場所があります
  2. SparkはHiveデータベースを見ることができません

実際、次のことがわかります。

org.Apache.spark.sql.catalyst.analysis.NoSuchDatabaseException: Database ... not found

何が起こったのか、そしてこれを解決する方法を理解するのを手伝ってもらえますか?

更新:

構成:

(spark.sql.warehouse.dir、/ warehouse/tablespace/external/Hive /)(spark.admin.acls、)(spark.yarn.dist.files、file:///opt/folder/config.yml,file :///opt/jdk1.8.0_172/jre/lib/security/cacerts)(spark.history.kerberos.keytab、/ etc/security/keytabs/spark.service.keytab)(spark.io.compression.lz4。 blockSize、128kb)(spark.executor.extraJavaOptions、-Djavax.net.ssl.trustStore = cacerts)(spark.history.fs.logDirectory、hdfs:/// spark2-history /)(spark.io.encryption.keygen。アルゴリズム、HmacSHA1)(spark.sql.autoBroadcastJoinThreshold、26214400)(spark.eventLog.enabled、true)(spark.shuffle.service.enabled、true)(spark.driver.extraLibraryPath、/ usr/hdp/current/hadoop-client /lib/native:/usr/hdp/current/hadoop-client/lib/native/Linux-AMD64-64)(spark.ssl.keyStore、/ etc/security/serverKeys/server-keystore.jks)(spark.yarn .queue、default)(spark.jars、file:/opt/folder/component-Assembly-0.1.0-SNAPSHOT.jar)(spark.ssl.enabled、true)(spark.sql.orc.filterPushdown、true)( spark.shuffle.unsafe.file.output.buffer、5m)(spark.ya rn.historyServer.address、master2.env.project:18481)(spark.ssl.trustStore、/ etc/security/clientKeys/all.jks)(spark.app.name、com.company.env.component.MyClass)( spark.sql.Hive.metastore.jars、/ usr/hdp/current/spark2-client/Standalone-metastore/*)(spark.io.encryption.keySizeBits、128)(spark.driver.memory、2g)(spark。 executor.instances、10)(spark.history.kerberos.principal、spark/Edge.env.project @ ENV.PROJECT)(spark.unsafe.sorter.spill.reader.buffer.size、1m)(spark.ssl.keyPassword 、*********(編集済み))(spark.ssl.keyStorePassword、*********(編集済み))(spark.history.fs.cleaner.enabled、true)(spark。 shuffle.io.serverThreads、128)(spark.sql.Hive.convertMetastoreOrc、true)(spark.submit.deployMode、client)(spark.sql.orc.char.enabled、true)(spark.master、yarn)(spark .authenticate.enableSaslEncryption、true)(spark.history.fs.cleaner.interval、7d)(spark.authenticate、true)(spark.history.fs.cleaner.maxAge、90d)(spark.history.ui.acls.enable 、true)(spark.acls.enable、true)(spark.history.provider、org.Apac he.spark.deploy.history.FsHistoryProvider)(spark.executor.extraLibraryPath、/ usr/hdp/current/hadoop-client/lib/native:/ usr/hdp/current/hadoop-client/lib/native/Linux-AMD64 -64)(spark.executor.memory、2g)(spark.io.encryption.enabled、true)(spark.shuffle.file.buffer、1m)(spark.eventLog.dir、hdfs:/// spark2-history/)(spark.ssl.protocol、TLS)(spark.dynamicAllocation.enabled、true)(spark.executor.cores、3)(spark.history.ui.port、18081)(spark.sql.statistics.fallBackToHdfs、true) (spark.repl.local.jars、file:///opt/folder/postgresql-42.2.2.jar,file:///opt/folder/ojdbc6.jar)(spark.ssl.trustStorePassword、**** *****(編集済み))(spark.history.ui.admin.acls、)(spark.history.kerberos.enabled、true)(spark.shuffle.io.backLog、8192)(spark.sql.orc。 impl、native)(spark.ssl.enabledAlgorithms、TLS_RSA_WITH_AES_128_CBC_SHA、TLS_RSA_WITH_AES_256_CBC_SHA)(spark.sql.orc.enabled、true)(spark.yarn.dist.jars、file:/// opt/folder/postgresql jar、file:///opt/folder/ojdbc6.jar)(spark.sql.Hive.metastore.version、3.0)

そしてHive-site.xmlから:

<property>
  <name>Hive.metastore.warehouse.dir</name>
  <value>/warehouse/tablespace/managed/Hive</value>
</property>

コードは次のようになります。

val spark = SparkSession
  .builder()
  .appName(getClass.getSimpleName)
  .enableHiveSupport()
  .getOrCreate()
...
dataFrame.write
  .format("orc")
  .options(Map("spark.sql.Hive.convertMetastoreOrc" -> true.toString))
  .mode(SaveMode.Append)
  .saveAsTable("name")

Spark-送信:

    --master yarn \
    --deploy-mode client \
    --driver-memory 2g \
    --driver-cores 4 \
    --executor-memory 2g \
    --num-executors 10 \
    --executor-cores 3 \
    --conf "spark.dynamicAllocation.enabled=true" \
    --conf "spark.shuffle.service.enabled=true" \
    --conf "spark.executor.extraJavaOptions=-Djavax.net.ssl.trustStore=cacerts" \
    --conf "spark.sql.warehouse.dir=/warehouse/tablespace/external/Hive/" \
    --jars postgresql-42.2.2.jar,ojdbc6.jar \
    --files config.yml,/opt/jdk1.8.0_172/jre/lib/security/cacerts \
    --verbose \
    component-Assembly-0.1.0-SNAPSHOT.jar \
5
Eugene Lopatkin

免責事項ですが、これには少し先祖返りのトリックがありますが、レンジャーの権限をバイパスします(管理者の怒りを被ったとしても私を責めないでください)。

スパークシェルで使用するには

export Hive_CONF_DIR=/usr/hdp/current/Hive-client/conf
spark-Shell --conf "spark.driver.extraClassPath=/usr/hdp/current/Hive-client/conf"

SparklyRで使用するには

Sys.setenv(Hive_CONF_DIR="/usr/hdp/current/Hive-client/conf")
conf = spark_config()
conf$'sparklyr.Shell.driver-class-path' = '/usr/hdp/current/Hive-client/conf'

Thriftserverでも機能するはずですが、私はテストしていません。

0
Gabe Church