海量数据处理方法归类

海量数据,找出最热门(频率最高)的某一数据,或前100的数据。一般情况下数据大小几百个G,而内存限制就1个G,完成计算。

应用场景:
  (1)海量日志数据,提取出某日访问百度次数最多的那个IP;
  (2)搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来, 假设目前有一千万个记录(这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个。一个查询串的重复度越高,说明查询它的用户越多,也就是越热门。),请你统计最热门的10个查询串,要求使用的内存不能超过1G。
  解决思路:主要是内存限制。如果内存够,那好,我们用用排序就OK了;那内存不够,我们就分批次来。分批次来,那么首先思考要怎么分批?显然要满足的条件就是尽量把相同的日志、IP分到同一个文件中去,这样避免多个文件中还互相包含同一条日志。顺理成章,若分为1000个小文件,根据hash(IP) % 1000将日志对号入座,然后分别对每个小文件用hashMap进行频率统计,最后再将1000个小文件中最**(前**)的日志提取出来,利用常规的排序即可。

有10个文件,每个文件1G,每个文件的每一行存放的都是用户的query,每个文件的query都可能重复。要求你按照query的频度排序

解决思路:典型的Top K算法。模板:先用HashMap统计频率(或去重),维护一个K大小的堆,统计Top K就行了。

给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?

解决思路:可以估计每个文件安的大小为5G×64=320G,远远大于内存限制的4G。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法。
遍历文件a,对每个url求取hash(url)%1000,然后根据所取得的值将url分别存储到1000个小文件(记为a0,a1,...,a999)中。这样每个小文件的大约为300M。
遍历文件b,采取和a相同的方式将url分别存储到1000小文件(记为b0,b1,...,b999)。这样处理后,所有可能相同的url都在对应的小文件    (a0vsb0,a1vsb1,...,a999vsb999)中,不对应的小文件不可能有相同的url。然后我们只要求出1000对小文件中相同的url即可。
求每对小文件中相同的url时,可以把其中一个小文件的url存储到hash_set中。然后遍历另一个小文件的每个url,看其是否在刚才构建的hash_set中,如果是,那么就是共同的url,存到文件里面就可以了。

在2.5亿个整数中找出不重复的整数,注,内存不足以容纳这2.5亿个整数

方案1:采用2-Bitmap(每个数分配2bit,00表示不存在,01表示出现一次,10表示多次,11无意义)进行,共需内存2^32 * 2 bit=1 GB内存,还可以接受。然后扫描这2.5亿个整数,查看Bitmap中相对应位,如果是00变01,01变10,10保持不变。所描完事后,查看bitmap,把对应位是01的整数输出即可。
方案2:也可采用与第1题类似的方法,进行划分小文件的方法。然后在小文件中找出不重复的整数,并排序。然后再进行归并,注意去除重复的元素。

给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?

位图法比较适合于这种情况,它的做法是按照集合中最大元素max创建一个长度为max+1的新数组,然后再次扫描原数组,遇到几就给新数组的第几位置上1,如遇到5就给新数组的第六个元素置1,这样下次再遇到5想置位时发现新数组的第六个元素已经是1了,这说明这次的数据肯定和以前的数据存在着重复。此法以内存为代价。
方法总结:内存不够,分治之;如何分治,取hash;想取TOP K,就用堆!

时间: 2024-11-03 22:35:46

海量数据处理方法归类的相关文章

海量数据处理方法

1.hashing 适用范围:快速查找,删除的基本数据结构,通常需要总数据量可以放入内存.  这里的hashing和 hashmap是不一样的概念,这里的hash指的是hashtable,可以看例子:(比较两个字符串的包含问题) 问题实例: 1).海量日志数据,提取出某日访问百度次数最多的那个IP. IP的数目还是有限的,最多2^32个,所以可以考虑使用hash将ip直接存入内存,然后进行统计. 2.bitmap 适用范围:可进行数据的快速查找,判重,删除,一般来说数据范围是int的10倍以下.

转 十道海量数据处理面试题与十个方法大总结

作者:July.youwang.yanxionglu. 时间:二零一一年三月二十六日本文之总结:教你如何迅速秒杀掉:99%的海量数据处理面试题.有任何问题,欢迎随时交流.指正.出处:http://blog.csdn.net/v_JULY_v. 第一部分.十道海量数据处理面试题 1.海量日志数据,提取出某日访问百度次数最多的那个IP. 首先是这一天,并且是访问百度的日志中的IP取出来,逐个写入到一个大文件中.注意到IP是32位的,最多有个2^32个IP.同样可以采用映射的方法,比如模1000,把整

