Платформа: кластер HDP3 с 6 узлами
Выполнение этого из узла данных ( non-NameNode )
Цель: Заставить нового пользователя создать базу данных и таблицу в ней. просто.
Вот шаги, которые я выполнил, и ошибка, которую я получил ниже:
[root@server:~]useradd lebowski // create user
[root@server:~]passwd lebowski
[root@server:~]usermod -a -G hadoop lebowski // add user to hadoop group
[root@server:~]su lebowski
[lebowski@server:~]$ groups
lebowski hadoop //All good
[lebowski@server:~]$hive //same output & issues w/ beeline as well
0: jdbc:hive2://server.com> CREATE DATABASE dude;
0: jdbc:hive2://server.com> use dude;
0: jdbc:hive2://server.com> CREATE TABLE BIG (//table creation stuff goes here//);
ОШИБКА: СБОЙ: Ошибка выполнения, код возврата 1 из org . apache .had oop .hive.ql.exe c .DDLTask. MetaException (сообщение: Got исключение: org. apache .had oop .security.AccessControlException
В доступе отказано: пользователь = lebowski , доступ = ВЫПОЛНИТЬ, inode = "/ склад / табличное пространство / управляемый / куст / dude.db": куст: имел oop: drwxrwx ---
Сейчас Как вы можете видеть: dude.db файл на hdfs принадлежит hive и относится к группе 'had oop '
dude.db:hive:hadoop:drwxrwx---
Удивительные факты:
- Поскольку для hive.server2.enable.doAs
установлено значение true, HiveServer2 должен выполнять операции Hive как пользователь, отправляющий запрос.
- Владелец базы данных - hive
, хотя пользователь, отправляющий запрос, - lebowski
.
- хотя создание таблицы связано с пользователем lebowski
, который отклоняется при попытке записи в папку базы данных, ранее созданную в hdfs.
То, что я пытался:
Я пытался заставить hadoop.security.group.mapping
к ShellBasedUnixGroupsMapping
, но это приводит к сбою перезапуска NameNode, поэтому я вернул его к значению по умолчанию (Jni) .
Я также пытался обновить sh групповые сопоставления: hdfs dfsadmin -refreshUserToGroupsMappings
ВОПРОС : почему один и тот же контекст использует одного технического пользователя для записи в hdfs ( hive в случае создания базы данных) и фактический пользователь (lebowski) для создания таблицы в следующем операторе?
Другая загадочная вещь заключается в том, что я убедился, что пользователь (lebowski) находится в 'имел oop' группу пользователей.
Логично, что эту ошибку не следует поднимать: пользователь входит в группу с правами rwx
на папку hdfs.
Одно из возможных объяснений - моя отправная точка для этого post: "unix" пользователь lebowski был создан из узла данных, поэтому я не уверен, как он распространяется на весь кластер
Еще одно преимущество - управление ролями Hive & Предоставления, которые могут конфликтовать / мешать / отменять права и разрешения на основе POSIX.
Возможные обходные пути : я мог бы подключиться как hdfs или улей, или принудительно войти через chmod
, но я хотел бы, за один раз , чтобы сделать вещи производственные дружественным путем, к книге, и не взламывайте мой путь через это.
Дополнительная информация:
Рейнджер установлен, но Hive Plugin не активирован
hive.security.authorization.manager
установлен в org. apache .had oop .hive.ql.security.authorization.plugin.fallback.FallbackHiveAuthorizerFactory
hive.security.authorization.enabled
установлен в true
Любые просвещенные мысли Добро пожаловать.