Example HTTP 连接器

Example HTTP 连接器有一个简单目标:通过 HTTP 读取逗号分隔的数据。例如,如果您有大量 CSV 格式的数据,您可以将 Example HTTP 连接器指向这些数据并编写 SQL 查询来处理这些数据。

代码

可以在 openLooKeng 源代码树根目录下的 presto-example-http 目录中找到 Example HTTP 连接器。

插件实现

Example HTTP 连接器中的插件实现与其他插件实现非常相似。大部分实现都聚焦于处理可选配置,唯一相关的函数如下所示:

  1. @Override
  2. public Iterable<ConnectorFactory> getConnectorFactories()
  3. {
  4. return ImmutableList.of(new ExampleConnectorFactory());
  5. }

请注意,ImmutableList 类是 Guava 提供的一个实用程序类。

与所有连接器一样,该插件会覆盖 getConnectorFactories() 方法并返回一个 ExampleConnectorFactory

ConnectorFactory Implementation

在 openLooKeng 中,处理 openLooKeng 与特定类型数据源之间连接的主要对象是 Connector 对象,该对象是使用 ConnectorFactory 创建的。

ExampleConnectorFactory 中提供了该实现。连接器工厂实现所做的第一件事是指定该连接器的名称。这是用于在 openLooKeng 配置中引用此连接器的同一字符串。

  1. @Override
  2. public String getName()
  3. {
  4. return "example-http";
  5. }

连接器工厂的实际工作在 create() 方法中执行。在 ExampleConnectorFactory 类中,create() 方法配置连接器,然后请求 Guice 创建对象。以下是不含参数校验和异常处理的 create() 方法的内容:

  1. // A plugin is not required to use Guice; it is just very convenient
  2. Bootstrap app = new Bootstrap(
  3. new JsonModule(),
  4. new ExampleModule(catalogName));
  5. Injector injector = app
  6. .strictConfig()
  7. .doNotInitializeLogging()
  8. .setRequiredConfigurationProperties(requiredConfig)
  9. .initialize();
  10. return injector.getInstance(ExampleConnector.class);

连接器:ExampleConnector

该类使 openLooKeng 能够获取对连接器提供的各种服务的引用。

元数据:ExampleMetadata

该类负责报告表名、表元数据、列名、列元数据以及有关该连接器提供的模式的其他信息。openLooKeng 还调用 ConnectorMetadata 来确保特定的连接器能够理解和处理给定的表名。

ExampleMetadata 实现将许多此类调用委托给 ExampleClient,该类可以实现连接器的大部分核心功能。

分片管理器: ExampleSplitManager

分片管理器将表的数据分区成多个块,这些块由 openLooKeng 分发至工作节点进行处理。对于 Example HTTP 连接器,每个表都包含一个或多个指向实际数据的 URI。系统针对每个 URI 创建一个分片。

记录集提供程序:ExampleRecordSetProvider

记录集提供程序创建一个记录集,后者又相应地创建一个向 openLooKeng 返回实际数据的记录游标。ExampleRecordCursor 通过 HTTP 从 URI 读取数据。每一行对应于单个记录行。行通过逗号拆分为各个字段值,然后这些字段值返回至 openLooKeng。