如何通过配置单元中的分区产生效果

jrcvhitl  于 2021-06-26  发布在  Hive
关注(0)|答案(0)|浏览(165)

我在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) 错了吗?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题