2017-05-01 12 views
0

私はスタンドアロンのSparkからHive(hadoopクラスタにkerberos認証がある)に接続しようとしています。Hiveに接続するときにSparkでKinit

私はハイブに接続できるスパークプログラムでkinitを行う方法を教えてもらえますか?

UPDATE:私のスパークは、あなたが火花シェル初期化する前にkinitコマンドを実行したり(火花提出)スパークアプリを提出しなければならないのHadoop

答えて

0

異なるクラスタ上です。他のオプションは、キータブを使用してKerberosチケットを取得し、あなたが火花シェルが開いているとあなたが終了したくない、と仮定すると、この

bash -c "kinit -kt /path/to/key/mykey.keytab [email protected]; spark-shell" 

に関して、

+0

diffクラスターでスパークが発生した場合、どうすればいいですか? – AKC

0

のようなあなたのスパークプログラムを実行していますあなたは次のようなことをやり直すことができます:

import java.lang.ProcessBuilder 
import java.io.PrintWriter 

//resets your kerberos login 
val p1 = Runtime.getRuntime.exec("kdestroy") 
p1.waitFor 
//executes kinit, 
val p = Runtime.getRuntime.exec("kinit") 
val stdin = p.getOutputStream 
val pw =new PrintWriter(stdin) 
//val pwd = get_password() //get_password() is a function to get your password from a file, or wherever 
pw.println(pwd) // you could put your password here , but plain text passwords are generally frowned upon 
pw.close 
p.waitFor 
+1

HiveはHadoop認証ライブラリを使用するので、Scalaの '' org.apache.hadoop.security.UserGroupInformation.loginUserFromKeytab( "[email protected]"、 "/ some/path/to/the.donald.keytab ")' –

+0

SparkがDiffクラスタ上にある場合は同じですか? – AKC

+0

Kerberosの全ポイントは、*リモート*クライアントを認証することです。そのため、Hadoopで使用されるKDC、クラスタを指すHadoop conf、Hadoopクライアント(JAR +ネイティブライブラリ)を指すKerberos confが必要です。クラスタノードの正式なDNS名。それで、どこからでもSparkを走らせることができます。 Windowsからのインクルード - しかし、それは "公式の"ネイティブライブラリがないため、より難しいです。 –

関連する問題