更新时间:2025-07-14 GMT+08:00

配置Hive读取关系型数据库

操作场景

Hive支持创建与其他关系型数据库关联的外表。该外表可以从关联到的关系型数据库中读取数据,并与Hive的其他表进行Join操作。

目前支持使用Hive读取DB2和Oracle两种关系型数据库的数据。

前提条件

已安装Hive客户端。下载并安装集群客户端的具体操作,请参考安装MRS集群客户端

操作步骤

  1. 以Hive客户端安装用户登录安装客户端的节点。
  2. 执行以下命令,切换到客户端安装目录。

    cd 客户端安装目录

    例如安装目录为“/opt/client”,则执行以下命令:

    cd /opt/client

  3. 执行以下命令配置环境变量。

    source bigdata_env

  4. 集群是否启用了Kerberos认证。

    • 是,执行以下命令进行用户认证:
      kinit Hive业务用户
    • 否,执行5

  5. 执行以下命令,将需要关联的关系型数据库驱动Jar包上传到HDFS目录下。

    hdfs dfs -put Jar包所在目录 保存Jar包的HDFS目录

    例如将“/opt”目录下Oracle驱动Jar包上传到HDFS的“/tmp”目录下,则执行如下命令。

    hdfs dfs -put /opt/ojdbc6.jar /tmp

  6. 按照如下示例,在Hive客户端创建关联关系型数据库的外表。以下为关联Oracle linux6版本示例:

    1. 登录Hive客户端:
      beeline
    2. 如果集群已启用Kerberos认证(安全模式),创建Hive表的用户需要“ADMIN”权限,并设置admin权限:
      set role admin;
    3. 添加连接关系型数据库的驱动Jar包,不同数据库有不同的驱动Jar,且Jar包所在路径请以实际路径为准:
      ADD JAR hdfs:///tmp/ojdbc6.jar;
    4. 执行以下命令创建Hive表,且表的列需比数据库返回结果多一列用于分页查询:
      CREATE EXTERNAL TABLE ora_test
      (id STRING,rownum string)
      STORED BY 'com.qubitproducts.hive.storage.jdbc.JdbcStorageHandler'
      TBLPROPERTIES (
      "qubit.sql.database.type" = "ORACLE",
      "qubit.sql.jdbc.url" = "jdbc:oracle:thin:@//10.163.xxx.xxx:1521/mydb",
      "qubit.sql.jdbc.driver" = "oracle.jdbc.OracleDriver",
      "qubit.sql.query" = "select name from aaa",
      "qubit.sql.column.mapping" = "id=name",
      "qubit.sql.dbcp.username" = "test",
      "qubit.sql.dbcp.password" = "xxx");
      表1 创建Hive表参数说明

      参数

      参数说明

      qubit.sql.database.type

      用于设置关联的关系型数据库类型,例如“ORACLE”。

      qubit.sql.jdbc.url

      通过JDBC连接关系型数据库的URL,不同数据库有不同的URL格式,例如“jdbc:oracle:thin:@//10.163.xxx.xxx:1521/mydb”。

      qubit.sql.jdbc.driver

      用于配置关系型数据库驱动类名,例如“oracle.jdbc.OracleDriver”。

      qubit.sql.query

      在关系型数据库中执行的查询SQL语句,结果将返回至Hive表中。

      qubit.sql.column.mapping

      可选,Hive表的列与关系型数据库表的列进行匹配。

      qubit.sql.dbcp.username

      连接关系型数据库的用户名。

      qubit.sql.dbcp.password

      连接关系型数据库的用户密码。

      命令中如果携带认证密码信息可能存在安全风险,在执行命令前建议关闭系统的history命令记录功能,避免信息泄露。