Автономная авторизация кластера spark с помощью Ranger

#apache-spark-sql #apache-ranger

#apache-spark-sql #apache-ranger

Вопрос:

Я работаю над настройкой компьютеров EC2, на которых есть автономный кластер Spark, Hive, Apache Ranger. Hive интегрирован в Ranger.

Поскольку Ranger не поддерживает Spark-SQL JDBC (порт 10015), я попробовал этот проект с открытым исходным кодомhttps://github.com/yaooqinn/spark-authorizer для авторизации в Spark. Но не сработало, поскольку, похоже, оно полагается на yarn resource manager.

Я хотел узнать любые возможные способы получения авторизации на Spark-sql с помощью Apache Ranger.

Мы не используем какие-либо реализованные дистрибутивы, поэтому такие функции, как SPARK-LLAP в hortonworks, не подходят.

Я уже пробовал то, что объясняется в <a rel="noreferrer noopener nofollow" href="https:///mail-archives.apache.org/mod_mbox/ranger-user/201601.mbox/» rel=»nofollow noreferrer»>http://mail-archives.apache.org/mod_mbox/ranger-user/201601.mbox/ , но это тоже не сработало.

В прошлом году для этого была создана spark jira, но, похоже, она еще не заработала. https://issues.apache.org/jira/browse/SPARK-24503

Мы используем Spark 2.3, Hive 2.3, Ranger 1.0.

Комментарии:

1. Есть какие-нибудь успехи в решении этой проблемы?

2. Ниже я ответил на свой собственный вопрос. Пользовательский код см. по ссылке.

3. Я не могу увидеть ни ваш ответ, ни пользовательский код. Вы опубликовали ответ?

4. ответ был удален сообществом, я расширил и перепостил ниже.

Ответ №1:

Создайте простое Java-приложение для аутентификации на spark-sql с портом 10015.

 package hive.test;

import java.util.Hashtable;
import javax.security.sasl.AuthenticationException;
import org.apache.hive.service.auth.PasswdAuthenticationProvider;

/*
 javac -cp $HIVE_HOME/lib/hive-service-0.11-mapr.jar SampleAuthenticator.java -d .
 jar cf sampleauth.jar hive
 cp sampleauth.jar $HIVE_HOME/lib/.
*/


public class SampleAuthenticator implements PasswdAuthenticationProvider {

  Hashtable<String, String> store = null;

  public SampleAuthenticator () {
    store = new Hashtable<String, String>();
    store.put("user1", "passwd1");
    store.put("user2", "passwd2");
  }

  @Override
  public void Authenticate(String user, String  password)
      throws AuthenticationException {

    String storedPasswd = store.get(user);

    if (storedPasswd != null amp;amp; storedPasswd.equals(password))
      return;

    throw new AuthenticationException("SampleAuthenticator: Error validating user");
  }

}
  

Настройте следующие свойства в hive-site.xml файл на каждом узле, где установлен HiveServer2:

hive.server2.authentication CUSTOM
hive.server2.custom.authentication.class The authentication class name.

 <property>
<name>hive.server2.authentication</name>
<value>CUSTOM</value>
</property>

<property>
<name>hive.server2.custom.authentication.class</name>
<value>hive.test.SampleAuthenticator</value>
</property>
  

Затем перезапустите сервер Hiveserver2, чтобы применить изменения:

ссылка:https://mapr.com/docs/52/Hive/HiveServer2-CustomAuth.html

Комментарии:

1. Аутентификация и авторизация — это не одно и то же. То, что вы показываете, является базовой аутентификацией, которая не покрывает потребности в контроле доступа.