Paimon——官网阅读:文件系统
文件系统(Filesystems)
概述
Apache Paimon 使用与 Apache Flink 相同的可插拔文件系统。如果使用 Flink 作为计算引擎,用户可以遵循标准的插件机制来配置插件结构。然而,对于像 Spark 或 Hive 这样的其他引擎,(Flink 提供的)可选 jar 包可能会产生冲突,无法直接使用。解决类冲突对用户来说并不方便,因此 Paimon 提供了自包含且与引擎无关的统一文件系统可插拔 jar 包,方便用户从 Spark/Hive 端查询表。
支持的文件系统
文件系统 | URI 方案 | 可插拔 | 描述 |
---|---|---|---|
本地文件系统 | file:// | 否 | 内置支持 |
HDFS | hdfs:// | 否 | 内置支持,确保集群处于 Hadoop 环境中 |
阿里云 OSS | oss:// | 是 | |
S3 | s3:// | 是 |
依赖
我们建议你直接下载 jar 包:下载链接。
你也可以从源代码手动构建捆绑 jar 包。
要从源代码构建,克隆 git 仓库。
使用以下命令构建阴影 jar 包:
mvn clean install -DskipTests
你可以在 ./paimon-filesystems/paimon-${fs}/target/paimon-${fs}-0.9.0.jar
路径下找到阴影 jar 包。
拓展:
可插拔文件系统的重要性:在大数据生态系统中,不同的计算引擎(如Flink、Spark、Hive等)常常需要与多种文件系统进行交互。可插拔文件系统允许用户根据实际需求灵活选择和配置适合的文件系统,以优化数据存储和处理性能。例如,在处理大规模数据时,可能选择分布式文件系统如HDFS以获得高容错性和扩展性;对于云环境中的数据存储,可能使用云存储文件系统如阿里云OSS或AWS S3。这种灵活性使得系统能够适应不同的应用场景和数据特征。
类冲突问题及解决方案:当不同计算引擎使用Flink提供的可选jar包时出现类冲突,这是因为不同引擎可能依赖相同类的不同版本。Paimon提供自包含且与引擎无关的统一文件系统可插拔jar包,通过将所需类打包在一个独立的jar中,避免了类冲突。这简化了用户在不同引擎环境下的配置工作,提高了系统的兼容性和易用性。在实际应用中,例如在一个混合使用Spark和Flink的大数据平台中,使用Paimon提供的统一jar包可以确保两个引擎都能顺利访问和处理存储在不同文件系统中的数据,而无需复杂的类路径调整和版本协调。
构建阴影jar包:阴影(shaded)jar包将所有依赖的类打包到一个单独的jar中,避免了在运行时因类路径冲突导致的问题。使用
mvn clean install -DskipTests
命令构建阴影jar包时,mvn clean
用于清理之前构建生成的文件,确保构建环境干净;install
将构建好的jar包安装到本地Maven仓库;-DskipTests
则跳过测试阶段,加快构建过程。这在开发和部署过程中非常有用,特别是当依赖关系复杂或测试环境不易配置时,可以快速获得一个可部署的jar包。
HDFS
访问HDFS无需任何额外依赖,因为你已经处理好了Hadoop依赖。
HDFS 配置
对于HDFS而言,最重要的是能够读取HDFS配置。
Flink/Trino/JavaAPI 如果处于Hadoop环境中,你可能无需做任何额外操作。否则,可选择以下方式之一来配置HDFS:
-
设置环境变量
HADOOP_HOME
或HADOOP_CONF_DIR
。 -
在Paimon目录中配置
'hadoop-conf-dir'
。 -
通过Paimon目录中的前缀
'hadoop.'
来配置Hadoop选项。
建议采用第一种方法。
如果你不想包含环境变量的值,可以将 hadoop-conf-loader
配置为选项。
Hive/Spark Hadoop兼容文件系统(HCFS) 当Hadoop库位于类路径中时,所有Hadoop文件系统会自动可用。
通过这种方式,Paimon无缝支持所有实现 org.apache.hadoop.fs.FileSystem
接口的Hadoop文件系统,以及所有Hadoop兼容文件系统(HCFS)。例如:
-
HDFS
-
Alluxio(详见以下配置细节)
-
XtreemFS
-
……
Hadoop配置必须在 core-site.xml
文件中有针对所需文件系统实现的条目。
要支持Alluxio,需在 core-site.xml
文件中添加以下条目:
<property><name>fs.alluxio.impl</name><value>alluxio.hadoop.FileSystem</value>
</property>
Kerberos
Flink:建议使用Flink Kerberos Keytab
Spark:建议使用Spark Kerberos Keytab
Hive:一种直观的方法是配置 Hive 的 Kerberos 身份验证。
Trino/JavaAPI:在你的目录配置中配置以下三个选项:
-
security.kerberos.login.keytab
:包含用户凭据的 Kerberos 密钥表文件的绝对路径。请确保将其复制到每台机器上。 -
security.kerberos.login.principal
:与密钥表关联的 Kerberos 主体名称。 -
security.kerberos.login.use-ticket-cache
:布尔值,指示是否从 Kerberos 票据缓存中读取。
对于 Java API:SecurityContext.install(catalogOptions);
HDFS HA(高可用)
确保 hdfs-site.xml
和 core-site.xml
包含必要的HA配置。
HDFS ViewFS
确保 hdfs-site.xml
和 core-site.xml
包含必要的ViewFs配置。
拓展:
HDFS配置方式差异及影响:对于不同的计算框架(Flink/Trino/JavaAPI、Hive/Spark),HDFS的配置方式有所不同。在Flink/Trino/JavaAPI中,通过环境变量、目录配置或前缀配置来读取HDFS配置,这为开发者提供了多种灵活的配置选择,以适应不同的部署环境。而在Hive/Spark中,依赖于Hadoop库在类路径中的可用性,这种方式相对简洁,但对环境的一致性要求较高。例如,在一个多框架混合部署的大数据平台中,Flink应用可能部署在不同的节点,通过设置
HADOOP_HOME
或HADOOP_CONF_DIR
环境变量,可以方便地针对不同节点的HDFS配置进行调整;而Hive/Spark应用在相同的集群环境下,只要Hadoop库路径正确,就能自动识别并使用HDFS。Hadoop兼容文件系统(HCFS)的优势:Paimon无缝支持所有HCFS,这极大地拓展了其存储适配能力。以Alluxio为例,它是一个分布式内存文件系统,能够在HDFS等底层存储之上提供高性能的缓存层。Paimon通过支持Alluxio,可以利用其缓存加速数据访问,提升处理性能。在大数据分析场景中,频繁访问的热数据可以缓存在Alluxio中,减少对HDFS的直接读取压力,从而提高整个数据分析流程的效率。
Kerberos、HDFS HA及ViewFS的重要性:Kerberos用于安全认证,在企业级大数据环境中,数据的安全性至关重要,通过Flink Kerberos Keytab等方式进行认证,可以确保只有授权的用户和应用能够访问HDFS数据。HDFS HA配置则保证了HDFS的高可用性,通过冗余的NameNode等机制,防止单点故障,确保数据的持续可用。HDFS ViewFS提供了一种逻辑文件系统视图,允许用户将多个物理文件系统挂载到一个统一的命名空间下,方便数据管理和访问。例如,在一个大型企业的数据仓库中,不同部门的数据可能存储在不同的物理HDFS集群上,通过ViewFS可以将这些数据整合到一个逻辑视图中,方便数据分析师进行统一查询和分析。
OSS
下载 paimon-oss-0.9.0.jar
Flink
如果你已经通过Flink(经由Flink文件系统)配置好了OSS访问,那么此处你可以跳过以下配置。
将paimon-oss-0.9.0.jar放入Flink主目录的lib文件夹中,然后创建目录:
CREATE CATALOG my_catalog WITH ('type' = 'paimon','warehouse' = 'oss://<bucket>/<path>','fs.oss.endpoint' = 'oss-cn-hangzhou.aliyuncs.com','fs.oss.accessKeyId' = 'xxx','fs.oss.accessKeySecret' = 'yyy'
);
Spark
如果你已经通过Spark(经由Hadoop文件系统)配置好了OSS访问,那么这里你可以跳过以下配置。
将paimon-oss-0.9.0.jar和paimon-spark-0.9.0.jar一起放在Spark的jars目录下,然后像这样启动:
spark-sql \ --conf spark.sql.catalog.paimon=org.apache.paimon.spark.SparkCatalog \--conf spark.sql.catalog.paimon.warehouse=oss://<bucket>/<path> \--conf spark.sql.catalog.paimon.fs.oss.endpoint=oss-cn-hangzhou.aliyuncs.com \--conf spark.sql.catalog.paimon.fs.oss.accessKeyId=xxx \--conf spark.sql.catalog.paimon.fs.oss.accessKeySecret=yyy
Hive
如果你已经通过Hive(经由Hadoop文件系统)配置好了OSS访问,那么在此处你可以跳过以下配置。
注意:你需要确保Hive元存储能够访问OSS。
将 paimon-oss-0.9.0.jar 与 paimon-hive-connector-0.9.0.jar 一起放置在Hive的auxlib目录下,然后按如下方式启动:
SET paimon.fs.oss.endpoint=oss-cn-hangzhou.aliyuncs.com;
SET paimon.fs.oss.accessKeyId=xxx;
SET paimon.fs.oss.accessKeySecret=yyy;
然后从Hive元存储中读取表,该表可以由Flink或Spark创建,详见“使用Hive元存储的目录”相关内容。
SELECT * FROM test_table;
SELECT COUNT(1) FROM test_table;
Trino
从0.8版本起,paimon-trino使用Trino文件系统作为基本的文件读写系统。我们强烈建议你在Trino中使用Jindo SDK。
你可以在此处找到如何在Trino上配置Jindo SDK。请注意:
-
在解压插件jar包并寻找放置位置时,用paimon替换hive - hadoop2。
-
你可以在paimon.properties中通过配置hive.config.resources来指定core-site.xml。
-
Presto和Jindo使用相同的配置方法。
S3
下载 paimon-s3-0.9.0.jar.
Flink
如果你已经通过Flink(借助Flink文件系统)配置好了S3访问,那么此处你可以跳过以下配置。
将 paimon-s3-0.9.0.jar 放入Flink主目录的lib文件夹中,然后创建目录:
CREATE CATALOG my_catalog WITH ('type' = 'paimon','warehouse' = 's3://<bucket>/<path>','s3.endpoint' = 'your-endpoint-hostname','s3.access-key' = 'xxx','s3.secret-key' = 'yyy'
);
Spark
如果你已经通过Spark(经由Hadoop文件系统)配置好了S3访问,那么在这里你可以跳过以下配置。
将 paimon-s3-0.9.0.jar 和 paimon-spark-0.9.0.jar 一同放在Spark的jars目录下,然后像这样启动:
spark-sql \ --conf spark.sql.catalog.paimon=org.apache.paimon.spark.SparkCatalog \--conf spark.sql.catalog.paimon.warehouse=s3://<bucket>/<path> \--conf spark.sql.catalog.paimon.s3.endpoint=your-endpoint-hostname \--conf spark.sql.catalog.paimon.s3.access-key=xxx \--conf spark.sql.catalog.paimon.s3.secret-key=yyy
Hive
如果你已经通过Hive(经由Hadoop文件系统)配置好了S3访问,那么在此处你可以跳过以下配置。
注意:你需要确保Hive元存储能够访问S3。
将 paimon-s3-0.9.0.jar 与 paimon-hive-connector-0.9.0.jar 一起放在Hive的auxlib目录下,然后像这样启动:
SET paimon.s3.endpoint=your-endpoint-hostname;
SET paimon.s3.access-key=xxx;
SET paimon.s3.secret-key=yyy;
然后从Hive元存储读取表,该表可由Flink或Spark创建,详情见“使用Hive元存储的目录”部分 。
SELECT * FROM test_table;
SELECT COUNT(1) FROM test_table;
Trino
Paimon使用共享的Trino文件系统作为基本的读写系统。
请参考Trino S3相关内容,以在Trino中配置S3文件系统。
S3 兼容对象存储
S3 文件系统还支持使用与 S3 兼容的对象存储,如 MinIO、腾讯云对象存储(COS)和 IBM 云对象存储。只需将端点配置为对象存储服务提供商的地址即可。
s3.endpoint: 你的端点主机名
配置路径风格访问
一些与 S3 兼容的对象存储默认可能未启用虚拟主机风格的寻址方式,例如在使用独立的 MinIO 进行测试时。在这种情况下,你必须提供属性以启用路径风格访问。
s3.path.style.access: true
S3A 性能
为 S3A 文件系统优化性能。
如果你遇到以下异常:
Caused by: org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection from pool.
尝试在目录选项中进行此配置:fs.s3a.connection.maximum=1000
。