Iceberg从入门到精通系列之二:Iceberg集成Hive

这篇具有很好参考价值的文章主要介绍了Iceberg从入门到精通系列之二:Iceberg集成Hive。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

理解Iceberg核心概念可以阅读博主下面这篇技术博客:

  • Iceberg从入门到精通系列之一:Iceberg核心概念理解

一、Hive引入Iceberg的jar包

拷贝Iceberg的jar包到Hive的auxlib目录中

mkdir auxlib
cp iceberg-hive-runtime-1.1.0.jar /opt/module/hive/auxlib
cp libfb303-0.9.3.jar /opt/module/hive/auxlib

二、修改hive-site.xml

<property>
	<name>iceberg.engine.hive.enable</name>
	<value>true</value>
<property>

<property>
	<name>hive.aux.jars.path</name>
	<value>/opt/module/hive/auxlib</value>
</property>

三、启动hadoop集群

  • 启动hdfs
  • 启动yarn
  • 启动historyserver

四、启动hive元数据服务

Hive的元数据服务是一种存储和管理Hive表格和数据定义的中央服务,它允许用户定义表格、分区和桶等元数据信息,并将其存储在Hive元数据存储库中。Hive元数据服务还提供了一个API,允许用户检索、查询和修改这些元数据信息。Hive元数据服务是Hive的重要组成部分,使用户能够轻松地管理和使用大规模数据集。它还提供了丰富的元数据信息,可以帮助用户优化查询性能,如使用分区和桶来对数据进行分组和排序等。

hive --service metastore

更详细的步骤如下所示:

在启动Hive之前,需要先启动Hadoop的NameNode和DataNode服务。然后,可以通过以下步骤启动Hive元数据服务:

  1. 配置hive-site.xml文件,指定Hive元数据存储库的类型和连接信息。例如,可以使用MySQL数据库作为Hive元数据存储库,需要设置如下属性:
<property>
  <name>javax.jdo.option.ConnectionURL</name>
  <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value>
</property>
<property>
  <name>javax.jdo.option.ConnectionDriverName</name>
  <value>com.mysql.cj.jdbc.Driver</value>
</property>
<property>
  <name>javax.jdo.option.ConnectionUserName</name>
  <value>hive</value>
</property>
<property>
  <name>javax.jdo.option.ConnectionPassword</name>
  <value>hive123</value>
</property>
<property>
  <name>hive.metastore.warehouse.dir</name>
  <value>/user/hive/warehouse</value>
</property>
  1. 启动HiveServer2服务,以提供对Hive的客户端连接,并将Hive元数据服务连接到指定的数据库中。可以使用以下命令启动HiveServer2服务:
hive --service hiveserver2
  1. 启动Hive元数据服务,以提供对Hive元数据存储库的访问。可以使用以下命令启动Hive元数据服务:
hive --service metastore

启动完成后,可以使用Beeline或其他Hive客户端工具连接到HiveServer2服务,并使用Hive元数据服务来管理和查询Hive表格和数据。

五、进入Hive数据库

方式一:直接进入Hive数据库

hive

方式二:
使用Beeline连接到HiveServer2服务,可以使用以下命令:

beeline -u jdbc:hive2://:/dbname -n -p

其中,是HiveServer2服务所在的主机名,是HiveServer2服务监听的端口号,是连接的Hive数据库名,是连接的用户名,是连接的密码。

例如,连接到HiveServer2服务所在的主机名为localhost,端口号为10000,数据库名为default,用户名为hive,密码为hive123的Hive数据库,可以使用以下命令:

beeline -u jdbc:hive2://localhost:10000/default -n hive -p hive123

六、创建和管理Catalog

  • Iceberg支持多种不同的Catalog类型,例如:Hive、Hadoop、亚马逊的AWS Glue和自定义的Catalog

根据不同配置,分为三种情况:

  • 没有设置iceberg.catalog,默认使用HiveCatalog
  • 设置了iceberg.catalog的类型,使用指定的Catalog类型
配置项 说明
iceberg.catalog.<catalog_name>.type Catalog的类型:hive,hadoop,如果使用自定义Catalog,则不设置
iceberg.catalog.<catalog_name>.catalog-impl Catalog的实现类,如果上面的type没有设置,则此参数必须设置
iceberg.catalog.<catalog_name>. Catalog的其他配置项
  • 设置iceberg.catalog=location_based_table,直接通过指定的根路径来加载Iceberg表

