【问题标题】:Hive "insert into" doesnt add valuesHive“插入”不添加值
【发布时间】:2021-12-29 15:11:03
【问题描述】:

我是 hadoop 等的新手。 通过直线连接到 hiveserver2。然后我创建表:

create table test02(id int, name string); 

表创建,我尝试插入值:

insert into test02(id, name) values (1, "user1");

然后什么也没有发生。 table02 和 values__tmp__table__1 已创建,但它们都是空的。 Hadoop目录“/user/$username/warehouse/test01”为空。

0: jdbc:hive2://localhost:10000> insert into test02 values (1,"user1");  
No rows affected (2.284 seconds)
0: jdbc:hive2://localhost:10000> select * from test02;
+------------+--------------+
| test02.id  | test02.name  |
+------------+--------------+
+------------+--------------+
No rows selected (0.326 seconds)
0: jdbc:hive2://localhost:10000> show tables;
+------------------------+
|        tab_name        |
+------------------------+
| test02                 |
| values__tmp__table__1  |
+------------------------+
2 rows selected (0.137 seconds)

【问题讨论】:

  • 这听起来像是权限问题。谁有权写入 Hive 数据仓库?

标签: hadoop hive hiveql


【解决方案1】:

当 hive 需要在操作期间管理中间数据时,会创建此类临时表。 Hive 会在创建临时表的 Hive 会话结束时自动删除所有临时表。如果您关闭会话并再次打开它,您将找不到临时表。

https://docs.cloudera.com/HDPDocuments/HDP2/HDP-2.5.0/bk_data-access/content/temp-tables.html

像这样插入数据 ->

插入 test02 值(999,“user_new”);

数据将被插入到 test02 和一个临时表中,比如 values__tmp__table__1(临时表将在 hive 会话之后消失)。

【讨论】:

    【解决方案2】:

    我找到了解决方案。我是 Hadoop&co 的新手,所以答案对我来说并不明显。

    首先,我将 Hive 日志记录转到级别 ERROR 以查看问题:

    1. 找到hive-exec-log4j2.properties ({your hive directory}/conf/)
    2. 找到property.hive.log.level并将值设置为ERROR (..log.level = ERROR)

    然后,在通过 Beeline 执行命令 insert into 时,我看到了所有错误。主要错误是:

    有 0 个数据节点正在运行,此操作中没有排除任何节点

    我找到了the same question elsewheretop answer 帮助了我,即删除了所有 /tmp/* 文件(其中存储了我所有的本地 HDFS 数据)。

    然后,像第一次一样,我初始化了 namenode (-format) 和 Hive(运行了我的 metahive 脚本)。

    问题已解决——尽管它确实暴露了另一个问题,我需要研究一下:insert into 执行时间超过 25 秒。

    【讨论】:

      猜你喜欢
      • 2019-02-23
      • 1970-01-01
      • 1970-01-01
      • 2017-11-01
      • 2020-02-10
      • 2019-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多