2016-10-17 8 views
0

Kerberosで保護されたクラスタでKnox経由でSparkSQL thriftserver(Spark 1.6.2)に接続しようとしています(HadoopディストリビューションはHDP 2.4.2です)。私たちはHiveと同じアーキテクチャを持っており、うまくいきます。 Sparkは同じthriftserverを使用しているので、私は同じことをするのは簡単ではないと思っていましたが、実際はそうではありません。Knox経由でspark thriftserverに接続

ノックス経由で接続する場合にthriftserverスパークによってスローされたエラーは次のとおりです。

16/10/17 15:25:39 ERROR ThriftHttpServlet: Failed to authenticate with hive/_HOST kerberos principal 
16/10/17 15:25:39 ERROR ThriftHttpServlet: Error: 
org.apache.hive.service.auth.HttpAuthenticationException: java.lang.reflect.UndeclaredThrowableException 
at org.apache.hive.service.cli.thrift.ThriftHttpServlet.doKerberosAuth(ThriftHttpServlet.java:361) 
at org.apache.hive.service.cli.thrift.ThriftHttpServlet.doPost(ThriftHttpServlet.java:136) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:755) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:848) 
at org.spark-project.jetty.servlet.ServletHolder.handle(ServletHolder.java:684) 
at org.spark-project.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:501) 
at org.spark-project.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:229) 
at org.spark-project.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1086) 
at org.spark-project.jetty.servlet.ServletHandler.doScope(ServletHandler.java:428) 
at org.spark-project.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193) 
at org.spark-project.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1020) 
at org.spark-project.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135) 
at org.spark-project.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116) 
at org.spark-project.jetty.server.Server.handle(Server.java:366) 
at org.spark-project.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:494) 
at org.spark-project.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:982) 
at org.spark-project.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:1043) 
at org.spark-project.jetty.http.HttpParser.parseNext(HttpParser.java:957) 
at org.spark-project.jetty.http.HttpParser.parseAvailable(HttpParser.java:240) 
at org.spark-project.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82) 
at org.spark-project.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:667) 
at org.spark-project.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
at java.lang.Thread.run(Thread.java:744) 
Caused by: java.lang.reflect.UndeclaredThrowableException 
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1727) 
at org.apache.hive.service.cli.thrift.ThriftHttpServlet.doKerberosAuth(ThriftHttpServlet.java:358) 
... 24 more 
Caused by: org.apache.hive.service.auth.HttpAuthenticationException: Authorization header received from the client is empty. 
at org.apache.hive.service.cli.thrift.ThriftHttpServlet.getAuthHeader(ThriftHttpServlet.java:502) 
at org.apache.hive.service.cli.thrift.ThriftHttpServlet.access$100(ThriftHttpServlet.java:68) 
at org.apache.hive.service.cli.thrift.ThriftHttpServlet$HttpKerberosServerAction.run(ThriftHttpServlet.java:403) 
at org.apache.hive.service.cli.thrift.ThriftHttpServlet$HttpKerberosServerAction.run(ThriftHttpServlet.java:366) 
at java.security.AccessController.doPrivileged(Native Method) 
at javax.security.auth.Subject.doAs(Subject.java:415) 
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1709) 
... 25 more 

誰もがこのことについてどんな考えを持っていますし、それを修正する方法?空のクライアント許可が実際に赤いニシンかもしれHiveServer2のよう

は、 マルコ

答えて

0

、ありがとうございました。 最初のHTTP要求にはヘッダーはありませんが、通常はサーバーからのSPNEGOチャレンジ後に送信されます。

SparkSQLのリリーフサーバーは、Hiveと同じ方法で使用できることは実際にはわかりませんでした。 Hadoopの多くのサービスで実装されているように、信頼できるプロキシサポートがあるかどうか知っていますか?これは、Apache Knoxなどの3番目のコンポーネントが、別のユーザーに代わって動作することを可能にし、認証されたユーザーの名前をdoAs query paramによってアサートします。また、doAsが信頼するアイデンティティから来ていることを保証します。この場合、kerberos/SPNEGO認証を使用します。

信頼できるプロキシをサポートしていない場合は、すぐに使用できません。 KnoxのSparkSQL用リプレイサーバーまたはSparkSQL用に作成されたカスタムディスパッチプロバイダに追加する必要があります。カスタムディスパッチにより、SparkSQLが期待するユーザーIDを伝播させることができます。

希望します。

--larry