七、使用HiveCatalog

创建表

CREATE TABLE iceberg_test (i int)
STORED BY 'org.apache.iceberg.mr.hive.HiveIcebergStorageHandler';

插入数据

INSERT INTO iceberg_test values(1);

查看HDFS可以发现,表目录在默认的hive仓库路径下

查看表

describe iceberg_test1;

查看表的详细信息:

describe formatted iceberg_test1;

创建的表会在hive默认的路径下

<!-- Hive默认在HDFS的工作目录 -->
<property>
	<name>hive.metastore.warehouse.dir</name>
	<value>/user/hive/warehouse</value>
</property>

插入数据

insert into iceberg_test1 values(1);

八、指定Catalog类型HiveCatalog

set iceberg.catalog.iceberg_hive.type=hive;
set iceberg.catalog.iceberg_hive.url=thrift://hadoop1:9083;
set iceberg.catalog.iceberg_hive.clients=10;
set iceberg.catalog.iceberg_hive.warehouse=hdfs://hadoop1:8020/warehouse/iceberg-hive;

创建表

CREATE TABLE iceberg_test2 (i int)
STORED BY 'org.apache.iceberg.mr.hive.HiveIcebergStorageHandler'
TBLPROPERTIES('iceberg.catalog'='iceberg_hive');

INSERT INTO iceberg_test2 values(1);

查看表的详细信息:

describe formatted iceberg_test1;

九、指定Catalog类型HadoopCatalog

set iceberg.catalog.iceberg_hadoop.type=hadoop;
set iceberg.catalog.iceberg_hadoop.warehouse=hdfs://hadoop1:8020/warehouse/iceberg-hadoop

创建表

CREATE TABLE iceberg_test3 (i int)
STORED BY 'org.apache.iceberg.mr.hive.HiveIcebergStorageHandler'
LOCATION 'hdfs://hadoop1:8020/warehouse/iceberg-hadoop/default/iceberg_test3'
TBLPROPERTIES('iceberg.catalog'='iceberg_hadoop');

插入数据

INSERT INTO iceberg_test3 values(1);

十、指定路径加载

如果HDFS中已经存在iceberg格式表,可以通过在Hive中创建iceberg格式表指定对应的location路径映射数据。

CREATE EXTERNAL TABLE iceberg_test4(i int)
STORED BY 'org.apache.iceberg.mr.hive.HiveIcebergStorageHandler'
LOCATION 'hdfs://hadoop1:8020/warehouse/iceberg-hadoop/default/iceberg_test3'
TBLPROPERTIES ('iceberg.catalog'='location_based_table');
  • 加载已经存在的iceberg表iceberg_test3的数据,要求表结构相同,路径定位到表iceberg_test3
  • TBLPROPERTIES (‘iceberg.catalog’=‘location_based_table’);默认值

查询数据

select * from iceberg_test4;
  • 如果创建的表是内部表iceberg_test4,删除表iceberg_test4,会导致iceberg_test3表的数据被删除。
  • 如果创建的表是外部表,删除表iceberg_test4,不会影响表iceberg_test3表的数据。

十一、Hive内部表和外部表的区别

补充Hive内部表和外部表的区别:

在Hive中,内部表和外部表是两种不同的表格类型。

  • 内部表是通过Hive自己的存储格式存储在Hive仓库目录下的表格,其数据和元数据都由Hive管理。数据和表格的定义存储在Hive仓库的目录结构中。内部表有一个默认的存储位置,当用户删除表格时,Hive会删除表格的数据和元数据。
  • 外部表是基于现有数据文件或表格的定义创建的Hive表格。外部表的数据和元数据都保存在外部数据源中,Hive只是指向这些数据源,并提供表格的结构,作为对数据源的抽象表示。当用户删除外部表时,只有元数据被删除,而不会删除实际的存储数据。

因此,内部表和外部表的主要区别在于数据和元数据的存储位置和管理方式。内部表由Hive管理数据和元数据,而外部表只由Hive管理元数据,实际的存储数据由外部数据源维护。文章来源地址https://www.toymoban.com/news/detail-653132.html

