我在mrv2上使用hive,并且我正在尝试优化hive查询。
数据库假设一个便利店的购买历史。这个数据库包含6个表(customers(1m行)、shops(1k行)、employees(5k行)、genres(30行)、items(3.5k行)、purchase\u histories(1g行)),我做了一个查询,检索每个项目的购买数量、genres和客户性别的总和。
SELECT c.gender,
g.name,
i.name,
Sum(ph.num)
FROM purchase_histories ph
JOIN customers c
ON ( c.id = ph.cus_id
AND ph.dt < $var1
AND ph.dt > $var2 )
JOIN items i
ON ( i.id = ph.item_id )
JOIN genres g
ON ( g.id = i.gen_id )
GROUP BY c.gender,
g.name,
i.name;
我做了分区购买历史(dt)、项目(gen\u id)和客户(gender,byear)。
我通过上面的查询比较了这个数据库和无分区数据库(包含相同的表)。我向$var1和$var2输入了一些类型的值,以使采购历史记录行的参考号变为10000000。
我测量了处理时间,发现无分区数据库比其他数据库快(或相等)。我查看了执行日志,发现分区数据库的mapper数大约为10~30,而未分区数据库的mapper数大约为150。我不认为很多Map绘制者是绝对好的,但10~30个Map绘制者太小了。所以我想我必须检查一些关于Map编号或内存大小的配置。但我不知道该改变哪种配置,我的想法是正确的。
explain的结果是没有分区和分区。执行日志是exe\u log\u no\u partition和exe\u log\u partitioned。
谢谢。
附加
1,我看到了分区的解释结果,认为Map器的数量是由下面的公式计算出来的: (the table size 2619958583)/(mapreduce.input.fileinputformat.split.maxsize=256000000)
错了吗?
暂无答案!
目前还没有任何答案,快来回答吧!