Доступ к HDFS через PXF

YMatrix поддерживает доступ к данным в HDFS через PXF (Platform Extension Framework). С помощью PXF YMatrix может параллельно читать структурированные и полуструктурированные данные из HDFS, устраняя избыточность и задержки, вызванные миграцией данных, обеспечивая аналитику по принципу «подключил — и сразу используй».

В этом разделе приведены инструкции по использованию двух методов доступа: Прямой доступ к HDFS через PXF и Доступ к HDFS через PXF с Ranger.

Если PXF не установлен, обратитесь к разделу Установка PXF за инструкциями по установке.

Прямой доступ к HDFS через PXF

В этом разделе описывается, как настроить и использовать PXF в YMatrix для доступа к HDFS.

Конфигурация окружения

Программное обеспечение Версия
YMatrix MatrixDB 6.2.2+enterprise
Hadoop Hadoop 3.2.4
PXF pxf-matrixdb4-6.3.0-1.el7.x86_64

Руководство по использованию

Чтение данных из HDFS в YMatrix

(1)Создание каталогов в Hadoop (выполняется на мастер-узле Hadoop)
Сначала создайте каталоги в HDFS для хранения файлов данных. Эти каталоги будут использоваться как точки обмена данными между YMatrix и кластером Hadoop.

  1. Создайте каталог /ymatrix в корне HDFS. Этот каталог будет содержать все файлы данных, связанные с базой данных. Выполните команду:
hdfs dfs -mkdir /ymatrix
  1. Внутри каталога /ymatrix создайте подкаталог с именем pxf_examples. Этот подкаталог будет содержать примеры данных для PXF. Выполните команду:
hdfs dfs -mkdir /ymatrix/pxf_examples
  1. Просмотрите содержимое корневого каталога HDFS, чтобы убедиться, что каталог /ymatrix создан. Используйте команду ls:
hdfs dfs -ls /
  1. Просмотрите содержимое каталога /ymatrix, чтобы подтвердить создание подкаталога pxf_examples.
hdfs dfs -ls /ymatrix/
  1. Создайте тестовый файл с данными
    Создайте локальный файл, содержащий информацию о городе, месяце, количестве заказов и сумме продаж, выполнив следующую команду:
echo 'Prague,Jan,101,4875.33
Rome,Mar,87,1557.39
Bangalore,May,317,8936.99
Beijing,Jul,411,11600.67' > pxf_hdfs_simple.txt
  1. Загрузите созданный локальный файл в каталог /ymatrix/pxf_examples в HDFS.
hdfs dfs -put pxf_hdfs_simple.txt /ymatrix/pxf_examples/
  1. Просмотрите содержимое загруженного файла, чтобы убедиться в успешной загрузке.
hdfs dfs -cat /ymatrix/pxf_examples/pxf_hdfs_simple.txt
  1. Установите права доступа к файлу
    Используйте команду hdfs dfs -chown, чтобы назначить владельцем файла пользователя mxadmin:
hdfs dfs -chown -R mxadmin:mxadmin /ymatrix/pxf_examples/pxf_hdfs_simple.txt

(2)Настройка переменных окружения для пользователя mxadmin (добавить на всех узлах YMatrix)
Чтобы обеспечить эффективное взаимодействие между YMatrix и кластером Hadoop, настройте переменные окружения на всех узлах YMatrix.

  • Добавьте следующие строки в файл .bashrc или другой файл конфигурации окружения на каждом узле YMatrix:
export HADOOP_HOME=/opt/modules/hadoop-3.2.4
export HADOOP_CONF_DIR=/opt/modules/hadoop-3.2.4/etc/hadoop
export PXF_CONF=/usr/local/pxf-matrixdb4
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

(3)Предоставление пользователю mxadmin доступа к кластеру Hadoop (изменить на всех узлах Hadoop)
Чтобы разрешить пользователю mxadmin доступ к кластеру Hadoop, измените файл конфигурации core-site.xml на всех узлах Hadoop.

  • Откройте файл core-site.xml и добавьте следующие параметры:
<property>
  <name>hadoop.proxyuser.mxadmin.groups</name>
  <value>*</value>
</property>

<property>
  <name>hadoop.proxyuser.mxadmin.hosts</name>
  <value>*</value>
</property>

