更新时间:2026-08-21 GMT+08:00
分享

配置Hive插入数据到不存在的目录中

操作场景

在Hive数据处理场景中,使用INSERT OVERWRITE DIRECTORY语句将查询结果写入指定的HDFS目录时,默认情况下如果目标目录不存在,语句会执行失败。这在自动化数据处理流程中可能导致任务中断,需要预先创建目录或修改脚本逻辑。如何让Hive在写入数据时自动创建不存在的目录,简化数据处理流程?MRS Hive提供自动创建目录功能,当执行INSERT OVERWRITE DIRECTORY语句时,如果目标目录不存在,Hive会自动创建该目录并写入数据。

本章节指导用户开启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查询。
  • 该功能仅适用于INSERT OVERWRITE DIRECTORY语句。
  • MRS 3.6.0-LTS及之后版本,该参数动态生效,不需要重启Hive服务。

前提条件

  • 已安装Hive客户端。下载并安装集群客户端的具体操作,请参考安装MRS集群客户端。
  • Hive服务正常运行。
  • 当前用户对目标目录的父目录具有写权限。

操作步骤

  1. 登录Manager页面,选择“集群 > 服务 > Hive > 配置 > 全部配置”,进入Hive配置页面。
  2. 选择“HiveServer(角色) > 安全”,修改“hive.server2.enable.doAs”参数值为“false”。
  3. 选择“HiveServer(角色) > 自定义”,对参数文件“hive-site.xml”添加自定义参数,设置“名称”为“hive.overwrite.directory.move.trash”,“值”为“true”。
  4. MRS 3.6.0-LTS之前版本,单击“保存”保存配置。单击“实例”,勾选所有Hive实例,选择“更多 > 重启实例”,输入当前用户密码,单击“确定”重启所有Hive实例。

    MRS 3.6.0-LTS及之后版本,单击“保存”保存配置,等待界面提示“操作成功”,单击“完成”,配置已修改。该参数动态生效,不需要重启Hive服务。

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

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

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

    切换至客户端安装目录:

    cd 客户端安装目录

    加载环境变量:

    source bigdata_env

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

    kinit Hive业务用户

  7. 执行以下命令创建HDFS目录,例如“/user/test”:

    hdfs dfs -mkdir /user/test

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

    beeline

  9. 创建Hive表并插入数据。例如创建表“test”:

    执行以下命令创建表,例如“test”:
    create table test(id int,name string);
    执行以下命令向表中插入数据:
    insert into table test(id,name) values("11","A");

  10. 执行以下命令查询Hive表数据并写入至HDFS中,例如“/user/test/hive”目录下:

    insert overwrite directory '/user/test/hive' select * from test;

    数据写入命令执行成功。

  11. 执行以下命令退出Hive客户端:

    !q

  12. 查看HDFS的“/user/test”目录下是否新创建了“hive”目录,且写入的数据保存在该目录下。

    1. 执行以下命令查看HDFS的“/user/test”目录:
      hdfs dfs -ls /user/test

      自动创建目录成功:

      图1 查看目录
    2. 执行以下命令查看“/user/test/hive”目录下的文件数据:
      hdfs dfs -cat /user/test/hive/000000_0

      文件内容为,与9插入的表数据一致:

      11A

验证操作:

配置完成后,可通过以下方式验证自动创建目录功能是否生效:

  1. 执行INSERT OVERWRITE DIRECTORY语句,指定一个不存在的路径。
  2. 执行hdfs dfs -ls命令,确认目录已自动创建。
  3. 执行hdfs dfs -cat命令,确认数据已正确写入。

常见问题

  • 自动创建目录失败

    自动创建目录失败的常见原因包括:用户对父目录没有写权限、参数配置不正确、HDFS服务异常等。

    请检查用户对目标目录的父目录是否具有写权限。检查HDFS服务状态是否正常。

  • hive.server2.enable.doAs参数的作用

    hive.server2.enable.doAs参数控制HiveServer2执行查询时的用户身份,影响权限检查和自动创建目录功能。

  • 自动创建的目录权限不正确

    自动创建的目录权限继承自父目录,如果父目录权限设置不当,可能导致创建的目录权限不符合预期。

    请检查父目录的权限设置。如果需要特定的目录权限,可以在创建目录后使用hdfs dfs -chmod命令修改目录权限。

相关文档

相关文档