Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >0914-7.1.7-如何用Doris创建Hive和Iceberg Catalog

0914-7.1.7-如何用Doris创建Hive和Iceberg Catalog

作者头像
Fayson
发布于 2024-04-10 01:08:16
发布于 2024-04-10 01:08:16
1.1K00
代码可运行
举报
文章被收录于专栏:Hadoop实操Hadoop实操
运行总次数:0
代码可运行

1 文档说明

Doris支持多源数据目录(Multi-Catalog)功能,旨在能够更方便对接外部数据目录,以增强Doris的数据湖分析和联邦数据查询能力。Multi-Catalog 功能在原有的元数据层级上,新增一层Catalog,构成 Catalog -> Database -> Table 的三层元数据层级。其中,Catalog 可以直接对应到外部数据目录。目前支持的外部数据目录包括:Apache Hive, Apache Iceberg 以及标准的JDBC接口(如MySQL)等

  • • 测试环境
  1. 1. CDP7.1.7 SP1、启用Kerberos
  2. 2. Doris 2.0.2

2 操作步骤

2.1 MySQL

创建的Catalog仅支持查询语句

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
所有的BEFE 节点添加JDBC驱动
cd /opt/software/doris/fe/
mkdir jdbc_drivers
cd /opt/software/doris/fe/jdbc_drivers
ln -s /usr/share/java/mysql-connector-java-5.1.46-bin.jar mysql-connector-java.jar
cd /opt/software/doris/be/
mkdir jdbc_drivers
cd /opt/software/doris/be/jdbc_drivers
ln -s /usr/share/java/mysql-connector-java-5.1.46-bin.jar mysql-connector-java.jar

#创建MySQL catalog 
CREATE CATALOG jdbc_mysql_hive PROPERTIES (
    "type"="jdbc",
    "user"="usernanme",
    "password"="password",
    "jdbc_url" = "jdbc:mysql://192.168.0.101:3306/dbname",
    "driver_url" = "mysql-connector-java.jar",
    "driver_class" = "com.mysql.jdbc.Driver"
)

然后执行如下语句进行查询验证,注意:在Doris 的Playground 界面无法切换catalog ,请使用客户端验证

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
show catalogs;
switch jdbc_mysql_hive;
show databases;
use metastore;
select * from TBLS limit 10;

2.2 hive

1、将 core-site.xml,hdfs-site.xml 和 hive-site.xml 放到 FE 和 BE 的 conf 目录下 2、在所有的 BE、FE 节点下放置 krb5.conf 文件和 keytab 认证文件,keytab 认证文件路径和配置保持一致,krb5.conf 文件默认放置在 /etc/krb5.conf 路径。同时需确认JVM参数 -Djava.security.krb5.conf 和环境变量KRB5_CONFIG指向了正确的 krb5.conf 文件的路径。

如下图所示:

下列参数中的hive.metastore.urishive.metastore.sasl.enabledhive.metastore.kerberos.principaldfs.nameservicesdfs.ha.namenodes.nameservice1等参数请以实际集群配置文件core-site.xml,hdfs-site.xml 和 hive-site.xml中的为准。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE CATALOG hive1 PROPERTIES (
    'type'='hms',
    'hive.metastore.uris' = 'thrift://cdp1.macro.com:9083,thrift://cdp2.macro.com:9083',
    'hive.metastore.sasl.enabled' = 'true',
    'hive.metastore.kerberos.principal' = 'hive/_HOST@HADOOP.COM',
    'dfs.nameservices'='nameservice1',
    'dfs.ha.namenodes.nameservice1'='namenode192,namenode118',
    'dfs.namenode.rpc-address.nameservice1.namenode192'='cdp1.macro.com:8020',
    'dfs.namenode.rpc-address.nameservice1.namenode118'='cdp2.macro.com:8020',
    'dfs.client.failover.proxy.provider.nameservice1'='org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider',
    'hadoop.security.authentication' = 'kerberos',
    'hadoop.kerberos.keytab' = '/tmp/hive.keytab',
    'hadoop.kerberos.principal' = 'hive@HADOOP.COM'
);
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
show catalogs;
switch hive1;
show databases;
use cdp_airflow;
select * from order_sink limit 10;