(4)Создание каталога single_hdfs (добавить на всех машинах YMatrix)
Создайте новый каталог на мастер-узле YMatrix для хранения конфигурационных файлов кластера Hadoop.

  • Выполните команду:
mkdir /usr/local/pxf-matrixdb4/servers/single_hdfs/

(5)Копирование конфигурационных файлов из Hadoop в каталог PXF (перенос с мастер-узла Hadoop на мастер-узел YMatrix)
Скопируйте конфигурационные файлы Hadoop в каталог PXF на мастер-узле YMatrix.

  • Используйте команду scp:
scp $HADOOP_CONF_DIR/core-site.xml 192.168.50.95:/usr/local/pxf-matrixdb4/servers/single_hdfs/
scp $HADOOP_CONF_DIR/hdfs-site.xml 192.168.50.95:/usr/local/pxf-matrixdb4/servers/single_hdfs/
scp $HADOOP_CONF_DIR/yarn-site.xml 192.168.50.95:/usr/local/pxf-matrixdb4/servers/single_hdfs/

(6)Создание файла pxf-site.xml (создать на мастер-узле YMatrix)
Создайте файл конфигурации PXF pxf-site.xml на мастер-узле YMatrix, чтобы обеспечить правильное соединение между PXF и кластером Hadoop.

  • Используйте следующую команду для создания и редактирования файла:
vi /usr/local/pxf-matrixdb4/servers/single_hdfs/pxf-site.xml
  • Добавьте следующее содержимое:
<?xml version="1.0" encoding="UTF-8"?>
<configuration> 
</configuration>

(7)Обновление значения core-site.xml в fs.defaultFS до IP активного NameNode и синхронизация конфигурации PXF (выполнить на мастер-узле YMatrix)

Настройте параметр core-site.xml в файле fs.defaultFS, чтобы YMatrix мог правильно подключиться к NameNode Hadoop.

  • Измените конфигурацию fs.defaultFS:
<property>
  <name>fs.defaultFS</name>
  <value>hdfs://<namenode_ip>:9000</value>
</property>
  • Синхронизируйте конфигурацию PXF:
pxf cluster sync

(8)Запросы с использованием плагина PXF в базе данных YMatrix (выполнить на мастер-узле YMatrix)

  1. Установка плагина
    Активируйте плагин PXF в YMatrix, чтобы разрешить доступ к HDFS.
  • Выполните команду:
create extension pxf_fdw;
  1. Создание сервера FDW
    Создайте внешний источник данных, указывающий на файловую систему Hadoop.
  • Выполните SQL-команду:
CREATE SERVER single_hdfs FOREIGN DATA WRAPPER hdfs_pxf_fdw OPTIONS ( config 'single_hdfs' );
  1. Создание отображения пользователя FDW
    Свяжите пользователя YMatrix с сервером FDW.
  • Выполните SQL-команду:
CREATE USER MAPPING FOR mxadmin SERVER single_hdfs;
  1. Создание внешней таблицы FDW
    Свяжите файл HDFS с таблицей в YMatrix.
  • Выполните:
CREATE FOREIGN TABLE pxf_hdfs_table (location text, month text, num_orders int, total_sales float8) 
SERVER single_hdfs OPTIONS ( resource '/ymatrix/pxf_examples/pxf_hdfs_simple.txt', format 'text', delimiter ',' );
  1. Запрос к внешней таблице
    Проверьте успешное извлечение данных.
  • Выполните:
SELECT * FROM pxf_hdfs_table;

Запись данных из YMatrix в HDFS

(1)Создание каталога (выполнить на мастер-узле Hadoop)
Создайте новый каталог HDFS для хранения записываемых данных.

  • Команда:
hdfs dfs -mkdir /ymatrix/pxf_dir_examples

(2)Создание внешней таблицы (выполнить на мастер-узле YMatrix)
Создайте внешнюю таблицу в YMatrix, указывающую на новый каталог HDFS.

  • SQL-команда:
CREATE FOREIGN TABLE pxf_hdfsdir_table (location text, month text, num_orders int, total_sales float8) 
SERVER hdfs_svr OPTIONS (resource '/ymatrix/pxf_dir_examples', format 'text', delimiter ',' );

