【Flink 系列二十三】hudi 消失的 HIVE_CONF_DIR,HIVE 读不到 hive-site.xml 读不到

news/2024/10/10 18:25:03/文章来源:https://www.cnblogs.com/slankka/p/18456896

问题现象

Unable to find config file hive-site.xml
Unable to find config file hivemetastore-site.xml
Unable to find config file metastore-site.xml

本文记录这个问题是如何导致的,并记录如何向 Hive、Hudi 提供 hive-site.xml 以便正确加载。

问题分析: HiveMetaStore 是如何查找配置文件路径的

位置:org.apache.hadoop.hive.metastore.conf.MetastoreConf#findConfigFile

private static URL findConfigFile(ClassLoader classLoader, String name) {// First, look in the classpathURL result = classLoader.getResource(name);if (result == null) {// Nope, so look to see if our conf dir has been explicitly setresult = seeIfConfAtThisLocation("METASTORE_CONF_DIR", name, false);if (result == null) {// Nope, so look to see if our home dir has been explicitly setresult = seeIfConfAtThisLocation("METASTORE_HOME", name, true);if (result == null) {// Nope, so look to see if Hive's conf dir has been explicitly setresult = seeIfConfAtThisLocation("HIVE_CONF_DIR", name, false);if (result == null) {// Nope, so look to see if Hive's home dir has been explicitly setresult = seeIfConfAtThisLocation("HIVE_HOME", name, true);if (result == null) {// Nope, so look to see if we can find a conf file by finding our jar, going up one// directory, and looking for a conf directory.URI jarUri = null;try {jarUri = MetastoreConf.class.getProtectionDomain().getCodeSource().getLocation().toURI();} catch (Throwable e) {LOG.warn("Cannot get jar URI", e);}result = seeIfConfAtThisLocation(new File(jarUri).getParent(), name, true);// At this point if we haven't found it, screw it, we don't know where it isif (result == null) {LOG.info("Unable to find config file " + name);}}}}}}LOG.info("Found configuration file " + result);return result;}

显然是因为 classpath 没有,METASTORE_CONF_DIR、METASTORE_HOME、HIVE_CONF_DIR、HIVE_HOME, 这些位置相应的都没有

并且甚至 MetastoreConf 类所在的 jar 包内也没有

寻找原因:为什么所有的位置都没有读取到 hive-site.xml

位置:org.apache.hadoop.hive.metastore.conf.MetastoreConf#newMetastoreConf

 if(hiveSiteURL == null) {/** this 'if' is pretty lame - QTestUtil.QTestUtil() uses hiveSiteURL to load a specific* hive-site.xml from data/conf/<subdir> so this makes it follow the same logic - otherwise* HiveConf and MetastoreConf may load different hive-site.xml  ( For example,* HiveConf uses data/conf/spark/hive-site.xml and MetastoreConf data/conf/hive-site.xml)*/hiveSiteURL = findConfigFile(classLoader, "hive-site.xml");}if (hiveSiteURL != null) {conf.addResource(hiveSiteURL);}

当 hiveSiteURL 静态变量未设置的时候,才调用 findConfigFile,这个是正常情况。

Flink 相关的
位置:
org.apache.flink.table.catalog.hive.HiveCatalog.createHiveConf

        // ignore all the static conf file URLs that HiveConf may have setHiveConf.setHiveSiteLocation(null);

结论:

  • Flink 清理了这个静态变量,导致进入 findConfigFile。
  • MetastoreConf 看样子不支持 HDFS上的 hive-site.xml
  • Flink 如果new了HiveCatalog,一定导致查找过程

CLASSPATH 分析

Flink的 CLASSPATH 已经提供了为何仍然加载不了 hive-site.xml

lib/hive-site.xml

但 classLoader.getResource(name); 仍然加载不了,推测是因为 name应当是 "lib/hive-site.xml" 才能正确加载 ?

结论:
需要指定 HIVE_CONF_DIR

解决方案

给 Flink 程序传入 HIVE_CONF_DIR,那么具体怎么做的?可以参考 kyuubi

即:

-Dcontainerized.master.env.HIVE_CONF_DIR=/etc/hive/conf

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android开发编译openssl源代码生成libcrypto.so和libssl.so两个动态库用于android ndk项目开发使用

openssl编译本篇文章的操作是在Linux环境之下,在虚拟机ubuntu 20版本上操作的步骤1. openssl下载解压tar包openssl下载地址:https://openssl-library.org/source/下载完解压:tar -zxvf openssl-3.3.2.tar.gz // 我这里下载openssl-3.3.2.tar.gz版本2. 编译openssl库,得到l…

MySQL下载、安装与配置

MySQL下载、安装与配置下载MySQL 1、进入MySQL官网 2、点击 Products,再点击 MySQL Community Server3、选择MySQL版本,点击 Go to Download Page4、点击 Download 下载MySQL安装程序5、点击 No thanks, just start my download,等待下载安装MySQL 1、双击运行下载的安装程序…

web端ant-design-vue Upload 手动实现文件上传使用小节

web端ant-design-vue Upload 手动实现文件上传使用小节。最近在项目开发中用到了手动实现文件上传的组件,之前都是自动上传把返回的文件信息保存到服务器。手动上传相对复杂一下,我把遇到的一些问题整理记录一下,有需要的朋友可以避免走弯路! 1、文件上传需要用formdata格式…

记一次k8s挂载configmap配置文件识别为文件夹的错误

错误表现 挂载.env为配置文件时被识别成一个文件夹而不是一个文件错误原因 创建configmap的时候原始文件使用的是env解决方式 创建configmap的时候需要使用的文件需要修改文件名为挂载的文件名一致 例如本次挂载的文件名是.env则需要在创建configmap的时候原始文件名修改为.evn…

开源项目更新|WPF/Uno Platform/WinUI 3三个版本的《英雄联盟客户端》

为了统一WPF/WinUI3/Uno仓库的项目架构,我们基于.NET Standard 2.0设计了一个可在所有平台上运行的框架,无需依赖第三方库。这个框架直接实现了项目分散化、模块化、视图注入、依赖注入、单例模式和MVVM等基于XAML的项目架构所需功能。采用这种方法,我们可以在不同版本(如WPF、…

简明线性回归算法中的最小二乘法

我们来通过一个具体的例子说明线性回归算法中最小二乘法如何确定模型参数。 示例:房价预测 假设我们想用房子的面积(平方英尺)来预测房价(美元)。我们有以下数据集:面积(平方英尺)房价(美元)800 150,0001000 200,0001200 210,0001500 280,0001. 建立模型 我们假设房价…

简明线性回归算法

线性回归是一种用于预测和建模的统计方法,旨在通过建立输入变量(特征)与输出变量(目标)之间的线性关系来进行分析。下面我们通过一个简单易懂的例子来说明线性回归的详细过程。 例子:预测房价 假设你是一名房地产经纪人,想要根据房子的面积(平方英尺)来预测房子的价格…

web端ant-design-vue Modal.info组件自定义icon和title使用小节

web端ant-design-vue Modal.info组件自定义icon和title整理小节,最近在项目中用到了自定义icon和title的功能,经过测试发现,如果自定义icon title会自动换行,尝试直接修改样式和穿透方式都没有效果,最后采取了一个巧妙的方式,将icon和title放在一个自定义组件内,完美解决…

Ewald求和在分子静电势能计算中的应用

本文介绍了Ewald求和计算方法在周期性边界条件下计算静电势能的方法。周期性的静电势函数并不是一个空间收敛的函数,通过Ewald求和可以将静电势切分为短程相互作用和长程相互作用,两项分别在实空间和倒易空间(或称傅里叶空间、k空间等)收敛。然后就可以进一步进行截断,用更…

vue3中使用markdown并且显示公式

vue3中使用markdown并且显示公式 最终效果如图 下面是代码 1.先安装依赖包npm install markdown-it mathjax2.src下面创建文件utils/mathjax.js,文件内容如下window.MathJax = {tex: {inlineMath: [["$", "$"],["\\(", "\\)"],[&q…

洛谷题单指南-字符串-P1481 魔族密码

原题链接:https://www.luogu.com.cn/problem/P1481 题意解读:在n个字符串中找到最长的词链长度,定义字符串a、b、c可以形成词链,即a是b的前缀、b是c的前缀。 解题思路: 1、Trie树定义 Trie树,也称前缀树、字典树,核心思想是将字符串拆解为单个字符,每个字符是树的一条边…

解决使用Navicat连接数据库时,打开数据库表很慢的问题

今天使用Navicat连接数据库时,发现不管表中数据多少,打开数据库表非常慢。 解决方法: Navicat - 右键编辑数据库连接 - 高级 - 勾选保持连接间隔 - 输入框设置为20 - 点击确定! 参考文章:https://51.ruyo.net/14030.html