У меня есть веб-приложение, которое взаимодействует с Hadoop. (Cloudera cdh3u6) Отдельная операция пользователя должна запустить новое задание по сокращению карты в кластере.Запуск карты уменьшить работу как другой пользователь
Кластер не является безопасным кластером, но использует простую групповую аутентификацию - поэтому, если я схожу к нему как к себе, я могу запустить задания MR из командной строки.
В веб-приложение, я использую ToolRunner
запустить свою работу:
MyMapReduceWrapperClass mr = new MyMapReduceWrapperClass();
ToolRunner.run(mr, null);
// inside the run implementation of my wrapper class :
Job job = new Job(conf, "job title");
//set up stuff removed
job.submit();
В настоящее время эта работа представляется как пользователь, который запустил сервер веб-приложений процесса (Tomcat), и пользователь специальную локальную учетную запись на этом веб-сервере, которая не имеет разрешений на отправку заданий в кластер.
В идеале я хотел бы получить от пользователя личную идентификацию и передать ее, так что, когда разные пользователи взаимодействуют с веб-приложением/службой, мы можем видеть, кто ссылается на какие задания. Пропуская вопросы о том, как фактически координировать эти учетные данные, я даже не понимаю, куда это пойдет.
Я вижу, что на Job
у меня есть getCredentials()
вариант, но от чтения о маркере материала/Kerberos там у меня сложилось впечатление, что это для обеспеченных кластеров (который я думаю, что мы не) - не говоря уже о I не думаю, что у моего веб-сервера установлен Kerberos. Это может быть исправлено. Но это также звучит так, как предполагаемый прецедент - это добавить секреты, которые могут потребоваться при сокращении задания на карту при работе для доступа к другим службам, - а не о выполнении задания как кого-то другого.
Я также вижу, что на классе (старше?) JobConf
у меня есть возможность setUser(String name)
, который кажется многообещающим - хотя я не знаю, где он потребует пароль или что-то в этом роде, но я не могу найти много информации или документации по этой функции. Я попробовал это, и это не повлияло - работа все еще была представлена как пользователь Tomcat.
Есть ли другие пути для изучения или исследования? Я не говорю о ключевых словах для Google. Я бы предпочел, чтобы у меня не было опции «Просто дайте права пользователя tomcat пользователю на кластер» - я не управляю этим активом, и я не ожидаю, что этот запрос будет летать. Если, однако, это единственный мой вариант, я бы хотел понять, почему это так, поэтому я могу утверждать, что нужно иметь правильную информацию.
Я считаю, что вы ищете что-то похожее на то, что называется безопасным олицетворение: http://hadoop.apache.org/docs/stable /Secure_Impersonation.html - это отправная точка –