(3)Запись данных (выполнить на мастер-узле YMatrix)
Вставьте данные из существующей внешней таблицы pxf_hdfs_table в новую таблицу pxf_hdfsdir_table.

  • SQL-команда:
INSERT INTO pxf_hdfsdir_table SELECT * FROM pxf_hdfs_table ;

(4)Запрос к внешней таблице для получения всех данных (выполнить на мастер-узле YMatrix)
Проверьте успешность операции записи.

  • Запрос:
SELECT COUNT(*) FROM pxf_hdfsdir_table;

Доступ к HDFS через PXF с Ranger

В этом разделе описывается использование PXF совместно с Ranger для управления правами доступа к файлам HDFS.

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

Настройка окружения

  • Hadoop: 3 узла (hadoop01 — NameNode, hadoop02, hadoop03)
  • YMatrix: 3 узла (gp01 — Master, gp02, gp03)
  • Ranger: развернут на hadoop01

Шаги конфигурации

(1)Создание каталогов в Hadoop (выполнить на мастер-узле Hadoop)

Создайте каталоги в HDFS для обмена данными между YMatrix и Hadoop.

  1. Создайте каталог /ranger в корне HDFS
    Используется для хранения файлов данных, связанных с базой данных. Выполните:

    hdfs dfs -mkdir /ranger
  2. Просмотрите содержимое корневого каталога, чтобы убедиться в наличии /ranger
    Используйте ls для просмотра и подтверждения:

    hdfs dfs -ls /
  3. Создайте тестовый файл с данными
    Создайте локальный тестовый файл с помощью:

    echo "testuser,May,100,999.99" > /tmp/pxf_test_verify.txt

    pxf_01

  4. Загрузите локальный файл в каталог /ranger в HDFS
    Используйте hdfs dfs -put для загрузки:

    hdfs dfs -put -f /tmp/pxf_test_verify.txt /ranger/
  5. Просмотрите содержимое загруженного файла, чтобы подтвердить успех
    Выполните:

    hdfs dfs -cat /ranger/pxf_test_verify.txt

    pxf_02

(2)Настройка переменных окружения для пользователя mxadmin (добавить на всех узлах YMatrix)

Обеспечьте взаимодействие YMatrix с Hadoop, настроив переменные окружения на всех узлах.
В файле .bashrc или другом файле окружения добавьте:

export HADOOP_HOME=/opt/modules/hadoop-3.2.4
export HADOOP_CONF_DIR=/opt/modules/hadoop-3.2.4/etc/hadoop
export PXF_CONF=/usr/local/pxf-matrixdb4
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

(3)Предоставление пользователю mxadmin доступа к кластеру Hadoop (изменить на всех узлах Hadoop)

Разрешите доступ пользователю mxadmin, изменив файл core-site.xml на всех узлах Hadoop.
Откройте core-site.xml и добавьте:

<property>
  <name>hadoop.proxyuser.mxadmin.groups</name>
  <value>*</value>
</property>

<property>
  <name>hadoop.proxyuser.mxadmin.hosts</name>
  <value>*</value>
</property>

(4)Создание каталога single_hdfs (добавить на всех машинах YMatrix)

Создайте каталог на мастер-узле YMatrix для хранения конфигурационных файлов Hadoop.
Команда:

mkdir /usr/local/pxf-matrixdb4/servers/single_hdfs/

(5)Копирование конфигурационных файлов из Hadoop в папку PXF (передача с мастер-узла Hadoop на мастер-узел YMatrix)

Скопируйте конфигурационные файлы Hadoop в каталог PXF на мастер-узле YMatrix.
Используйте scp:

scp $HADOOP_CONF_DIR/core-site.xml 192.168.50.95:/usr/local/pxf-matrixdb4/servers/single_hdfs/
scp $HADOOP_CONF_DIR/hdfs-site.xml 192.168.50.95:/usr/local/pxf-matrixdb4/servers/single_hdfs/
scp $HADOOP_CONF_DIR/yarn-site.xml 192.168.50.95:/usr/local/pxf-matrixdb4/servers/single_hdfs/

(6)Создание файла pxf-site.xml (создать на мастер-узле YMatrix)

