YMatrix 支持通过 PXF(Platform Extension Framework)访问 HDFS 中的数据。通过 PXF,YMatrix 可以并行读取 HDFS 上的结构化或半结构化数据,避免数据迁移带来的冗余与延迟,实现“即连即用”的数据分析体验。
本节包括 PXF 直接访问 HDFS 和 PXF 通过 Ranger 访问 HDFS 两种访问方式供用户选择使用。后者可通过 Ranger 实现对 HDFS 文件访问的权限设置。用户可直接点击跳转进行到相应章节进行查询。
若未安装 PXF,可参考PXF 安装章节进行安装。
本部分将详细介绍如何在 YMatrix 中配置与使用 PXF 访问 HDFS。
软件 | 版本信息 |
---|---|
YMatrix | MatrixDB 6.2.2+enterprise |
Hadoop | Hadoop 3.2.4 |
PXF | pxf-matrixdb4-6.3.0-1.el7.x86_64 |
(一)在 Hadoop 创建文件夹(Hadoop 主节点执行)
首先,我们需要在 HDFS 上创建一些目录,以便存放数据文件。这些目录将作为 YMatrix 与 Hadoop 集群之间的数据交换位置。
1.创建 HDFS 根目录下的 /greenplum
目录。该目录用于存放所有与数据库相关的数据文件。可以通过以下命令创建:
hdfs dfs -mkdir /greenplum
2.在 /greenplum
下创建 pxf_examples
子目录。该子目录用于存放 PXF 示例数据。通过以下命令创建该子目录:
hdfs dfs -mkdir /greenplum/pxf_examples
3.列出 HDFS 根目录的内容,验证 /greenplum
是否已创建。使用 ls
命令列出根目录内容,确保新目录创建成功:
hdfs dfs -ls /
4.列出 /greenplum
目录的内容,验证 pxf_examples
是否已创建。
hdfs dfs -ls /greenplum/
5.生成测试数据文件 在本地创建一个包含城市、月份、销量和金额的测试数据文件。可以使用以下命令:
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
6.将生成的本地文件上传到 HDFS 的 /greenplum/pxf_examples
目录。
hdfs dfs -put pxf_hdfs_simple.txt /greenplum/pxf_examples/
7.查看上传后的文件内容,验证上传成功。
hdfs dfs -cat /greenplum/pxf_examples/pxf_hdfs_simple.txt
8.赋予文件权限
通过 hdfs dfs -chown
命令将文件权限赋给 mxadmin
用户:
hdfs dfs -chown -R mxadmin:mxadmin /greenplum/pxf_examples/pxf_hdfs_simple.txt
(二)在 mxadmin 用户下配置环境变量(所有 YMatrix 节点添加)
为了确保 YMatrix 能够与 Hadoop 集群进行有效的交互,所有 YMatrix 节点需要配置相关的环境变量。
.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
(三)在 Hadoop 集群中加入 mxadmin 用户访问权限(Hadoop 所有节点修改)
为确保 mxadmin
用户能够访问 Hadoop 集群,需要在所有 Hadoop 节点的 core-site.xml
配置文件中进行相应设置。
core-site.xml
文件,加入以下配置:<property>
<name>hadoop.proxyuser.mxadmin.groups</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.mxadmin.hosts</name>
<value>*</value>
</property>
(四)创建 single_hdfs
文件夹(所有 YMatrix 机器添加)
在 YMatrix 主节点上创建一个新的文件夹,用于存放 Hadoop 集群的配置文件。
mkdir /usr/local/pxf-matrixdb4/servers/single_hdfs/
(五)从 Hadoop 机器拷贝配置文件到 PXF 文件夹(Hadoop 主节点机器往 YMatrix 主节点传输)
将 Hadoop 配置文件传输到 YMatrix 主节点的 PXF 目录。
scp
命令将 Hadoop 配置文件拷贝到 YMatrix 主节点: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/
(六)创建 pxf-site.xml
文件(YMatrix 主节点创建)
在 YMatrix 主节点上创建 PXF 配置文件 pxf-site.xml
,确保 PXF 服务能够正确与 Hadoop 集群连接。
vi /usr/local/pxf-matrixdb4/servers/single_hdfs/pxf-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
</configuration>
(七)修改 core-site.xml
的 fs.defaultFS
配置为 Active NameNode 所在节点 IP,并同步 PXF 配置(YMatrix 主节点执行)
配置 core-site.xml
文件中的 fs.defaultFS
属性,以确保 YMatrix 能够正确连接到 Hadoop 集群的 NameNode。
fs.defaultFS
配置<property>
<name>fs.defaultFS</name>
<value>hdfs://<namenode_ip>:9000</value>
</property>
pxf cluster sync
(八)在 YMatrix 数据库使用 pxf 插件进行查询(YMatrix 主节点执行)
1.创建插件
在 YMatrix 中启用 PXF 插件,允许 YMatrix 访问 HDFS 数据。
create extension pxf_fdw;
2.创建 FDW Server
创建一个外部数据源连接 Hadoop 集群的文件系统。
CREATE SERVER single_hdfs FOREIGN DATA WRAPPER hdfs_pxf_fdw OPTIONS ( config 'single_hdfs' );
3.创建 FDW User Mapping
配置 YMatrix 用户与 FDW 服务器的映射。
CREATE USER MAPPING FOR mxadmin SERVER single_hdfs;
4.创建 FDW Foreign Table,将 HDFS 上的文件映射到 YMatrix 数据库中。
CREATE FOREIGN TABLE pxf_hdfs_table (location text, month text, num_orders int, total_sales float8)
SERVER single_hdfs OPTIONS ( resource '/greenplum/pxf_examples/pxf_hdfs_simple.txt', format 'text', delimiter ',' );
5.查询外部表
执行查询语句,验证数据是否成功读取。
SELECT * FROM pxf_hdfs_table;
(一)创建目录(Hadoop 主节点执行)
在 HDFS 上创建新的目录,用于存放将要写入的数据。
hdfs dfs -mkdir /greenplum/pxf_dir_examples
(二)创建外部表(YMatrix 主节点执行)
在 YMatrix 中创建外部表,并将其指向新的 HDFS 目录。
CREATE FOREIGN TABLE pxf_hdfsdir_table (location text, month text, num_orders int, total_sales float8)
SERVER hdfs_svr OPTIONS (resource '/greenplum/pxf_dir_examples', format 'text', delimiter ',' );
(三)写入数据(YMatrix 主节点执行)
将数据从 YMatrix 的现有外部表 pxf_hdfs_table
插入到新创建的外部表 pxf_hdfsdir_table
中。
INSERT INTO pxf_hdfsdir_table SELECT * FROM pxf_hdfs_table ;
(四)查询 Foreign Table 获取目录下所有数据(YMatrix 主节点执行)
执行查询命令以验证数据是否成功写入到新的目录中。
SELECT COUNT(*) FROM pxf_hdfsdir_table;
本部分将详细介绍如何使用 PXF 通过 Ranger 管理 HDFS 文件的访问权限。
首先,我们在 HDFS 上创建一些目录,以便存放数据文件。这些目录将作为 YMatrix 与 Hadoop 集群之间的数据交换位置。
(一)创建 HDFS 根目录下的 /ranger
目录
该目录用于存放所有与数据库相关的数据文件。可通过一下命令创建:
hdfs dfs -mkdir /ranger
(二)列出 HDFS 根目录的内容,验证 /ranger
是否已创建
使用 ls
命令列出根目录内容,确保新目录创建成功。
hdfs dfs -ls /
(三)生成测试数据文件
在本地创建一个测试数据文件,可以使用以下命令。
echo "testuser,May,100,999.99" > /tmp/pxf_test_verify.txt
(四)将生成的本地文件上传到 HDFS 的 /ranger
目录
使用 hdfs dfs -put
命令将本地文件上传至 HDFS 中。
hdfs dfs -put -f /tmp/pxf_test_verify.txt /ranger/
(五)查看上传后的文件内容,验证上传成功
使用以下命令查看文件的内容,确定文件上传成功。
hdfs dfs -cat /ranger/pxf_test_verify.txt
为了确保 YMatrix 能够与 Hadoop 集群进行有效的交互,所有 YMatrix 节点需要配置相关的环境变量。
在每个 YMatrix 节点的 .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
为确保 mxadmin
用户能够访问 Hadoop 集群,需要在所有 Hadoop 节点的 core-site.xml
配置文件中进行相应设置。
编辑 core-site.xml
文件,加入以下配置。
<property>
<name>hadoop.proxyuser.mxadmin.groups</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.mxadmin.hosts</name>
<value>*</value>
</property>
single_hdfs
文件夹(所有 YMatrix 机器添加)在 YMatrix 主节点上创建一个新的文件夹,用于存放 Hadoop 集群的配置文件。
mkdir /usr/local/pxf-matrixdb4/servers/single_hdfs/
将 Hadoop 配置文件传输到 YMatrix 主节点的 PXF 目录。
使用 scp
命令将 Hadoop 配置文件拷贝到 YMatrix 主节点。
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/
pxf-site.xml
文件(YMatrix 主节点创建)在 YMatrix 主节点上创建 PXF 配置文件 pxf-site.xml
,确保 PXF 服务能够正确与 Hadoop 集群连接。
使用以下命令创建并编辑 pxf-site.xml
文件。
vi /usr/local/pxf-matrixdb4/servers/single_hdfs/pxf-site.xml
在文件中添加相应的配置内容。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
</configuration>
core-site.xml
的 fs.defaultFS
配置为 Active NameNode 所在节点 IP,并同步 PXF 配置(YMatrix 主节点执行)配置 core-site.xml
文件中的 fs.defaultFS
属性,以确保 YMatrix 能够正确连接到 Hadoop 集群的 NameNode。
fs.defaultFS
配置。 <property>
<name>fs.defaultFS</name>
<value>hdfs://<namenode_ip>:9000</value>
</property>
pxf cluster sync
PXF 在后台运行时,通过操作系统用户与 HDFS 进行交互,而不是数据库用户。因此,Ranger 中的 HDFS 权限控制时基于操作系统用户的。
core-site.xml
文件填写)在 Ranger 中,Kerberos 和 Simple 的区别是:
Kerberos:使用票证和加密方式进行身份验证,安全性高,适合生产环境,特别是需要跨多个系统进行认证的场景。
Simple:基于用户名和密码的简单验证方式,安全性较低,适合开发或测试环境。
保存服务配置。
注意!
创建完 Service 后,需要重启 Hadoop 的 Ranger Plugin 才能生效!
mxadmin
用户(一)进入“User / Groups”页面
在菜单中,选择 User / Groups,点击 Add New User
(二)创建 mxadmin
用户
在 “User Name” 输入框,填入 mxadmin
,选择 Save 保存用户。
(三)为 mxadmin
用户配置 HDFS 访问权限
在 Ranger 中,转到 hadoop_hdfs 服务,点击 Add New Policy。
配置如下:
Policy Name : test_allow_mxadmin
Resource Path : /ranger/pxf_test_verify.txt
User :
mxadmin
Permissions : read
保存策略。
create database mxadmin;
#切换到mxadmin库
\c mxadmin
在 YMatrix 中启用 PXF 插件,允许 YMatrix 访问 HDFS 数据。
执行以下命令创建 PXF 插件
create extension pxf_fdw;
创建一个外部数据源连接 Hadoop 集群的文件系统。
执行以下 SQL 命令创建 FDW Server:
CREATE SERVER single_hdfs FOREIGN DATA WRAPPER hdfs_pxf_fdw OPTIONS ( config 'single_hdfs' );
配置 YMatrix 用户与 FDW 服务器的映射,执行以下 SQL 命令。
CREATE USER MAPPING FOR mxadmin SERVER single_hdfs;
创建一个外部表,将 HDFS 上的文件映射到 YMatrix 数据库中, 执行以下 SQL 命令创建 Foreign Table:
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 ','
);
当 ranger 配置的是 Deny Conditions
SELECT * FROM pxf_hdfs_verify;
当 ranger 配置的是 Allow Conditions
SELECT * FROM pxf_hdfs_table;