数据湖Iceberg-Hive集成Iceberg(3)

news2024/9/21 4:29:14

文章目录

  • Hive集成Iceberg
    • 环境准备
      • Hive与Iceberg的版本对应关系如下
      • 上传jar包,拷贝到Hive的auxlib目录中
      • 修改hive-site.xml,添加配置项
      • 启动 HMS 服务
      • 启动 Hadoop
    • 创建和管理 Catalog
      • 默认使用 HiveCatalog
      • 指定 Catalog 类型
        • 使用 HiveCatalog
        • 使用 HadoopCatalog
        • 指定路径加载
    • 基本操作
      • 创建表
        • 创建外部表
        • 创建内部表
        • 创建分区表
      • 修改表
      • 插入表
      • 删除表
  • Hive集成Iceberg-Ambari2.7.5(该版本无法集成Iceberg,记录了集成失败过程)
    • 版本
      • 上传jar包,拷贝到Hive MeataStore服务所在机器的/opt/hive/iceberglib目录中
      • 修改hive-site.xml,添加配置项
      • 可能遇到的问题
        • 创建表提示 Error: Error while compiling statement: FAILED: SemanticException Cannot find class 'org.apache.iceberg.mr.hive.HiveIcebergStorageHandler' (state=42000,code=40000)
        • 不兼容-insert数据后查询不到,在HDFS中也看不到快照等文件

数据湖Iceberg-简介(1)
数据湖Iceberg-存储结构(2)
数据湖Iceberg-Hive集成Iceberg(3)
数据湖Iceberg-SparkSQL集成(4)
数据湖Iceberg-FlinkSQL集成(5)
数据湖Iceberg-FlinkSQL-kafka类型表数据无法成功写入(6)
数据湖Iceberg-Flink DataFrame集成(7)

Hive集成Iceberg

环境准备

Hive与Iceberg的版本对应关系如下

Hive版本官方推荐Hive版本Iceberg版本
2.x2.3.80.8.0-incubating~1.1.0
3.x3.1.20.10.0~1.1.0

Iceberg与Hive 2和Hive 3的集成,支持以下特性:

  • 创建表
  • 删除表
  • 读取表
  • 插入表(INSERT into)

更多功能需要Hive 4.x(目前alpha版本)才能支持。

上传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.enabled</name>
    <value>true</value>
</property>

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

使用TEZ引擎注意事项:

  • 使用Hive版本>=3.1.2,需要TEZ版本>=0.10.1

  • 指定tez更新配置:

    <property>
      <name>tez.mrreader.config.update.properties</name>
      <value>hive.io.file.readcolumn.names,hive.io.file.readcolumn.ids</value>
    </property>
    
  • 从Iceberg 0.11.0开始,如果Hive使用Tez引擎,需要关闭向量化执行:

    <property>
      <name>hive.vectorized.execution.enabled</name>
      <value>false</value>
    </property>
    

启动 HMS 服务

启动 Hadoop

创建和管理 Catalog

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

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

  • 没有设置iceberg.catalog,默认使用HiveCatalog

  • 设置了 iceberg.catalog的类型,使用指定的Catalog类型,如下表格

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

默认使用 HiveCatalog

CREATE TABLE iceberg_test1 (i int) 
STORED BY 'org.apache.iceberg.mr.hive.HiveIcebergStorageHandler';
 
INSERT INTO iceberg_test1 values(1);

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

指定 Catalog 类型

使用 HiveCatalog

set iceberg.catalog.iceberg_hive.type=hive;
set iceberg.catalog.iceberg_hive.uri=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);

使用 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中创建Icerberg格式表指定对应的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');

基本操作

创建表

创建外部表

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

describe formatted iceberg_create1;

创建内部表

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

describe formatted iceberg_create2;

创建分区表

CREATE EXTERNAL TABLE iceberg_create3 (id int,name string)
PARTITIONED BY (age int)
STORED BY 'org.apache.iceberg.mr.hive.HiveIcebergStorageHandler';

describe formatted iceberg_create3;

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

修改表

只支持HiveCatalog表修改表属性,Iceberg表属性和Hive表属性存储在HMS中是同步的。

ALTER TABLE iceberg_create1 SET TBLPROPERTIES('external.table.purge'='FALSE');

插入表

支持标准单表INSERT INTO操作

INSERT INTO iceberg_create2 VALUES (1);
INSERT INTO iceberg_create1 select * from iceberg_create2;

在HIVE 3.x中,INSERT OVERWRITE虽然能执行,但其实是追加。

删除表

DROP TABLE iceberg_create1;

Hive集成Iceberg-Ambari2.7.5(该版本无法集成Iceberg,记录了集成失败过程)

