统一的Catalog API(FLink FLIP-30翻译)

一、动机随着FLink在流处理中的广泛采用,Flink也显示了其在批处理中的潜力。改进Flink的批处理,尤其是在SQL方面的能力,将使Flink在流处理之外得到更多的应用,并为用户提供流和批处理需求的全套解决方案。另一方面,Hive已将其重点放在大数据技术及其完整的生态系统上。对于大多数大数据用户而言,Hive不仅是大数据分析和ETL领域SQL引擎,还是一个数据管理平台,可以在Hive平台上...
摘要由CSDN通过智能技术生成

统一的Catalog API(FLink FLIP-30翻译)

一、动机

随着FLink在流处理中的广泛采用,Flink也显示了其在批处理中的潜力。改进Flink的批处理,尤其是在SQL方面的能力,将使Flink在流处理之外得到更多的应用,并为用户提供流和批处理需求的全套解决方案。

另一方面,Hive已将其重点放在大数据技术及其完整的生态系统上。对于大多数大数据用户而言,Hive不仅是大数据分析和ETL领域SQL引擎,还是一个数据管理平台,可以在Hive平台上,发现,定义和演化数据。也就是说,Hive是Hadoop上大数据事实上的标准。

因此,Flink与Hive生态系统集成势在必行,进一步,FLink可以获得更多的Hive批处理和SQL用户支持。为此,Flink需要与Hive元数据(metadata)和数据(data)集成。

FLink与Hive Metastore集成有两个方面:

1.Hive的meta-object(元数据对象:例如表和视图)可供Flink使用,并且Flink也能够在Hive中创建此类meta-object(元数据对象)

2.使用Hive Metastore作为持久化存储,使Flink的meta-object(元数据对象:表,视图和UDF)持久化。

本文档是Flink和Hive生态系统集成的三个部分之一。不仅涉到FLink与Hive集成,还涉及到重构catalog interface接口,以及TableEnvironment内部catalog及外部catalog规整,长远目标是能够在catalog中,存储批处理和流处理connector连接器信息(不仅仅是Hive,还包括是Kafka, Elasticsearch等连接器)。

二、公共接口

在下一节中可以看到,本文档主要介绍了一组与catalog相关的API,以替换现有的,不完整的和未使用的API。更具体地说,我们提出了一系列接口,用于管理和统一catalog内部的表,视图,函数等,这些接口在要么在外部系统(例如Hive),或者在内部系统(例如Flink内部SQL Client定义YAML文件)。我们还为catalog通常依赖的meta-object(元数据对象)定义了接口,例如表,视图和函数(UDF)。由于Flink允许多个catalog共存于一个用户会话中,因此需要一个管理类CatalogManager,让用户代码更为简洁和方便。简而言之,这些接口主要与SQL和Table API有关。

Catalog可以在客户端程序(例如SQL Client)中配置。因此,我们还支持YAML方式配置Catalog。

三、实现方案(提议)

在当前的Flink代码库中,已经为外部catalog定义了一组接口。但是,这些API尚不稳定,需要适应我们后续的工作计划。

实现方案的层次结构如下:
图1 集成Hive metastore 的整体类图
在图1中,ReadableCatalog、ReadableWritableCatalog和CatalogManager是我们定义的主要接口。其他的只是实现类或接口调用者。

四、ReadableCatalog接口

这个类来自重命名现有的ExternalCatalog 类。删除“External”(外部)关键字的原因是内部和外部之间没有明确的区别,因为外部catalog也可以用于存储Flink的元对象。

我们需要调整现有的API,以容纳其他meta-objects(元数据对象),例如Flink中存在的表和视图,它们在典型的数据库catalog中也很常见。我们还恢复了schema/database概念,而不是非标准的子目录(sub-catalog)术语。

/**
 * All methods in this class can throw a `CatalogException` if the communication
 * fails or the API is not used as intended.
 */
public interface ReadableCatalog {

    /**
     * Open and close methods for establishing or tearing down connections
     * to external systems.
     */
    void open();
    void close();

    /** 
     * Get a table factory instance that can convert catalog tables of this catalog 
     * to sources or sinks. This allows a catalog to provide connectors directly without
     * going through a discovery mechanism. If a table factory isn’t provided, the
     * current discovery mechanism will be used with Java Service Providers.
     */
    Optional<TableFactory> getTableFactory();

    /**
     * List and get instances of databases.
     */
    List<String> listDatabases();

    /**
     * Return information about the database (description, last modified date, etc.).
     * Throw a `DatabaseNotFound` exception if database isn’t found.
     */
    CatalogDatabase getDatabase(String databaseName);

    /**
     * List table names under the given database. Throw a `DatabaseNotFound` exception
     * if database isn’t found.
     */
    List<String> listTables(String databaseName);

    /**
     * List view names under the given database. Throw a `DatabaseNotFound` exception
     * if database isn’t found.
     */
    List<String> listViews(String databaseName);

    /**
     * Returns both physical or virtual tables (aka tables or views).
     */
    CatalogCommonTable getTable(ObjectPath tableOrViewName);

    /**
     * List function names under the given database. Throw a `DatabaseNotFound` exception if 
     * database isn’t found.
     */
    List<String> listFunctions(String databaseName);

    /**
     * Returns a function definition.
     */
    CatalogFunction getFunction(ObjectPath functionName);
}

变更包括:

1、添加open()和close()。它们被添加到ReadableCatalog 接口,以兼容外部连接(external connections)。他们可能需要一些运行时上下文,但是我们暂时不做介绍。

2、添加了view/ UDF相关的读取接口

3、定义了表(table)和视图(view)

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值