Создайте файл конфигурации PXF pxf-site.xml, чтобы обеспечить корректное подключение.

  1. Создайте и отредактируйте файл:
    vi /usr/local/pxf-matrixdb4/servers/single_hdfs/pxf-site.xml
  2. Добавьте следующее содержимое:
    <?xml version="1.0" encoding="UTF-8"?>
    <configuration> 
    </configuration>

(7)Обновление значения core-site.xml в fs.defaultFS до IP активного NameNode и синхронизация конфигурации PXF (выполнить на мастер-узле YMatrix)

Настройте параметр core-site.xml в fs.defaultFS, чтобы обеспечить правильное подключение к NameNode.

  1. Обновите конфигурацию fs.defaultFS:
    <property>
    <name>fs.defaultFS</name>
    <value>hdfs://<namenode_ip>:9000</value>
    </property>
  2. Синхронизируйте конфигурацию PXF:
    pxf cluster sync

Конфигурация Ranger

PXF взаимодействует с HDFS с использованием пользователей операционной системы, а не пользователей базы данных. Поэтому управление правами доступа в Ranger для HDFS основано на пользователях ОС.

  1. Настройка сервиса HDFS в Ranger
  • Создайте сервис HDFS и определите политики в Ranger.
  • Войдите в веб-консоль Ranger (http://hadoop01:6080).
  • Перейдите в Access Manager > Resource Based Policies > HDFS.
  • Нажмите Add New Service, чтобы создать новый сервис HDFS со следующими настройками:
    Название сервиса: hadoopdev
    Отображаемое имя: hadoopdev
    pxf_03
    Имя пользователя: root
    Пароль: пароль от root
    URL Namenode: hdfs://hadoop01:9000 (на основе core-site.xml)
    pxf_04

В Ranger различают Kerberos и Simple аутентификацию:
Kerberos: использует тикеты и шифрование; высокий уровень безопасности, подходит для производственных сред, особенно при работе с несколькими системами.
Simple: основана на имени пользователя и пароле; более низкий уровень безопасности, идеальна для разработки или тестирования.

Сохраните конфигурацию сервиса.
pxf_05

Внимание!
После создания сервиса перезапустите Hadoop Ranger Plugin, чтобы изменения вступили в силу.

  1. Создание пользователя mxadmin в Ranger

(i)Перейдите на страницу «User / Groups»
В меню выберите User / Groups, затем нажмите Add New User.

(ii)Создайте пользователя mxadmin
Введите mxadmin в поле User Name и нажмите Save.
pxf_06

(iii)Назначьте права доступа к HDFS пользователю mxadmin
В Ranger перейдите к сервису hadoop_hdfs и нажмите Add New Policy. Настройте следующим образом:
Название политики: test_allow_mxadmin
Путь к ресурсу: /ranger/pxf_test_verify.txt
pxf_07
Пользователь: mxadmin
Права: read
pxf_08
Сохраните политику.

Управление политиками доступа к HDFS с помощью Ranger

1. Создание тестовой базы данных

create database mxadmin;
# Switch to mxadmin database
\c mxadmin

2. Установка плагина

Активируйте плагин PXF в YMatrix для доступа к данным HDFS.
Выполните:

create extension pxf_fdw;

3. Создание сервера FDW

Создайте внешний источник данных для файловой системы Hadoop.
SQL-команда:

CREATE SERVER single_hdfs FOREIGN DATA WRAPPER hdfs_pxf_fdw OPTIONS ( config 'single_hdfs' );

4. Создание отображения пользователя FDW

Свяжите пользователя YMatrix с сервером FDW.
Команда:

CREATE USER MAPPING FOR mxadmin SERVER single_hdfs;

5. Создание внешней таблицы FDW

Свяжите файл HDFS с таблицей YMatrix.
Выполните:

CREATE FOREIGN TABLE pxf_hdfs_verify (
    name text,
    month text,
    count int,
    amount float8
)
SERVER single_hdfs
OPTIONS (
    resource '/ranger/pxf_test_verify.txt',
    format 'text',
    delimiter ','
);

6. Запрос к внешней таблице

  1. Когда политика Ranger запрещает доступ
    pxf_09
  • Выполните запрос:
    SELECT * FROM pxf_hdfs_verify;
  • Результат: pxf_10
  1. Когда политика Ranger разрешает доступ
    pxf_11
  • Выполните запрос:
    SELECT * FROM pxf_hdfs_table;
  • Результат: pxf_12