Hadoop:为什么Hive即使在一张小桌子上工作也这么慢?

时间:2014-04-25 21:46:23

标签: sql hadoop hive

我使用Scala中的JDBC从Hive获取数据。在Hive中,我有一个包含以下格式的20行的简单表:

user_id,movie_title,评分,日期

要按电影分组用户,我会做3个嵌套选择请求:

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行的本地Hive表上,这些嵌套查询工作26分钟! Hive在一分钟后首先返回user_id!问题:

1)为什么Hive这么慢?

2)有什么方法可以优化3个嵌套选择?

2 个答案:

答案 0 :(得分:0)

Hive使用MapReduce框架来处理查询。您运行的每个MapReduce作业都附加了相当数量的常量开销。您的每个查询(由于您的嵌套都是相当数量的)将不得不启动MapReduce作业,无论您拥有多少数据,这都需要时间。

较新版本的Hive响应速度更快,但仍不适合此类选择。

您最好的办法是尝试使用group by或类似内容来尽量减少查询次数。

答案 1 :(得分:0)

通过根据选择的不同查询将记录插入其中来创建两个表。首先包含不同的用户,电影评级为user_rated = user,second,movie_rated = movie。这样,可以连接这两个表以通过结果获得所需的组。