海量数据Top-k问题如何处理以及大数据查询如何优化

一、海量数据的Top-K问题

方法一:分治思想/Hash映射 + HashMap统计 + 堆/快速/归并排序

第一步:针对数据太大,内存受限,只能是:把大文件取模映射成小文件;如果内存足够,直接hashTable统计,然后排序。

第二步:使用HashMap统计每个词的出现次数;

第三步:借助堆结构,我们可以在log量级的时间内查找和调整/移动。

具体做法1:

维护一个K大小的小根堆,然后遍历300万的Query,分别和根元素进行对比。这道题目因为是找“最大”的10个,所以用小根堆,每次遍历的元素只要和堆中最小的元素——“根”作比较,如果小于根,说明肯定进不了topK;如果大于根,说明它可以淘汰堆中的最小的一个元素,也就是根,然后再调整

具体做法2:

 具体做法3:

 

补充:小顶堆:是一棵完全二叉树,并且,它所有父节点的值小于或等于两个子节点的值。最小堆的存储结构(物理结构)实际上是一个数组

相关连接:

海量数据处理的 Top K相关问题_全栈工程师开发手册(原创)(腾讯内推)-CSDN博客Top-k的最小堆解决方法问题描述:有N(N>>10000)个整数,求出其中的前K个最大的数。(称作Top k或者Top 10)问题分析:由于(1)输入的大量数据;(2)只要前K个,对整个输入数据的保存和排序是相当的不可取的。可以利用数据结构的最小堆来处理该问题。最小堆如图所示,对于每个非叶子节点的数值,一定不大于孩子节点的数值。这样可用含有K个节点的最小堆来保存K个目前的最大值(当然根节点是其中的https://blog.csdn.net/luanpeng825485697/article/details/79974835

二、大数据量的查询如何进行优化

思路:

在hive中,由于Hql的执行依赖于MR,所以先考虑如何到如何优化MR程序;

其次,考虑到Hadoop的特殊的优化(JVM重用,开启并行执行,开启fetch抓取等等);

最后,考虑到Hive sql查询语句的优化。

1、 写查询语句时,要把查询的字段一一列出查询时,不要使用类似select * from x_table的语句,要尽量使用select id,name from x_table,以避免查询出不需要的数据浪费资源。对于海量数据而言,一个字段所占用的资源和查询时间是相当可观的;

2、考虑到索引和分区表的使用;

3、对大表进行分区,根据不同的业务以及数据特征,采用不同的分区方法。比如,销售,可以考虑采用间隔分区技术,多分公司或是多部门,可以考虑采用列表分区或是上述的组合分区等。

等等,详见本系列文章的Hive调优。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值