Использование chained-плагина Hive для HDFS and Ozone

Chained-плагины предоставляют возможность настроить только плагин Hive SQL, на основе которого будут автоматически сформированы политики хранения (storage policies). Описанная функциональность реализуется с помощью Resource Mapping Manager.

Предварительные требования

  1. Активируйте плагин Ranger Hive.

  2. Для HDFS активируйте плагин Ranger HDFS со включенным параметром Hive SQL support.

  3. Для Ozone активируйте плагин Ranger Ozone с активированным параметром Hive SQL support. Ozone должен быть интегрирован с сервисами кластера.

  4. Создайте в 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

  • Ozone

  1. Проверьте, что данные появились в 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
  2. Проверьте наличие маппингов Ranger:

    $ cat <mappings_location>

    где <mappings_location> соответствует значению параметра ranger.plugin.hdfs.hive.resource.mappings.file.location HDFS.

  3. Создайте в 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

  4. Считайте данные из 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"
  1. Проверьте, что данные появились в 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
  2. Проверьте наличие маппингов Ranger:

    $ cat <mappings_location>

    где <mappings_location> соответствует значению параметра ranger.plugin.ozone.hive.resource.mappings.file.location HDFS.

  3. Создайте в 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

  4. Считайте данные из 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
Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней