更新时间:2025-08-01 GMT+08:00

配置创建Hive内部表时不能指定Location

操作场景

创建Hive表时,支持指定表的Location为HDFS或OBS目录(存算分离场景),如果需要实现创建Hive内部表时,不支持指定Location,可通过配置“hive.internaltable.notallowlocation”参数进行控制。即表创建成功之后,表的Location路径会被创建在当前默认warehouse目录下(默认warehouse目录为“/user/hive/warehouse”),不能被指定到其他目录;如果创建内部表时指定Location,则创建表会失败。

开启该功能后,如果数据库中已存在建表时指向非当前默认warehouse目录的表,在执行创建数据库、表脚本迁移、重建元数据操作时需要特别注意,防止报错。

操作步骤

  1. 登录FusionInsight Manager页面,选择“集群 > 服务 > Hive > 配置 > 全部配置”。
  2. 选择“HiveServer(角色) > 自定义”,对参数文件“hive-site.xml”添加自定义参数,设置“名称”为“hive.internaltable.notallowlocation”,参数取值包括:

    • true:创建Hive内部表时不支持指定表的Location。
    • false:默认值,创建Hive内部表时支持指定表的Location。

    需将参数值设置为“true”。

  3. 单击“保存”保存配置。单击“实例”,勾选所有Hive实例,选择“更多 > 重启实例”,输入当前用户密码,单击“确定”重启所有Hive实例。
  4. 是否需要在Spark/Spark2x客户端中启用此功能?

    • 是,重新下载并安装Spark/Spark2x客户端。
    • 否,操作结束。

  5. 以客户端安装用户登录安装客户端的节点。

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

  6. 执行以下命令配置环境变量并认证用户。

    切换至客户端安装目录:

    cd 客户端安装目录

    加载环境变量:

    source bigdata_env

    认证用户,未开启Kerberos认证的集群请跳过该步骤:

    kinit Hive业务用户

  7. 执行以下命令登录Hive客户端:

    beeline

  8. 创建Hive内部表。

    如果创建Hive内部表时指定表的Location,例如为HDFS的“/user/test”,命令为:
    create table test(name string) location "user/test";

    命令执行后报错,创建表失败,即表示创建Hive内部表时不能指定Location配置成功:

    请删除命令中的location参数并重新执行即可创建对应的Hive表。