
# 配置创建Hive内部表时不能指定Location
#### 操作场景
创建Hive表时，支持指定表的Location为HDFS或OBS目录（存算分离场景），如果需要实现创建Hive内部表时，不支持指定Location，可通过配置"hive.internaltable.notallowlocation"参数进行控制。即表创建成功之后，表的Location路径会被创建在当前默认warehouse目录下（默认warehouse目录为"/user/hive/warehouse"），不能被指定到其他目录；如果创建内部表时指定Location，则创建表会失败。
![](https://support.huaweicloud.com/cmpntguide-lts-mrs/public_sys-resources/note_3.0-zh-cn.png)
开启该功能后，如果数据库中已存在建表时指向非当前默认warehouse目录的表，在执行创建数据库、表脚本迁移、重建元数据操作时需要特别注意，防止报错。
#### 约束与限制
本章节操作仅适用于集群已启用Kerberos认证（安全模式）且Hive未启用Ranger鉴权的场景。
#### 操作步骤
1. 登录FusionInsight Manager页面，选择"集群 \> 服务 \> Hive \> 配置 \> 全部配置"。
2. 选择"HiveServer（角色） \> 自定义"，对参数文件"hive-site.xml"添加自定义参数，设置"名称"为"hive.internaltable.notallowlocation"，参数取值包括： 
   - true：创建Hive内部表时不支持指定表的Location。
   
   - false：默认值，创建Hive内部表时支持指定表的Location。
   
   
   需将参数值设置为"true"。
   
   
3. MRS 3.6.0-LTS之前版本，单击"保存"保存配置。单击"实例"，勾选所有Hive实例，选择"更多 \> 重启实例"，输入当前用户密码，单击"确定"重启所有Hive实例。 
   MRS 3.6.0-LTS及之后版本，单击"保存"保存配置，等待界面提示"操作成功"，单击"完成"，配置已修改。该参数动态生效，不需要重启Hive服务。
   
   
4. 是否需要在Spark/Spark2x客户端中启用此功能？ 
   - 是，重新下载并安装Spark/Spark2x客户端。
   
   - 否，操作结束。
   
   
   
   
5. 以客户端安装用户登录安装客户端的节点。 
   下载并安装集群客户端的具体操作，请参考[安装MRS集群客户端](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0089.html)。
   
   
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配置成功：
   ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000002325781778.png "点击放大")
   请删除命令中的**location**参数并重新执行即可创建对应的Hive表。
   
   
 