版本

Hive:3.1.0

Tez:0.9.1

Iceberg:1.1.0

上传jar包,拷贝到Hive MeataStore服务所在机器的/opt/hive/iceberglib目录中

[root@bigdata-24-199 iceberglib]# pwd
/opt/hive/iceberglib
[root@bigdata-24-199 iceberglib]# ls
iceberg-hive-runtime-1.1.0.jar  libfb303-0.9.3.jar

修改hive-site.xml,添加配置项

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

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

在Ambari中配置hive(Ambari版本中必须配置这一步,不然后续创建表提示招不到类)

在这里插入图片描述

修改hive-interactive-env template和hive-env template中搜索HIVE_AUX_JARS_PATH,被配置我们引用的包

export HIVE_AUX_JARS_PATH=/usr/hdp/current/hive-server2/lib/hive-hcatalog-core.jar:/opt/hive/iceberglib/iceberg-hive-runtime-1.1.0.jar:/opt/hive/iceberglib/libfb303-0.9.3.jar

在这里插入图片描述

在这里插入图片描述

从Iceberg 0.11.0开始,如果Hive使用Tez引擎,需要关闭向量化执行:

<property>
  <name>hive.vectorized.execution.enabled</name>
  <value>false</value>
</property>

保存重启

在这里插入图片描述

可能遇到的问题

创建表提示 Error: Error while compiling statement: FAILED: SemanticException Cannot find class ‘org.apache.iceberg.mr.hive.HiveIcebergStorageHandler’ (state=42000,code=40000)

通过set hive.aux.jars.path;命令查看是否配置成功

0: jdbc:hive2://bigdata-24-199:2181,bigdata-2> set hive.aux.jars.path;
+----------------------------------------------------+
|                        set                         |
+----------------------------------------------------+
| hive.aux.jars.path=file:///usr/hdp/current/hive-webhcat/share/hcatalog/hive-hcatalog-core.jar |
+----------------------------------------------------+
1 row selected (0.836 seconds)

发现没有我们配置的jar包

说明我们之前配置没有生效,原因为:Ambari配置hive.aux.jars.path方式不同

配置方法:

  • 1.hive添加第三方jar包

  • 2.上传jar包,添加到hive-server所在服务器

  • 3.在Ambari>hive>config中
    的hive-interactive-env template和hive-env template中搜索HIVE_AUX_JARS_PATH,被配置我们引用的包

    HIVE_AUX_JARS_PATH=/usr/hdp/current/hive-server2-hive2/lib/hive-hcatalog-core.jar:/usr/hdp/current/hive-server2-hive2/lib/hive-udf.jar
    

在这里插入图片描述

在这里插入图片描述

  • 4.重启服务,解决问题

不兼容-insert数据后查询不到,在HDFS中也看不到快照等文件

执行 INSERT INTO iceberg_test1 values(1);添加数据后

执行查询看不到数据

0: jdbc:hive2://bigdata-24-199:2181,bigdata-2> select * from iceberg_test1;
INFO  : Compiling command(queryId=hive_20230413105058_0937e14c-613a-43ce-ba17-18a6601f044c): select * from iceberg_test1
INFO  : Semantic Analysis Completed (retrial = false)
INFO  : Returning Hive schema: Schema(fieldSchemas:[FieldSchema(name:iceberg_test1.i, type:int, comment:null)], properties:null)
INFO  : Completed compiling command(queryId=hive_20230413105058_0937e14c-613a-43ce-ba17-18a6601f044c); Time taken: 7.631 seconds
INFO  : Executing command(queryId=hive_20230413105058_0937e14c-613a-43ce-ba17-18a6601f044c): select * from iceberg_test1
INFO  : Completed executing command(queryId=hive_20230413105058_0937e14c-613a-43ce-ba17-18a6601f044c); Time taken: 0.027 seconds
INFO  : OK
+------------------+
| iceberg_test1.i  |
+------------------+
+------------------+
No rows selected (7.953 seconds)

查看HDFS存储该表的路径发现,数据文件在里面,metadata.json文件在里面,但是快照文件没有(文件接口可以查看文章:数据湖Iceberg-存储结构(2))暂时无法解决

