Hive连接器GCS教程

预先步骤

保证访问GCS

Hadoop Cloud Storage连接器使得访问Cloud Storage数据成为可能。

如果数据是公开的,则无需任何操作。但是在大多数情况下,数据不是公开的,openLooKeng集群需要能够访问这些数据。这通常通过创建具有访问数据权限的服务账号来实现。可以在GCP中的服务账号页面上进行此操作。创建服务账号后,需要为其创建密钥,并下载JSON格式的密钥。

Hive连接器配置

另一个要求是已经在openLooKeng中启用并配置Hive连接器。连接器使用Hive元存储进行数据发现,不限于HDFS上的数据。

配置Hive连接器

  • Hive元存储地址:

    • GCP上的新Hive元存储:

      如果openLooKeng节点是由GCP提供的,那么Hive元存储也应该在GCP上,以将延迟和成本最小化。在GCP上创建新的Hive元存储的最简单方法是创建一个可以从openLooKeng集群访问的小型Cloud DataProc集群(1个主机,0个工作节点)。完成此步骤后,按照现有Hive元存储的步骤进行操作。

    • 现有Hive元存储:

      要使用通过openLooKeng集群使用现有Hive元存储,需要将Hive目录属性文件中的hive.metastore.uri属性设置为thrift://${METASTORE_ADDRESS}:${METASTORE_THRIFT_PORT}。如果元存储使用身份验证,请参考Hive安全配置

  • GCS访问:

    下面是可以在Hive目录属性文件中设置的所有GCS配置属性的示例值:

    1. # JSON key file used to access Google Cloud Storage
    2. hive.gcs.json-key-file-path=/path/to/gcs_keyfile.json
    3. # Use client-provided OAuth token to access Google Cloud Storage
    4. hive.gcs.use-access-token=false

Hive元存储配置信息

如果Hive元存储使用StorageBasedAuthorization,那么还需要访问GCS来执行POSIX权限检查。为Hive配置GCS访问不在本教程的范围内。以下是有一些优秀的在线指南:

GCS访问通常在core-site.xml中配置,供所有使用Apache Hadoop的组件使用。

Hadoop的GCS连接器提供了一个Hadoop FileSystem的实现。遗憾的是,GCS IAM权限没有映射到Hadoop FileSystem所需的POSIX权限,因此GCS连接器呈现的是伪POSIX文件权限。

当Hive元存储访问GCS时,默认情况下,它将看到伪POSIX权限等于0700。如果openLooKeng和Hive元存储以不同的用户运行,会导致Hive元存储拒绝openLooKeng的数据访问。有两种可能的解决方案:

  • 使用同一个用户运行openLooKeng服务和Hive服务。
  • 确保Hive GCS配置包含一个值为777的属性fs.gs.reported.permissions

openLooKeng首次访问GCS数据

访问Hive元存储中已映射的数据

如果从Hive迁移到openLooKeng,则GCS数据可能已经映射到了元存储中的SQL表。在这种情况下,应该能够查询到GCS数据。

访问Hive元存储中尚未映射的数据

要访问Hive元存储中尚未映射的GCS数据,需要提供数据的模式、文件格式和数据位置。例如,如果在GCS桶my_bucket中有ORC或Parquet文件,则需要执行一个查询:

  1. -- select schema in which the table will be defined, must already exist
  2. USE hive.default;
  3. -- create table
  4. CREATE TABLE orders (
  5. orderkey bigint,
  6. custkey bigint,
  7. orderstatus varchar(1),
  8. totalprice double,
  9. orderdate date,
  10. orderpriority varchar(15),
  11. clerk varchar(15),
  12. shippriority integer,
  13. comment varchar(79)
  14. ) WITH (
  15. external_location = 'gs://my_bucket/path/to/folder',
  16. format = 'ORC' -- or 'PARQUET'
  17. );

现在应该能够查询新映射的表:

  1. SELECT * FROM orders;

使用openLooKeng写入GCS数据

前提条件

在尝试向GCS写入数据之前,请确保已完成从GCS读取数据所需的所有配置。

创建导出模式

如果Hive元存储包含映射到GCS位置的模式,则可以使用这些模式将数据导出到GCS。如果不想使用现有的模式(或者Hive元存储中没有合适的模式),则需要创建一个新的模式:

  1. CREATE SCHEMA hive.gcs_export WITH (location = 'gs://my_bucket/some/path');

将数据导出到GCS

在拥有了一个指向要导出数据的位置的模式后,就可以使用CREATE TABLE AS语句来发出导出,并选择所需的文件格式。数据将写入gs://my_bucket/some/path/my_table命名空间内的一个或多个文件。

示例:

  1. CREATE TABLE hive.gcs_export.orders_export
  2. WITH (format = 'ORC')
  3. AS SELECT * FROM tpch.sf1.orders;