Ошибка получения класса не найден при установке фильтра веб-интерфейса spark - PullRequest
0 голосов
/ 31 октября 2019

Я хочу настроить аутентификацию spark web ui на EMR в соответствии с документом spark, добавив фильтр интерфейса spark. После того, как я настроил config и .jar, я не могу запустить сервер истории искров.

Как я могу включить аутентификацию или сказать спарку найти класс, который я предоставил? Я также попытался добавить путь в spark.driver.extraClassPath.

Я скомпилировал файл .jar из https://gist.github.com/neolitec/8953607, и поместил его в / usr / lib / spark / jars:

BasicAuthenticationFilter.java

package com.neolitec.examples;

import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.StringTokenizer;

/**
 * Created by kemanson on 12/02/14.
 */
public class BasicAuthenticationFilter implements Filter {

  /** Logger */
  private static final Logger LOG = LoggerFactory.getLogger(BasicAuthenticationFilter.class);

  private String username = "";

  private String password = "";

  private String realm = "Protected";

  @Override
  public void init(FilterConfig filterConfig) throws ServletException {
    username = filterConfig.getInitParameter("username");
    password = filterConfig.getInitParameter("password");
    String paramRealm = filterConfig.getInitParameter("realm");
    if (StringUtils.isNotBlank(paramRealm)) {
      realm = paramRealm;
    }
  }

  @Override
  public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
      throws IOException, ServletException {

    HttpServletRequest request = (HttpServletRequest) servletRequest;
    HttpServletResponse response = (HttpServletResponse) servletResponse;

    String authHeader = request.getHeader("Authorization");
    if (authHeader != null) {
      StringTokenizer st = new StringTokenizer(authHeader);
      if (st.hasMoreTokens()) {
        String basic = st.nextToken();

        if (basic.equalsIgnoreCase("Basic")) {
          try {
            String credentials = new String(Base64.decodeBase64(st.nextToken()), "UTF-8");
            LOG.debug("Credentials: " + credentials);
            int p = credentials.indexOf(":");
            if (p != -1) {
              String _username = credentials.substring(0, p).trim();
              String _password = credentials.substring(p + 1).trim();

              if (!username.equals(_username) || !password.equals(_password)) {
                unauthorized(response, "Bad credentials");
              }

              filterChain.doFilter(servletRequest, servletResponse);
            } else {
              unauthorized(response, "Invalid authentication token");
            }
          } catch (UnsupportedEncodingException e) {
            throw new Error("Couldn't retrieve authentication", e);
          }
        }
      }
    } else {
      unauthorized(response);
    }
  }

  @Override
  public void destroy() {
  }

  private void unauthorized(HttpServletResponse response, String message) throws IOException {
    response.setHeader("WWW-Authenticate", "Basic realm=\"" + realm + "\"");
    response.sendError(401, message);
  }

  private void unauthorized(HttpServletResponse response) throws IOException {
    unauthorized(response, "Unauthorized");
  }

}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

  <filter>
    <filter-name>basicAuthenticationFilter</filter-name>
    <filter-class>com.neolitec.examples.BasicAuthenticationFilter</filter-class>
    <init-param>
      <param-name>username</param-name>
      <param-value>admin</param-value>
    </init-param>
    <init-param>
      <param-name>password</param-name>
      <param-value>motdepasse</param-value>
    </init-param>
  </filter>

  <filter-mapping>
    <filter-name>basicAuthenticationFilter</filter-name>
    <url-pattern>/admin.jsp</url-pattern>
  </filter-mapping>

</web-app>

Я также добавил конфигурацию в / etc/spark/conf/spark-defaults.conf для spark.ui.filters com.neolitec.examples.BasicAuthenticationFilter spark.com.neolitec.examples.BasicAuthenticationFilter.params user = user, password = abcd1234, realm = some

Ниже приведен журнал сообщений об ошибках после перезапуска сервера spark-history

19/10/31 09:31:42 WARN BaseHolder:
java.lang.ClassNotFoundException: com.bdp.BasicAuthenticationFilter
        at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        at org.spark_project.jetty.util.Loader.loadClass(Loader.java:86)
        at org.spark_project.jetty.servlet.BaseHolder.doStart(BaseHolder.java:95)
        at org.spark_project.jetty.servlet.FilterHolder.doStart(FilterHolder.java:92)
        at org.spark_project.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
        at org.spark_project.jetty.servlet.ServletHandler.initialize(ServletHandler.java:872)
        at org.spark_project.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:349)
        at org.spark_project.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:778)
        at org.spark_project.jetty.servlet.ServletContextHandler.doStart(ServletContextHandler.java:262)
        at org.spark_project.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
        at org.spark_project.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:131)
        at org.spark_project.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:105)
        at org.spark_project.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61)
        at org.spark_project.jetty.server.handler.gzip.GzipHandler.doStart(GzipHandler.java:253)
        at org.spark_project.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
        at org.apache.spark.ui.JettyUtils$$anonfun$startJettyServer$1.apply(JettyUtils.scala:408)
        at org.apache.spark.ui.JettyUtils$$anonfun$startJettyServer$1.apply(JettyUtils.scala:403)
        at scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59)
        at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:48)
        at org.apache.spark.ui.JettyUtils$.startJettyServer(JettyUtils.scala:403)
        at org.apache.spark.ui.WebUI.bind(WebUI.scala:132)
        at org.apache.spark.deploy.history.HistoryServer.bind(HistoryServer.scala:137)
        at org.apache.spark.deploy.history.HistoryServer$.main(HistoryServer.scala:286)
        at org.apache.spark.deploy.history.HistoryServer.main(HistoryServer.scala)