2.3 iceberg

Doris支持使用Iceberg API访问元数据的方式,支持Hadoop File System、Hive、REST、Glue、DLF等服务作为Iceberg的Catalog。注意:如果本身的hive 不支持访问Iceberg表那么,使用该HMS来访问icebreg 表也会在查询的提示不支持。本次测试由于当前hive 不支持访问icebreg 表,如下使用hadoop catalog 访问warehouse是比如spark 中设置的hdaoop catalog 的icebreg 存储路径

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE CATALOG iceberg_hadoop PROPERTIES (
    'type'='iceberg',
    'iceberg.catalog.type' = 'hadoop',
    'warehouse' = 'hdfs://nameservice1/warehouse/hadoop-iceberg',
    'dfs.nameservices'='nameservice1',
    'dfs.ha.namenodes.nameservice1'='namenode192,namenode118',
    'dfs.namenode.rpc-address.nameservice1.namenode192'='cdp1.macro.com:8020',
    'dfs.namenode.rpc-address.nameservice1.namenode118'='cdp2.macro.com:8020',
    'dfs.client.failover.proxy.provider.your-nameservice'='org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider',
    'hadoop.security.authentication' = 'kerberos',
    'hadoop.kerberos.keytab' = '/tmp/hive.keytab',
    'hadoop.kerberos.principal' = 'hive@HADOOP.COM'
);
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
show catalogs;
switch iceberg_hadoop;
show databases;
use db0223;
select * from t3 limit 10;

3 问题总结

3.1 MySQL Couldn't open file mysql-connector-java.jar 异常

通过 MySQL Catalog 连接 MySQL数据库报错, 如果在 show databases 和 show tables 都是没问题的情况下,出现[CANCELLED][HTTP_ERROR]Couldn't open file /opt/software/doris/be/jdbc_drivers/mysql-connector-java.jar 异常,请检查对应的节点在提示的目录如/opt/software/doris/be/jdbc_drivers/ 目录下是否有JDBC驱动

3.2 Hive catalog SIMPLE authentication is not enabled 异常

通过 Hive Catalog 连接 Hive 数据库报错:RemoteException: SIMPLE authentication is not enabled. Available:[TOKEN, KERBEROS]

如果在 show databases 和 show tables 都是没问题的情况下,查询的时候出现上面的错误,我们需要进行下面两个操作:

  1. 1. fe/conf、be/conf 目录下需放置 core-site.xml 和 hdfs-site.xml
  2. 2. BE 节点执行 Kerberos 的 kinit 然后重启 BE ,然后再去执行查询即可。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-04-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Hadoop实操 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