[hdfs@bigdata-24-199 ~]$ hdfs dfs -ls /warehouse/tablespace/managed/hive/iceberg_test1
Found 2 items
drwx------+  - hive hadoop          0 2023-04-13 10:37 /warehouse/tablespace/managed/hive/iceberg_test1/data
drwx------+  - hive hadoop          0 2023-04-13 09:50 /warehouse/tablespace/managed/hive/iceberg_test1/metadata
[hdfs@bigdata-24-199 ~]$ hdfs dfs -ls /warehouse/tablespace/managed/hive/iceberg_test1/data
Found 2 items
-rw-rw----+  3 hive hadoop        404 2023-04-13 10:36 /warehouse/tablespace/managed/hive/iceberg_test1/data/00000-0-hive_20230413103536_153504ef-df11-4744-adf8-6148912f484d-job_1681281011930_0005-00001.parquet
-rw-rw----+  3 hive hadoop        404 2023-04-13 10:37 /warehouse/tablespace/managed/hive/iceberg_test1/data/00000-0-hive_20230413103726_6d188296-1ea0-453d-bc00-54f98cd97ee6-job_1681281011930_0005-00001.parquet
[hdfs@bigdata-24-199 ~]$ hdfs dfs -ls /warehouse/tablespace/managed/hive/iceberg_test1/metadata
Found 1 items
-rw-rw----+  3 hive hadoop       1359 2023-04-13 09:50 /warehouse/tablespace/managed/hive/iceberg_test1/metadata/00000-d21b6e4e-636a-45ec-a3a5-805a8b99ffc2.metadata.json

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/459432.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HTML+CSS+JS 学习笔记(三)———Javascript(下)

&#x1f331;博客主页&#xff1a;大寄一场. &#x1f331;系列专栏&#xff1a;前端 &#x1f331;往期回顾&#xff1a;HTMLCSSJS 学习笔记&#xff08;三&#xff09;———Javascript(上) &#x1f618;博客制作不易欢迎各位&#x1f44d;点赞⭐收藏➕关注 目录 JavaScrip…

【ChatGPT】如何让 ChatGPT 不再频繁报错,获取更加稳定的体验?

文章目录 一、问题描述二、方案1&#xff1a;使用 OpenAI API Key 来访问 ChatGPT三、方案2&#xff1a;安装 Chrome 插件3.1 介绍3.2 安装步骤3.2.1 插件 & 脚本安装3.2.2 解读功能 一、问题描述 最近一段时间&#xff0c;相信大家都发现了 ChatGPT 一个问题&#xff0c;…

阿里二面:Spring用到了哪些设计模式?

代理模式 所谓代理&#xff0c;是指它与被代理对象实现了相同的接口&#xff0c;客户端必须通过代理才能与被代理的目标类进行交互&#xff0c;而代理一般在交互的过程中&#xff08;交互前后&#xff09;&#xff0c;进行某些特定的处理&#xff0c;比如在调用这个方法前做前…

计算机网络|第二章:应用层

分层体系结构回顾 在本章中&#xff0c;我们学习有关网络应用的原理和实现方面的知识。 我们从定义关键的应用层概念开始&#xff0c;其中包括应用程序所需要的网络服务、客户和服务器、进程和运输层接口。详细考察几种网络应用程序&#xff0c;包括Web、电子邮件、DNS、对等文…

工业一体机在CNC机台起到什么作用?

随着工业自动化的不断发展&#xff0c;CNC机床已经成为现代制造业的重要设备之一。而工业一体机在CNC机台则是CNC机床的一种新型形态&#xff0c;其具有全封闭式设计、高精度、高效率等特点&#xff0c;广泛应用于各种制造行业。 全封闭工业一体机 一、工业一体机的功能&#x…

部门来了个软件测试工程师,听说是00后,上来一顿操作给我看呆了...

公司新来了个同事&#xff0c;听说大学是学的广告专业&#xff0c;因为喜欢IT行业就找了个培训班&#xff0c;后来在一家小公司实习半年&#xff0c;现在跳槽来我们公司。来了之后把现有项目的性能优化了一遍&#xff0c;服务器缩减一半&#xff0c;性能反而提升4倍!给公司省了…

ArcGIS中加载在线地图系列:风格12

前言&#xff1a; ArcGIS作为最强大的地理数据处理、编辑、制图和地图服务发布、管理等的GIS平台&#xff0c;在不同的专业都可以看到它的身影。对于那些利用GIS信息进行编辑&#xff0c;设计的专业人士来说&#xff0c;其桌面端ArcMap备受欢迎。尤其是在可视化制图方面需求颇…

C++入门(C++)

目录 命名空间 1、命名空间的定义 2、命名空间的使用 1、加名空间名称和作用域限定符 2、使用using namespace 命名空间引入 3、使用using将命名空间中某个成员引入 C的输入与输出 缺省参数 1、缺省参数的概念 2、缺省参数分类 1、全缺省参数 2、半缺省参数 函数重载 1、函数重…

【数据库】索引和事务