19/10/31 09:31:42 WARN BaseHolder:
java.lang.ClassNotFoundException: com.bdp.BasicAuthenticationFilter
        at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        at org.spark_project.jetty.util.Loader.loadClass(Loader.java:86)
        at org.spark_project.jetty.servlet.BaseHolder.doStart(BaseHolder.java:95)
        at org.spark_project.jetty.servlet.FilterHolder.doStart(FilterHolder.java:92)
        at org.spark_project.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
        at org.spark_project.jetty.servlet.ServletHandler.initialize(ServletHandler.java:909)
        at org.spark_project.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:349)
        at org.spark_project.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:778)
        at org.spark_project.jetty.servlet.ServletContextHandler.doStart(ServletContextHandler.java:262)
        at org.spark_project.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
        at org.spark_project.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:131)
        at org.spark_project.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:105)
        at org.spark_project.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61)
        at org.spark_project.jetty.server.handler.gzip.GzipHandler.doStart(GzipHandler.java:253)
        at org.spark_project.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
        at org.apache.spark.ui.JettyUtils$$anonfun$startJettyServer$1.apply(JettyUtils.scala:408)
        at org.apache.spark.ui.JettyUtils$$anonfun$startJettyServer$1.apply(JettyUtils.scala:403)
        at scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59)
        at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:48)
        at org.apache.spark.ui.JettyUtils$.startJettyServer(JettyUtils.scala:403)
        at org.apache.spark.ui.WebUI.bind(WebUI.scala:132)
        at org.apache.spark.deploy.history.HistoryServer.bind(HistoryServer.scala:137)
        at org.apache.spark.deploy.history.HistoryServer$.main(HistoryServer.scala:286)
        at org.apache.spark.deploy.history.HistoryServer.main(HistoryServer.scala)
19/10/31 09:31:42 ERROR HistoryServer: Failed to bind HistoryServer
MultiException[javax.servlet.UnavailableException: Class loading error for holder com.bdp.BasicAuthenticationFilter-56b78e55, javax.servlet.UnavailableException: Class loading error for holder com.bdp.BasicAuthenticationFilter-56b78e55]
        at org.spark_project.jetty.servlet.ServletHandler.initialize(ServletHandler.java:863)
        at org.spark_project.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:349)
        at org.spark_project.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:778)
        at org.spark_project.jetty.servlet.ServletContextHandler.doStart(ServletContextHandler.java:262)
        at org.spark_project.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
        at org.spark_project.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:131)
        at org.spark_project.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:105)
        at org.spark_project.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61)
        at org.spark_project.jetty.server.handler.gzip.GzipHandler.doStart(GzipHandler.java:253)
        at org.spark_project.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
        at org.apache.spark.ui.JettyUtils$$anonfun$startJettyServer$1.apply(JettyUtils.scala:408)
        at org.apache.spark.ui.JettyUtils$$anonfun$startJettyServer$1.apply(JettyUtils.scala:403)
        at scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59)
        at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:48)
        at org.apache.spark.ui.JettyUtils$.startJettyServer(JettyUtils.scala:403)
        at org.apache.spark.ui.WebUI.bind(WebUI.scala:132)
        at org.apache.spark.deploy.history.HistoryServer.bind(HistoryServer.scala:137)
        at org.apache.spark.deploy.history.HistoryServer$.main(HistoryServer.scala:286)
        at org.apache.spark.deploy.history.HistoryServer.main(HistoryServer.scala)
        Suppressed: javax.servlet.UnavailableException: Class loading error for holder com.bdp.BasicAuthenticationFilter-56b78e55
                at org.spark_project.jetty.servlet.BaseHolder.doStart(BaseHolder.java:102)
                at org.spark_project.jetty.servlet.FilterHolder.doStart(FilterHolder.java:92)
                at org.spark_project.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
                at org.spark_project.jetty.servlet.ServletHandler.initialize(ServletHandler.java:909)
                ... 18 more
Caused by: javax.servlet.UnavailableException: Class loading error for holder com.bdp.BasicAuthenticationFilter-56b78e55
        at org.spark_project.jetty.servlet.BaseHolder.doStart(BaseHolder.java:102)
        at org.spark_project.jetty.servlet.FilterHolder.doStart(FilterHolder.java:92)
        at org.spark_project.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
        at org.spark_project.jetty.servlet.ServletHandler.initialize(ServletHandler.java:872)
        ... 18 more
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...