更新时间:2025-08-01 GMT+08:00
配置Hive插入数据到不存在的目录中
操作场景
在Hive中,“hive.overwrite.directory.move.trash”是一个与数据覆盖操作相关的配置参数,主要用于控制当使用INSERT OVERWRITE语句覆盖目标目录时,原目录中的数据是否会被移动到HDFS的回收站(Trash)中,而不是直接删除。
本章节指导用户开启Hive能插入数据到不存在的目录中的功能,例如执行insert overwrite directory "/path1/path2/path3"命令,“/path1/path2”目录权限为700且属主为当前用户,“path3”目录不存在。执行以上命令后系统会自动创建“path3”目录,并写数据成功。

以上功能在Hive参数“hive.server2.enable.doAs”为“true”时已经支持,本指导新增当“hive.server2.enable.doAs”为“false”时,如何配置Hive能插入数据到不存在的目录中。“hive.server2.enable.doAs”参数用于控制HiveServer2是否以客户端用户的身份执行Hive查询。
操作步骤
- 登录FusionInsight Manager页面,选择“集群 > 服务 > Hive > 配置 > 全部配置”。
- 选择“HiveServer(角色) > 安全”,修改“hive.server2.enable.doAs”参数值为“false”。
- 选择“HiveServer(角色) > 自定义”,对参数文件“hive-site.xml”添加自定义参数,设置“名称”为“hive.overwrite.directory.move.trash”,“值”为“true”。
- 单击“保存”保存配置。单击“实例”,勾选所有Hive实例,选择“更多 > 重启实例”,输入当前用户密码,单击“确定”重启所有Hive实例。
- 以客户端安装用户登录安装客户端的节点。
下载并安装集群客户端的具体操作,请参考安装MRS集群客户端。
- 执行以下命令配置环境变量并认证用户。
切换至客户端安装目录:
cd 客户端安装目录
加载环境变量:
source bigdata_env
认证用户,未开启Kerberos认证的集群请跳过该步骤:
kinit Hive业务用户
- 执行以下命令创建HDFS目录,例如“/user/test”:
hdfs dfs -mkdir /user/test
- 执行以下命令登录Hive客户端:
beeline
- 创建Hive表并插入数据。例如创建表“test”:
执行以下命令创建表,例如“test”:
create table test(id int,name string);
执行以下命令向表中插入数据:insert into table test(id,name) values("11","A");
- 执行以下命令查询Hive表数据并写入至HDFS中,例如“/user/test/hive”目录下:
insert overwrite directory '/user/test/hive' select * from test;
数据写入命令执行成功。
- 执行以下命令退出Hive客户端:
!q
- 查看HDFS的“/user/test”目录下是否新创建了“hive”目录,且写入的数据保存在该目录下。
- 执行以下命令查看HDFS的“/user/test”目录:
hdfs dfs -ls /user/test
自动创建目录成功:
图1 查看目录 - 执行以下命令查看“/user/test/hive”目录下的文件数据:
hdfs dfs -cat /user/test/hive/000000_0
文件内容为,与9插入的表数据一致:
11A
- 执行以下命令查看HDFS的“/user/test”目录:
父主题: Hive企业级能力增强