关于海量数据处理的相关问题

看过很多面经,里面都会问到海量数据处理的问题.虽然在学校根本遇不到这样的情境,但很多方法还是需要我们去好好了解一下的,也是为了以后的工作做准备吧. 搜集了一些有关海量数据处理的问题和解答,如下: 1.海量日志数据,提取出某日访问百度次数最多的那个IP. 此题,在我之前的一篇文章算法里头有所提到,当时给出的方案是:IP的数目还是有限的,最多2^32个,所以可以考虑使用hash将ip直接存入内存,然后进行统计. 再详细介绍下此方案:首先是这一天,并且是访问百度的日志中的IP取出来,逐个写入到一个大文

海量数据处理常用方法有哪些?

处理海量数据是大数据工程师必备技能,通过对PB级别的数据进行挖掘与分析发掘出有价值的信息,为企业或政府做出正确决策提供依据,是十分必要的一项工作,以下是常用的海量数据处理方法! 1. Bloom filter Bloom filter是一种二进制向量数据结构,具有很好的空间效率和时间效率,可用来检测一个元素是否属于一个集合.该方法的优点是它的插入和查询时间都是常数,并且它查询元素却不保存元素本身,因此,具有良好的安全性,但因其算法的原因,其正确率稍低,可以确定不存在数据一定不存在,确定存在的数据

海量数据处理技术学习

海量数据处理的常用技术可分为: 外排序:因为海量数据无法全部装入内存,所以数据的大部分存入磁盘中,小部分在排序需要时存入内存. MapReduce:分布式处理技术 hash技术:以Bloom filter技术为代表 外排序:主要适用于大数据的排序.去重. 分布式处理技术:MapReduce 技术思想是将数据交给不同的机器去处理,将数据切分,之后结果归约. 举例,统计出一批数据的TOP N 首先可以根据数据值或者数据HASH(MD5)后的值将数据按照范围划分,不同的服务器负责处理各种的数值范围,实

海量数据处理策略之一—Hash映射 + Hash_map统计 + 堆/快速/归并排序

时间:2014.05.21 地点:基地 说明:根据July的博客等整理,感谢July的无私奉献 心情:现在都好开心呀,想着要为以后的时光好好奋斗~ --------------------------------------------------------------------------------------- 一.问题描述 海量日志数据,提取出某日访问百度次数最多的那个IP. 思路:由于数据集很大,我们的策略是先用哈希映射将海量数据集映射为适当数量的非海量数据集,这个非海量数据集的大

海量数据处理--hash和bit-map

问题实例: 海量日志数据,提取出某日访问百度次数最多的那个IP. 答:对于ip,最多也就2^32个.所以可以很好地通过hash函数映射到内存中,再进行统计. IP最多为2^32个,为4G,一次放入内存中不行,可以采用分而治之的方法,先Hash(IP)/1024,将IP地址分别映射到1024个小文件中,每个文件4M,再将每个小文件中的IP放入内存中,进行hashmap,统计出出现频率最高的那个IP,最后可以得到1024个出现高频的IP,采用冒泡排序,可以迅速找出频率最高的那个IP.1 原理简述:

海量数据处理算法总结【超详解】

1. Bloom Filter [Bloom Filter]Bloom Filter(BF)是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合.它是一个判断元素是否存在集合的快速的概率算法.Bloom Filter有可能会出现错误判断,但不会漏掉判断.也就是Bloom Filter判断元素不再集合,那肯定不在.如果判断元素存在集合中,有一定的概率判断错误.因此,Bloom Filter不适合那些“零错误”的应用场合. 而在能容忍低错误率的应用场合

从hadoop框架与MapReduce模式中谈海量数据处理

前言 几周前,当我最初听到,以致后来初次接触Hadoop与MapReduce这两个东西,我便稍显兴奋,觉得它们很是神秘,而神秘的东西常能勾起我的兴趣,在看过介绍它们的文章或论文之后,觉得Hadoop是一项富有趣味和挑战性的技术,且它还牵扯到了一个我更加感兴趣的话题:海量数据处理. 由此,最近凡是空闲时,便在看“Hadoop”,“MapReduce”“海量数据处理”这方面的论文.但在看论文的过程中,总觉得那些论文都是浅尝辄止,常常看的很不过瘾,总是一个东西刚要讲到紧要处,它便结束了,让我好生“愤懑