2015-06-08 3 views
0

У меня есть очень интересный, липкий проблемы с учетными записями пользователей между Linux, Шуе и Спарк ...Как установить пользователя «Улей» на что-то другое, кроме пользователя Spark из программы Spark?

У нас есть приложение, искровой на работе, которая должна быть в состоянии быть выполнено несколькими (Linux) учетных записей пользователей. Тем не менее, мы должны иметь общий пользователь Hive, который «владеет» всеми таблицами, в противном случае один пользователь мог бы создать таблицу, которую ни один другой пользователь не может перезаписать, что означает, что наш код прерывается, кроме пользователя, который первым запускал код, чтобы удалить/создать таблицу ,

Теперь для изменения вещей вручную, можно использовать параметры командной строки в улей Билайна установить мой «Улей User» на что-то другое, чем мой 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> 

Однако, я знаю нет такого параметр командной строки, чтобы установить улей ID для работы Спарк:

@SPARK_HOME/bin/spark-submit -? <hiveuserid> 

Использование Sudo здесь это не вариант, потому что по соображениям безопасности наша компания дала нам пользователю улей, который не имеет соответствующего пользователя Linux, так что мы на самом деле необходимо, чтобы пользовательский параметр HIVE передавался в наше приложение.

Оказывается, что там должно быть что-то либо в команде искровой представить (см https://spark.apache.org/docs/latest/configuration.html аргументы командной строки и параметры для искровых представить), или что-то из моей искры лестницы коды, такие как

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>") 

или, может быть, сам контекст контекста имеет некоторую функцию для установки пользователя?

hc.SetUser("<hiveuserid>") 

Любые идеи? Мы не можем запускать эту работу в качестве разных пользователей Linux, пока мы не сможем использовать одного и того же пользователя Hive.

(PS Опять же, создание нового общего пользователя Linux, совпадающего с общим пользователем Hive, для нас не является опцией, поскольку это противоречит политика безопасности компании, чтобы иметь несколько пользователей, разделяющих учетную запись пользователя Linux, и нам не разрешено делиться паролем, поэтому наша учетная запись Linux sudoer отличается от нашей общей учетной записи пользователя Hive - не спрашивайте меня, почему это IT вещь :-)

ответ

0

Рассматривали ли вы настройку групповых разрешений для данных Hive? Например ваш каталог может иметь следующие разрешения:

drwxrwxr-x - hive hadoop 0 2014-10-14 04:28 /user/hive/warehouse/test

Любой пользователь, является частью hadoop группы будет иметь полный доступ на чтение/запись/выполнение для этой таблицы.

Смежные вопросы