目录 1.索引 1.1关于索引 索引是什么&#xff1f; 为什么要有索引&#xff1f; 索引的作用&#xff1f; 索引的优点和缺点&#xff1f; 1.2索引类型及创建 索引的分类 创建索引 1.3索引的数据结构 1.4索引覆盖 2.事务 2.1关于事务 概念 事务的使用 2.2事务的特…

智慧旅游丨“服务+获客”新模式

全面放开的第一个五一小长假即将来临&#xff0c;旅游企业、城市、景点等又将进入流量及经济“升级密码”阶段。目前&#xff0c;传统旅行社在客户服务、运营模式中仍存在诸多痛点&#xff1a; 全面放开后“假期出游潮”日益高涨&#xff0c;佳信针对这些“痛点”问题&#xff…

问题排查记录-ffmpeg链接libavfilter和libavcodec:未定义的引用

目录 一、问题背景 二、问题现象 2.1 ffmpeg测试例程 2.2 编译脚本 2.3 错误提示 三、问题排查 3.1 关于提示找不到“stdio" "iostream"头文件的问题 3.1.1查看工具链头文件检索位置 3.1.2 根据工具链路径查找头文件 3.1.3 在编译脚本中指定头文件路径…

QT QPainter绘图之视口和窗口简介

1、视口和窗口的定义与原理 绘图设备的物理坐标是基本的坐标系&#xff0c;通过 QPainter 的平移、旋转等变换可以得到更容易操作的逻辑坐标。 为了实现更方便的坐标&#xff0c;QPainter 还提供了视口 (Viewport)和窗口 (Window)坐标系&#xff0c;通过QPainter 内部的坐标变…

【多线程】线程安全问题

1. 一段线程不安全的代码 我们先来看一段代码&#xff1a; public class ThreadDemo {public static int count 0;public static void main(String[] args) {for (int i 0; i < 10_0000; i) {count;}System.out.println("count " count);} } // 打印结果&…

Side Window Filtering 边窗滤波

原理分析 通常用常规图像算法做检测类的算法需要将图像特征增强&#xff0c;其中就需要滤波&#xff0c;把噪点去掉&#xff0c;如果直接用滤波&#xff0c;像高斯滤波&#xff0c;中值滤波&#xff0c;均值滤波等等&#xff0c;不仅会把噪点过滤掉&#xff0c;也会把图像的一些…

An error occurred during installation: No such plugin: cloudbees-folder

An error occurred during installation: No such plugin: cloudbees-folder Index of /packages/jenkins/plugins/cloudbees-folder 下载文件【cloudbees-folder.hpi】

Machine Learning-Ex6(吴恩达课后习题)Support Vector Machines

目录 1. Support Vector Machines 1.1 Example Dataset 1 1.2 SVM with Gaussian Kernels 1.2.1 Gaussian Kernel 1.2.2 Example Dataset 2 1.2.3 Example Dataset 3 2. Spam Classification 2.1 Preprocessing Emails 2.1.1 Vocabulary List 2.2 Extracting Feature…

ffmpeg学习发现av_err2str使用报错问题

最近在学习ffmpeg,照着书上敲代码,发现有个av_err2str错误.书上环境是linux系统的,我使用的windows系统编译器使用的是VS2015.可能是微软的编译器和GCC编译器不太一样这个宏函数用不了. 会报这个错误. 网上找资料超级少,找到一个类似的按照上面修改ffmpeg代码.上面的错误没有了…

Java——装箱和拆箱

一.装箱和拆箱的概念 基本数据(Primitive)类型的自动装箱(autoboxing)、拆箱(unboxing)是自J2SE 5.0开始提供的功能。Java语言规范中说道&#xff1a;在许多情况下包装与解包装是由编译器自行完成的&#xff08;在这种情况下包装称为装箱&#xff0c;解包装称为拆箱&#xff09…

360文件恢复怎么做?3种文件恢复方法分享!

案例&#xff1a;360文件恢复怎么做&#xff1f; 【为了防止病毒入侵和更好的保护电脑&#xff0c;我在电脑上安装了360杀毒软件&#xff0c;但是我昨天在进行垃圾扫描时&#xff0c;软件把我一个很重要的文件删除了&#xff0c;有没有朋友遇到过这种情况呀&#xff1f;我应该…

高数三重积分+离散二元关系+线代矩阵解线性方程

&#x1f442; 梦寻古镇 - 羽翼深蓝Wings - 单曲 - 网易云音乐 &#x1f442; 老男孩 - 1个球 - 单曲 - 网易云音乐 目录 &#x1f33c;前言 &#x1f33c;高数 &#x1f418;B站 -- 三重积分 &#x1f418;课本 -- 7种曲面 公式 &#x1f418;PPT -- 知识点 例题 &a…