Использование chained-плагина Hive для HDFS and Ozone
Chained-плагины предоставляют возможность настроить только плагин Hive SQL, на основе которого будут автоматически сформированы политики хранения (storage policies). Описанная функциональность реализуется с помощью Resource Mapping Manager.
Предварительные требования
-
Активируйте плагин Ranger Hive.
-
Для HDFS активируйте плагин Ranger HDFS со включенным параметром Hive SQL support.
-
Для Ozone активируйте плагин Ranger Ozone с активированным параметром Hive SQL support. Ozone должен быть интегрирован с сервисами кластера.
-
Создайте в Hive базу данных и таблицу с данными:
CREATE DATABASE testdb; CREATE TABLE testdb.test_table (id INT, name STRING) STORED AS PARQUET; INSERT INTO testdb.test_table VALUES (1, 'hello'), (2, 'world');
Использование
-
Проверьте, что данные появились в HDFS:
$ hdfs dfs -ls /apps/hive/warehouse/testdb.db/test_tableОжидаемый вывод:
Found 1 items -rw-r--r-- 3 hive hadoop 618 2026-04-20 11:32 /apps/hive/warehouse/testdb.db/test_table/000000_0
-
Проверьте наличие маппингов Ranger:
$ cat <mappings_location>где
<mappings_location>соответствует значению параметра ranger.plugin.hdfs.hive.resource.mappings.file.location HDFS. -
Создайте в Ranger политику Hive со следующими параметрами:
-
Policy Name —
test-chained-read -
Hive Database —
testdb -
Hive Table —
test_table -
Column —
* -
Allow Conditions → Select Users —
test_user -
Allow Conditions → Permissions —
select
-
-
Считайте данные из HDFS:
$ sudo -su test_user hdfs dfs -cat /apps/hive/warehouse/testdb.db/test_table/000000_0Ожидаемый вывод:
PAR1???00?ʃhelloworld&helloworldJR^<H hive_schema%id %name%L,&idJJ<(<)&??<& name^^&R<6(worldhello<&??@??Lwriter.time.zoneEtc/UTCwriter.model.name4.0.1writer.date.prolepticfalsewriter.zone.conversion.legacyfalseJparquet-mr version 1.15.2 (build 859eac165b08f927fa14590c33bc5f476405fb68),?PAR1Если права настроены некорректно, то вы получите следующую ошибку:
cat: org.apache.ranger.authorization.hadoop.exceptions.RangerAccessControlException: Permission denied: user=test_user, access=EXECUTE, inode="/apps/hive/warehouse/testdb.db/test_table/000000_0"
-
Проверьте, что данные появились в Ozone:
$ ozone fs -ls ofs://adhom/apps/hive/warehouse/testdb.db/test_tableОжидаемый вывод:
Found 1 items drwxrwxrwx - hive macbook 0 2026-04-21 12:28 ofs://adhom/apps/hive/warehouse/testdb.db/test_table/000000_0
-
Проверьте наличие маппингов Ranger:
$ cat <mappings_location>где
<mappings_location>соответствует значению параметра ranger.plugin.ozone.hive.resource.mappings.file.location HDFS. -
Создайте в Ranger политику Hive со следующими параметрами:
-
Policy Name —
test-chained-read -
Hive Database —
testdb -
Hive Table —
test_table -
Column —
* -
Allow Conditions → Select Users —
test_user -
Allow Conditions → Permissions —
select
-
-
Считайте данные из Ozone:
$ sudo -su test_user ozone fs -cat ofs://adhom/apps/hive/warehouse/testdb.db/test_table/000000_0Ожидаемый вывод:
PAR1???00?ʃhelloworld&helloworldJR^<H hive_schema%id %name%L,&idJJ<(<)&??<& name^^&R<6(worldhello<&??@??Lwriter.time.zoneEtc/UTCwriter.model.name4.0.1writer.date.prolepticfalsewriter.zone.conversion.legacyfalseJparquet-mr version 1.15.2 (build 859eac165b08f927fa14590c33bc5f476405fb68),?PAR1Если права настроены некорректно, то вы получите следующую ошибку:
cat: User test_user doesn't have READ permission to access key Volume:apps Bucket:hive Key:warehouse/testdb.db/test_table/000000_0