Hive Hive 启动和操作出错

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hive Hive 启动和操作出错相关的知识,希望对你有一定的参考价值。

参考技术A 具体步骤:

step1:在修改 hive-site.xml 前,先创建 tmp 目录

进入到hive的安装目录下,本文是进入到  /opt/modules/hive/apache-hive-1.2.2-bin

输入      mkdir   tmp             存储临时文件

step2:进入到 /apache-hive-1.2.2-bin/conf 目录下,修改 hive-site.xml 文件

输入    vim    hive-site.xml         编辑 hive-site.xml  文件

搜索 system:java.io.tmpdir ,输入  /system:java.io.tmpdir  进行搜索

可定位到多处含有 system:java.io.tmpdir 的地方(搜索功能按小写 n可切换到下一处;按小写 N 可切换到上一处)

输入 i 键 进入编辑模式

将 system:java.io.tmpdir 全部替换成 /opt/modules/hive/apache-hive-1.2.2-bin/tmp(这个是我存放临时文件的路径,替换成你所创建的)

输入 Esc 键 退出编辑模式,输入 :wq   保存并退出

具体步骤:

进入到 /apache-hive-1.2.2-bin/conf 目录下,修改 hive-site.xml 文件

输入    vim    hive-site.xml      编辑 hive-site.xml  文件

搜索 hive.exec.local.scratchdir ,输入  /hive.exec.local.scratchdir   进行搜索

输入 i 键 进入编辑模式

将 $system:user.name 替换成 $user.name

改成:

输入 Esc 键 退出编辑模式,输入 :wq   保存并退出

step1:查看目前 hdfs 和 yarn 的启动情况

输入   jps

从上图可看到,datanode 木有掉了,所以重启一下 hdfs 和 yarn

step2: 先停止 hdfs 和 yarn

输入      stop-all.sh       

或者分别输入        stop-dfs.sh        stop-yarn.sh

step3:再启动 hdfs 和 yarn

输入 start-all.sh

或是分别输入          start-dfs.sh        start-yarn.sh

参考链接:

https://www.cnblogs.com/zlslch/p/6028069.html

http://blog.csdn.net/jim110/article/details/44907745

https://www.cnblogs.com/0xcafedaddy/p/8250372.html

Hive 在使用 case 语句和聚合时按列分组出错

【中文标题】Hive 在使用 case 语句和聚合时按列分组出错【英文标题】:Hive Getting error on group by column while using case statements and aggregations 【发布时间】:2018-10-12 06:37:39 【问题描述】:

我正在处理 hive 中的查询。因为我正在使用 sum 和 case 语句以及 group by 子句之类的聚合。我已经更改了列名和表名,但我的逻辑与我在项目中使用的逻辑相同

select 
empname,
empsal, 
emphike,
sum(empsal) as tot_sal,
sum(emphike) as tot_hike,
case when tot_sal > 1000 then exp(tot_hike)
else 0
end as manager
from employee
group by 
empname,
empsal,
emphike

对于上述查询,我​​收到错误为“Expression not in group by key '1000'”。 所以我稍微修改了查询并再次尝试我的另一个查询是

select 
empname,
empsal, 
emphike,
sum(empsal) as tot_sal,
sum(emphike) as tot_hike,
case when sum(empsal) > 1000 then exp(sum(emphike))
else 0
end as manager
from employee
group by 
empname,
empsal,
emphike

对于上面的查询,它把我的错误视为“表达式不在组中按键'经理'”。 当我通过显示无效别名在组中添加经理时。 请帮帮我

【问题讨论】:

【参考方案1】:

我在您的查询中发现了三个问题:

1.) Hive 无法按您在选择块中定义的变量按您立即提供的名称进行分组。您可能需要一个子查询。

2.) 当sumcount 操作不在查询末尾时,Hive 往往会显示错误。

3.) 虽然我不知道您的目标是什么,但我认为您的查询不会提供预期的结果。如果您按empsal 分组,则设计上empsalsum(empsal) 之间没有区别。 emphikesum(emphike) 也是如此。

我认为以下查询可能会解决这些问题:

select
a.empname,
a.tot_sal, 
a.tot_hike,
if(a.tot_sal > 1000, exp(a.tot_hike), 0) as manager
from
(select 
empname,
sum(empsal) as tot_sal,
sum(emphike) as tot_hike,
from employee
group by 
empname
)a

if 语句等同于您的case 语句,但是我发现它更容易阅读。

在此示例中,您不需要在子查询之后进行分组,因为分组是在子查询 a 中完成的。

【讨论】:

以上是关于Hive Hive 启动和操作出错的主要内容,如果未能解决你的问题,请参考以下文章

将数据插入 Hive 分区表时出错

Hive - 将数据复制到表中时出错

运行 hive 时出错

导入 hive 包时出错

在 hive 中将时间戳转换为 hive 格式时出错

R-Hive流中出错