hadoop:为什么hive即使在一个很小的表上也工作得这么慢?

kiz8lqtg  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(384)

我使用scala的jdbc从hive获取数据。在hive中,我有一个包含20行的简单表,格式如下:
用户id、电影标题、分级、日期
要按电影对用户进行分组,我执行3个嵌套的select请求:

1) select distinct user_id  
     2) for each user_id: 
         select distinct movie_title  //select all movies that user saw
            3) for each movie_title:
                select distinct user_id  //select all users who saw this movie

在具有20行的本地配置单元表上,这些嵌套查询工作26分钟!Hive先返回 user_id 一分钟后!问题:
1) 为什么Hive这么慢?
2) 有没有办法优化3个嵌套选择?

bzzcjhmw

bzzcjhmw1#

hive使用mapreduce框架来处理查询。您运行的每个mapreduce作业都有相当数量的固定开销。您的每一个查询(这是一个相当大的数量,因为您的嵌套)都将不得不启动一个mapreduce作业,而且无论您有多少数据,这都需要时间。
新版本的HiveReact更快,但仍然不适合这种类型的选择。
最好的办法是使用 group by 或者类似的东西。

ghhkc1vu

ghhkc1vu2#

通过基于select distinct查询向表中插入记录来创建两个表。第一个包含不同的用户,电影分级,其中用户\分级=用户,第二个,电影\分级=电影。这样,这两个表就可以通过连接得到所需的groupby结果。

相关问题