Linux、Hive、および Spark の間のユーザー アカウントに関して、非常に興味深い厄介な問題があります...
複数の (Linux) ユーザー アカウントで実行できる必要がある Spark アプリケーションが動作しています。ただし、すべてのテーブルを「所有」する Hive ユーザーを共有する必要があります。そうしないと、1 人のユーザーが他のユーザーが上書きできないテーブルを作成する可能性があります。つまり、最初にコードを実行してテーブルを削除/作成したユーザーを除いて、コードが壊れます。 .
ここで、手動で変更するために、Hive Beeline でコマンド ライン パラメーターを使用して、「Hive ユーザー」を Linux ユーザー以外に設定できます。
/usr/lib/hive/bin/beeline -u jdbc:hive2://<our hive server>:10000 -n <hiveuserid> -d org.apache.hive.jdbc.HiveDriver --hiveconf mapreduce.job.queuename=<queuename>
ただし、Spark ジョブの Hive ID を設定するためのコマンド ライン パラメーターがないことを私は知っています。
@SPARK_HOME/bin/spark-submit -? <hiveuserid>
ここで sudo を使用することはオプションではありません。これは、セキュリティ上の理由から、対応する Linux ユーザーを持たない Hive ユーザーが会社から提供されたため、アプリケーションに渡す HIVE ユーザー パラメーターが本当に必要なためです。
spark-submit コマンド (spark-submit のコマンドライン引数とパラメーターについてはhttps://spark.apache.org/docs/latest/configuration.htmlを参照)、または WITHIN からの何かがあるはずです。次のような私のSparkスカラコード
import org.apache.spark._
import org.apache.spark.SparkContext._
import org.apache.spark.sql._
import org.apache.spark.sql.hive.HiveContext
sc = new SparkContext(. . .)
hc = new HiveContext(sc)
hc.sql("set user as <hiveuserid>")
それとも、Hive コンテキスト自体にユーザーを設定する機能がありますか?
hc.SetUser("<hiveuserid>")
何か案は?同じ Hive ユーザーを使用できるようになるまで、このジョブを別の Linux ユーザーとして実行することはできません
(PS 繰り返しになりますが、共有 Hive ユーザーと一致する新しい共有 Linux ユーザーを作成することは、私たちの選択肢ではありません。複数のユーザーが Linux アカウントのユーザー ID を共有することは会社のセキュリティ ポリシーに反するためです。したがって、Linux sudoer アカウントは共有 Hive ユーザー アカウントとは異なります。理由は聞かないでください。これは IT の問題です :-)