集成

Hive

师成师成· 更新于 2026-09-28· 阅读 6 分钟· 0 次阅读

登录后可跨设备保存划线和私人笔记登录

Apache Hive 自 4.0 版本起已支持 Apache Ozone。要使 Hive 能够处理 Ozone 路径,请确保将 ozone-filesystem-hadoop3 JAR 添加到 Hive 的类路径中。

支持的访问协议

Hive 支持以下协议来访问 Ozone 数据:

  • ofs
  • o3fs
  • s3a

支持的副本类型

Hive 兼容以下任一方式配置的 Ozone 桶:

  • RATIS(副本复制)
  • 纠删码

在 Hive 中访问 Ozone 数据

Hive 提供两种方式与 Ozone 中的数据进行交互:

  • 托管表(Managed Tables)
  • 外部表(External Tables)

托管表

在 Ozone 中配置 Hive 数仓目录

要将托管表存储在 Ozone 中,请在 hive-site.xml 配置文件中更新以下属性:

<property>
  <name>hive.metastore.warehouse.dir</name>
  <value>ofs://ozone1/vol1/bucket1/warehouse/</value>
</property>

创建托管表

你可以使用标准的 CREATE TABLE 语句来创建托管表:

CREATE TABLE myTable (
    id INT,
    name STRING
);

向受管表中加载数据

可以从 Ozone 位置将数据加载到 Hive 表中:

LOAD DATA INPATH 'ofs://ozone1/vol1/bucket1/table.csv' INTO TABLE myTable;

指定自定义 Ozone 路径

您可以使用 MANAGEDLOCATION 子句为数据库定义自定义 Ozone 路径:

CREATE DATABASE d1 MANAGEDLOCATION 'ofs://ozone1/vol1/bucket1/data';

在数据库 d1 中创建的表将存储在指定路径下:

ofs://ozone1/vol1/bucket1/data

验证 Ozone 路径

你可以使用以下方式确认 Hive 引用了正确的 Ozone 路径:

SHOW CREATE DATABASE d1;

输出示例:

+----------------------------------------------------+
|                   createdb_stmt                    |
+----------------------------------------------------+
| CREATE DATABASE `d1`                               |
| LOCATION                                           |
|   'ofs://ozone1/vol1/bucket1/external/d1.db'       |
| MANAGEDLOCATION                                    |
|   'ofs://ozone1/vol1/bucket1/data'                 |
+----------------------------------------------------+

外部表

Hive 支持创建外部表,以便查询已存储在 Ozone 中的现有数据。

创建外部表

CREATE EXTERNAL TABLE external_table (
    id INT,
    name STRING
)
LOCATION 'ofs://ozone1/vol1/bucket1/table1';
  • 对于外部表,数据预期由其他工具创建和管理。
  • Hive 按原样查询这些数据。
  • 注意:在 Hive 中删除外部表不会删除相关联的数据。

要为外部表设置默认路径,请在 hive-site.xml 文件中配置以下属性:

<property>
  <name>hive.metastore.warehouse.external.dir</name>
  <value>ofs://ozone1/vol1/bucket1/external/</value>
</property>

此属性用于在未明确提供 LOCATION 时,指定外部表的基目录。

验证外部表路径

要确认表的元数据和位置,请使用:

SHOW CREATE TABLE external_table;

输出示例:

+----------------------------------------------------+
|                   createtab_stmt                   |
+----------------------------------------------------+
| CREATE EXTERNAL TABLE `external_table`(            |
|   `id` int,                                        |
|   `name` string)                                   |
| ROW FORMAT SERDE                                   |
|   'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'  |
| STORED AS INPUTFORMAT                              |
|   'org.apache.hadoop.mapred.TextInputFormat'       |
| OUTPUTFORMAT                                       |
|   'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' |
| LOCATION                                           |
|   'ofs://ozone1/vol1/bucket1/table1'               |
| TBLPROPERTIES (                                    |
|   'bucketing_version'='2',                         |
|   'transient_lastDdlTime'='1734725573')            |
+----------------------------------------------------+

使用 S3A 协议

除了 ofs 之外,Hive 还可以通过 S3 网关,借助 S3A 文件系统访问 Ozone。

更多信息请参阅:

评论

登录后参与评论

正在加载评论…