前端成神之路-WebAPIs03
node.removeChild() 方法从 node节点中删除一个子节点,返回删除的节点。
海仔
2020/12/29
3K0
原生 JS DOM 常用操作大全
页面中所有的内容都为节点,节点使用 node 来表示 DOM 树可以把节点划分为不同的层级关系,常见的是父子兄层级关系
FGGIT
2024/10/15
2730
js 事件笔记
在Web中, 事件在浏览器窗口中被触发,执行事先绑定的事件处理器(也就是事件触发时会运行的代码块),对事件做出响应。 用户在浏览器的任何一个操作都会去触发一个事件,JavaScript采用异步事件驱动编程模型,当文档、浏览器、元素或与之相关对象发生特定事情时,浏览器会产生事件。
bamboo
2019/01/29
11.3K0
js 事件笔记
webAPIs02-事件
​ 就是让程序监测是否有事件产生,一旦有事件触发,就立即调用一个函数做出响应,也称为 绑定事件 或者 注册事件。
yuanshuai
2022/08/17
8010
webAPIs01-声明变量、元素、定时器
严格意义上讲,我们在 JavaScript 阶段学习的知识绝大部分属于 ECMAScript 的知识体系,ECMAScript 简称 ES 它提供了一套语言标准规范,如变量、数据类型、表达式、语句、函数等语法规则都是由 ECMAScript 规定的。浏览器将 ECMAScript 大部分的规范加以实现,并且在此基础上又扩展一些实用的功能,这些被扩展出来的内容我们称为 Web APIs。
yuanshuai
2022/08/17
8060
webAPIs01-声明变量、元素、定时器
JS快速入门(二)
和 innerHTML 类似,写入内容如果包含 html 标签字符串,会被解析成对应的 html 标签,document.write()根据运行时机,会写入文档不同的位置
HammerZe
2022/03/24
6.7K0
JS快速入门(二)
JavaScript
e.stopPropagation(); // stop 停止 Propagation 传播 下列代码为例,当点击父盒子中的son盒子时,不阻止事件冒泡,会发生弹出三个提示框(son、father和document),阻止事件冒泡后,父亲元素不在冒泡弹出框。只弹出son提示框。
roydonGuo
2022/11/02
1.2K0
JavaScript
webapi(二)- 事件
让浏览器检测是否有事件产生,一旦有事件触发,就立即调用一个函数做出响应 也称为注册事件
且陶陶
2023/04/12
7680
webapi(二)- 事件
前端成神之路-WebAPIs04
​ BOM(Browser Object Model)即浏览器对象模型,它提供了独立于内容而与浏览器窗口进行交互的对象,其核心对象是 window。
海仔
2020/12/29
1.5K0
WEB API教程
API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。
张哥编程
2024/12/13
1680
WEB API教程
JavaScript(进阶)
正则用来定义一些字符串的规则,程序可以根据这些规则来判断一个字符串是否符合规则, 也可以将一个字符串中符合规则的内容提取出来。
神葳
2021/01/22
1.5K0
webapi(五)- 事件对象
当一个元素的事件被触发时,同样的事件将会在该元素的所有祖先元素中依次被触发。这一过程被称为事件冒泡
且陶陶
2023/04/12
1.1K0
webapi(五)- 事件对象
「Web编程API」- 03
请注意,本文编写于 2091 天前,最后修改于 174 天前,其中某些信息可能已经过时。
曼亚灿
2023/05/17
1.5K0
「Web编程API」- 03
JavaScript进阶内容——DOM详解
JavaScript使我们有能力创建动态页面,而事件就是被JavaScript所侦测到的行为。
秋落雨微凉
2022/10/25
1.5K0
JavaScript进阶内容——DOM详解
前端学习笔记之BOM和DOM
到目前为止,我们已经学过了JavaScript的一些简单的语法。但是这些简单的语法,并没有和浏览器有任何交互。
Jetpropelledsnake21
2019/02/15
1K0
C1 能力认证——Web进阶
C1 能力认证——Web进阶 DOM节点操作-上 名称 描述 getElementById() 获取带有指定id的节点 getElementsByTagName() 获取带有指定标签名的节点集合 querySelector() 获取指定选择器或选择器组匹配的第一个节点 querySelectorAll() 获取指定选择器或选择器组匹配的所有节点集合 除了函数方法,我们还可以使用属性来获取节点信息,下表介绍了一些获取元素节点信息常用的属性。 名称 描述 innerHTML 返回元素内包含的所有HTML
HammerZe
2022/03/24
3.3K0
C1 能力认证——Web进阶
事件高级
eventTarget.addEventListener()方法将指定的监听器注册到 eventTarget(目标对象)上,当该对象触发指定的事件时,就会执行事件处理函数。
星辰_大海
2020/09/30
1.5K0
2019年初 JS面试必考(概率大)的面试题
javascript 创建对象简单的说,无非就是使用内置对象或各种自定义对象,当然还可以用 JSON;但写法有很多种,也能混合使用
acc8226
2022/05/17
1K0
2019年初 JS面试必考(概率大)的面试题
前端成神之路-WebAPIs06
回调函数原理:函数可以作为一个参数。将这个函数作为参数传到另一个函数里面,当那个函数执行完之后,再执行传进去的这个函数,这个过程就叫做回调。
海仔
2021/01/05
1.4K0
前端成神之路-WebAPIs06
事件
JavaScript与HTML之间的交互式通过事件实现的。 事件,就是文档或浏览器窗口中发生的一些特定的交互瞬间。可以使用侦听器(或处理程序)来预订事件,以便事件发生时执行相应的代码。
奋飛
2019/08/15
3.4K0
相关推荐
前端成神之路-WebAPIs03
更多 >
LV.0
Web前端开发
作者相关精选
换一批
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验