到了这里,关于Iceberg从入门到精通系列之二:Iceberg集成Hive的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Iceberg从入门到精通系列之八:flink sql 创建Iceberg表

    建表命令支持最常用的flink建表语法,包括: PARTITION BY(column1,column2,…):配置分区,apache flink不支持隐藏分区。 COMMENT ‘table document’:指定表的备注 WITH(‘key’=‘value’,…):设置表属性

    2024年02月11日
    浏览(66)
  • Iceberg从入门到精通系列之十一:Flink DataStream读取Iceberg表

    streaming(false) :false batch方式 streaming(true):true streaming方式

    2024年02月12日
    浏览(47)
  • Iceberg从入门到精通系列之三:创建Iceberg表、修改表结构、插入数据、删除表

    Hive语法创建分区表,不会在元数据创建分区,而是将分区数据转换为Iceberg标识分区。 这种情况下不能使用Iceberg的分区转换,例如:days(timestamp),如果想要使用Iceberg格式表的分区转换标识分区,需要使用Spark或者Flink引擎创建表。 只支持HiveCatalog表修改表属性,Iceberg表属性和

    2024年02月11日
    浏览(89)
  • Iceberg从入门到精通系列之十八:一篇文章深入了解Flink对Iceberg的支持

    Apache Iceberg 支持 Apache Flink 的 DataStream API 和 Table API。 功能支持 Flink 注意事项 SQL create catalog ✔️ SQL create database ✔️ SQL create table ✔️ SQL create table like ✔️ SQL alter table ✔️ 仅支持更改表属性,不支持列和分区更改 SQL drop_table ✔️ SQL select ✔️ 支持流式和批处理模式 SQ

    2024年02月16日
    浏览(51)
  • Iceberg从入门到精通系列之十:flink sql往Iceberg表插入数据,Batch模式和Streaming模式查询数据

    仅支持Flink的Batch模式 当将数据写入v2表格时,Iceberg支持基于主键的UPSERT。有两种方法可以启用upsert。 建表时指定 UPSERT模式下,如果对表进行分区,则分区字段必须是主键。 Batch模式: Streaming模式: 从当前快照读取所有记录,然后从该快照读取增量数据 读取指定快照id(不包

    2024年02月12日
    浏览(50)
  • Iceberg从入门到精通系列之七:Flink SQL创建Catalog

    type:必须是iceberg catalog-type:内置了hive和hadoop两种catalog,也可以使用catalog-impl来自定义catalog。 catalog-impl:自定义catalog实现的全限定类名。如果未设置catalog-type,则必须设置。 property-version:描述属性版本的版本号。此属性可用于向后兼容,以防属性格式更改。当前属性版本

    2024年02月11日
    浏览(58)
  • 数据湖Iceberg-FlinkSQL集成(5)

    数据湖Iceberg-简介(1) 数据湖Iceberg-存储结构(2) 数据湖Iceberg-Hive集成Iceberg(3) 数据湖Iceberg-SparkSQL集成(4) 数据湖Iceberg-FlinkSQL集成(5) 数据湖Iceberg-FlinkSQL-kafka类型表数据无法成功写入(6) 数据湖Iceberg-Flink DataFrame集成(7) Flink与Iceberg的版本对应关系如下 Flink 版本 Iceberg 版本 1.11 0.9.0 –

    2023年04月26日
    浏览(36)
  • 第二章 Flink集成Iceberg的集成方式及基本SQL使用

    注意事项:一般都是用基于Flink的Hive Catalog,使用HMS存储表模型数据 1、集成方式 (1)下载jar包 下载地址 (2)启动FlinkSQL ①StandLone模式启动 ②Flink On Yarn模式启动 2、基本使用 2.1、创建catalog 核心:可创建hive、hadoop、自定义等目录,创建模板如下 type : 必须的 iceberg 。(必需

    2024年02月08日
    浏览(41)
  • 数据湖Iceberg介绍和使用(集成Hive、SparkSQL、FlinkSQL)

    概述 为了解决数据存储和计算引擎之间的适配的问题,Netflix开发了Iceberg,2018年11月16日进入Apache孵化器,2020 年5月19日从孵化器毕业,成为Apache的顶级项目。 Iceberg是一个面向海量数据分析场景的 开放表格式(Table Format) 。表格式(Table Format)可以理解为 元数据以及数据文

    2024年02月10日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包