Проблема режима Spark Cluster для чтения таблицы Hive-Hbase в среде Kerberized

Описание ошибки

Мы не можем выполнить нашу работу Spark в режиме пряжи-кластера или клиента-пряжи, хотя она работает нормально в локальном режиме.

Эта проблема возникает, когда мы пытаемся прочитать таблицы Hive-HBase в кластере Kerberized.

Что мы уже пробовали

  1. Передача всего JBASE JAR в параметре -jar в искровой субми

--jars /usr/hdp/current/hive-client/lib/hive-hbase-handler-1.2.1000.2.5.3.16-1.jar,/usr/hdp/current/spark-client/lib/datanucleus-api-jdo-3.2.6.jar,/usr/hdp/current/spark-client/lib/datanucleus-rdbms-3.2.9.jar,/usr/hdp/current/spark-client/lib/datanucleus-core-3.2.10.jar,/usr/hdp/current/hbase-client/lib/hbase-client.jar,/usr/hdp/current/hbase-client/lib/hbase-common.jar,/usr/hdp/current/hbase-client/lib/hbase-protocol.jar,/usr/hdp/current/hbase-client/lib/htrace-core-3.1.0-incubating.jar,/usr/hdp/current/hbase-client/lib/protobuf-java-2.5.0.jar,/usr/hdp/current/hbase-client/lib/guava-12.0.1.jar,/usr/hdp/current/hbase-client/lib/hbase-server.jar

  1. Передача сайта Hbase и сайта куста в параметре файла в Spark submit

--files /usr/hdp/2.5.3.16-1/hbase/conf/hbase-site.xml,/usr/hdp/current/spark-client/conf/hive-site.xml,/home/pasusr/pasusr.keytab

  1. Выполнение проверки подлинности Kerberos внутри приложения. В коде мы явно передаем вкладку ключа

    UserGroupInformation.setConfiguration (configuration) Val ugi: UserGroupInformation = UserGroupInformation.loginUserFromKeytabAndReturnUGI (принцип, keyTab) UserGroupInformation.setLoginUser (ugi) ConnectionFactory.createConnection (конфигурация) возвращают ugi.doAs (новая исключительная ситуация: исключение исключений) ConnectionFactory.createConnection (configuration)}})

  2. Передача информации о вкладке ключа в отправке Spark

  3. Передача банку HBASE в spark.driver.extraClassPath и spark.executor.extraClassPath

Журнал ошибок

18/03/20 15:33:24 WARN TableInputFormatBase: You are using an HTable instance that relies on an HBase-managed Connection. This is usually due to directly creating an HTable, which is deprecated. Instead, you should create a Connection object and then request a Table instance from it. If you don't need the Table instance for your own use, you should instead use the TableInputFormatBase.initalizeTable method directly.
18/03/20 15:47:38 WARN TaskSetManager: Lost task 0.0 in stage 7.0 (TID 406, hadoopnode.server.name): java.lang.IllegalStateException: Error while configuring input job properties
    at org.apache.hadoop.hive.hbase.HBaseStorageHandler.configureTableJobProperties(HBaseStorageHandler.java:444)
    at org.apache.hadoop.hive.hbase.HBaseStorageHandler.configureInputJobProperties(HBaseStorageHandler.java:342)
Caused by: org.apache.hadoop.hbase.client.RetriesExhaustedException: Failed after attempts=50, exceptions:
Caused by: java.lang.RuntimeException: SASL authentication failed. The most likely cause is missing or invalid credentials. Consider 'kinit'.
    at org.apache.hadoop.hbase.ipc.RpcClientImpl$Connection$1.run(RpcClientImpl.java:679)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:422)
Caused by: GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)

1 ответ

Я смог решить эту проблему, добавив следующую конфигурацию в spark-env.sh

export SPARK_CLASSPATH = / usr / hdp / current / hbase-client / lib / hbase-common.jar: /usr/hdp/current/hbase-client/lib/hbase-client.jar: / usr / hdp / current / hbase- клиент / Библиотека / HBase-server.jar:/usr/hdp/current/hbase-client/lib/hbase-protocol.jar:/usr/hdp/current/hbase-client/lib/guava-12.0.1.jar

И удаление spark.driver.extraClassPath и spark.executor.extraClassPath, в котором я передавал вышеупомянутый Jar из команды отправки Spark.

Другие вопросы по тегам