返回
Hive 3.1.3 连接多个 MySQL 数据源时遇到的连接问题及其解决方案
mysql
2024-06-12 19:03:09
如何解决 Hive 3.1.3 中使用 JDBC 存储处理程序映射多个 MySQL 数据源时的连接问题
引言
在使用 Hive 3.1.3 管理多个 MySQL 数据源时,可能会遇到连接问题。本文将探讨导致此问题的常见原因,并提供解决方案。
问题概述
使用 JDBC 存储处理程序将多个 MySQL 数据源映射到 Hive 3.1.3 时,在连接条件中选择不同数据源时,可能会遇到以下错误:
Table not found in dpyy_ucs.order_info
Table not found in dpyy_vas.account_info
原因分析
Hive 3.1.3 中的一个已知问题导致此连接问题。该问题阻止在连接条件中选择不同的 MySQL 数据源。
解决方案
目前,解决此问题的唯一方法是将 Hive 3.1.3 降级到 Hive 3.1.0。
详细步骤
- 停止 Hive 3.1.3 服务。
- 下载 Hive 3.1.0 版本。
- 解压缩 Hive 3.1.0 文件并将其复制到 Hive 安装目录。
- 重新启动 Hive 服务。
其他注意事项
- 确保 Hive 配置文件中的
hive.metastore.uris
属性指向正确的元存储 URI。 - 确保已将 JDBC 驱动程序添加到 Hive 的类路径中。
- 如果问题仍然存在,请检查 Hive 日志以获取更多详细信息。
示例代码
以下是使用 Hive 3.1.0 映射多个 MySQL 数据源并进行连接的示例代码:
-- 映射第一个 MySQL 数据源
CREATE EXTERNAL TABLE IF NOT EXISTS dim_order_right_detail(
id bigint,
right_detail_id string,
open_id string,
order_id string
) STORED BY 'org.apache.hive.storage.jdbc.JdbcStorageHandler'
LOCATION 'hdfs://hdp5/dpyy/prod/hive/dpyy_prod.db/dim_order_right_detail'
TBLPROPERTIES (
'hive.sql.database.type' = 'MYSQL',
'hive.sql.jdbc.driver' = 'com.mysql.cj.jdbc.Driver',
'hive.sql.jdbc.url' = 'jdbc:mysql://XXX.XX.XXX.XXX:3306/dpyy_vas?&allowPublicKeyRetrieval=true&useSSL=false',
'hive.sql.dbcp.username' = 'XXXXX',
'hive.sql.dbcp.password' = 'XXXXX',
'hive.sql.query' = 'SELECT id,right_detail_id,open_id,order_id FROM order_right_detail',
'hive.sql.dbcp.maxActive' = '1'
);
-- 映射第二个 MySQL 数据源
CREATE EXTERNAL TABLE IF NOT EXISTS dim_account_info(
id bigint,
open_id string,
user_id string
) STORED BY 'org.apache.hive.storage.jdbc.JdbcStorageHandler'
LOCATION 'hdfs://hdp5/dpyy/prod/hive/plat_prod.db/dim_account_info'
TBLPROPERTIES (
'hive.sql.database.type' = 'MYSQL',
'hive.sql.jdbc.driver' = 'com.mysql.cj.jdbc.Driver',
'hive.sql.jdbc.url' = 'jdbc:mysql://XXX.XXX.XXX.XXX:3306/dpyy_ucs?&allowPublicKeyRetrieval=true&useSSL=false',
'hive.sql.dbcp.username' = 'dpyy_bigdata',
'hive.sql.dbcp.password' = 'XXXXXXX',
'hive.sql.query' = 'SELECT id,open_id,user_id FROM account_info',
'hive.sql.dbcp.maxActive' = '1'
);
-- 使用连接条件连接两个数据源
SELECT *
FROM dim_order_right_detail t1
JOIN dim_account_info t2
ON t1.open_id = t2.open_id;
常见问题解答
-
为什么会遇到此连接问题?
这是 Hive 3.1.3 中的一个已知问题,导致无法在连接条件中选择不同的 MySQL 数据源。 -
除了降级到 Hive 3.1.0 之外,还有其他解决方法吗?
目前没有其他已知的解决方法。 -
如何检查 Hive 日志以获取更多详细信息?
Hive 日志通常位于HIVE_LOG_DIR
中,可以通过以下命令访问:cat $HIVE_LOG_DIR/hive.log
。 -
如何将 JDBC 驱动程序添加到 Hive 的类路径中?
将 JDBC 驱动程序添加到hive-site.xml
配置文件中,并在hive.aux.jars.path
属性中指定其位置。 -
如何映射多个 MySQL 数据源?
使用CREATE EXTERNAL TABLE
语句,如本文中的示例代码所示,为每个数据源创建外部表。