海量数据处理

海量数据处理(查重,topk)

两盒软妹~` 提交于 2019-12-08 18:32:06
文章目录 查重问题 哈希表 示例问题:找第一个重复的数字 统计数字及其出现的次数可以使用无序映射表 求top k 对内存有限制的大数据处理 查重问题 查重:就是在一组海量数据中,查找重复的数据,一般的解题思路就是 哈希表 哈希表 名称 特点 unordered_set 单重集合,只存放key,不允许key重复 unordered_multiset 多重集合,只存放key,允许key重复 unordered_map 单重映射表,存放[key, value]键值对,不允许key重复 unordered_multimap 多重映射表,存放[key, value]键值对,允许key重复 示例问题:找第一个重复的数字 int main ( ) { vector < int > vec ; //将要查找的数据放在vec中 for ( int i = 0 ; i < 200000 ; ++ i ) { vec . push_back ( rand ( ) ) ; } // 用哈希表解决查重,因为只查重,所以用无序集合解决该问题 unordered_set < int > hashSet ; for ( int val : vec ) { // 在哈希表中查找val auto it = hashSet . find ( val ) ; if ( it != hashSet . end ( ) )

海量数据处理的 Top K相关问题

折月煮酒 提交于 2019-12-08 18:30:05
Top-k的最小堆解决方法 问题描述:有N(N>>10000)个整数,求出其中的前K个最大的数。(称作Top k或者Top 10) 问题分析:由于(1)输入的大量数据;(2)只要前K个,对整个输入数据的保存和排序是相当的不可取的。 可以利用数据结构的最小堆来处理该问题。 最小堆如图所示,对于每个非叶子节点的数值,一定不大于孩子节点的数值。这样可用含有K个节点的最小堆来保存K个目前的最大值(当然根节点是其中的最小数值)。 每次有数据输入的时候可以先与根节点比较。若不大于根节点,则舍弃;否则用新数值替换根节点数值。并进行最小堆的调整。 TOP K的python代码实现 def heap_sort (ary, k) : # 构建小顶堆 def siftdown (ary, begin, end) : i,j = begin, begin* 2 + 1 while j < end: if j+ 1 < end and ary[j+ 1 ] < ary[j]: # 查看左右子树的最小节点 j += 1 if ary[i] < ary[j]: # 如果不需要交换了,则停止 break ary[i],ary[j] = ary[j],ary[i] # 交换父和子 i,j = j,j* 2 + 1 # 构建最小堆 end = len(ary) for i in range(end// 2 - 1 ,

海量数据处理常用技术概述

こ雲淡風輕ζ 提交于 2019-12-08 18:22:22
(题图:from unsplash ) 海量数据处理常用技术概述 如今互联网产生的数据量已经达到PB级别,如何在数据量不断增大的情况下,依然保证快速的检索或者更新数据,是我们面临的问题。 所谓海量数据处理,是指基于海量数据的存储、处理和操作等。因为数据量太大无法在短时间迅速解决,或者不能一次性读入内存中。 在解决海量数据的问题的时候,我们需要什么样的策略和技术,是每一个人都会关心的问题。今天我们就梳理一下在解决大数据问题 的时候需要使用的技术,但是注意这里只是从技术角度进行分析,只是一种思想并不代表业界的技术策略。 常用到的算法策略: 分治:多层划分、MapReduce 排序:快速排序、桶排序、堆排序 数据结构:堆、位图、布隆过滤器、倒排索引、二叉树、Trie树、B树,红黑树 Hash映射:hashMap、simhash、局部敏感哈希 从分而治之到Mapreduce 分治 分治是一种算法思想,主要目的是将一个大问题分成多个小问题进行求解,之后合并结果。我们常用到的有归并排序: 先分成两部分进行排序,之后在合并 , 我们可以抽象成几个步骤: 多个文件的输入,我们叫做 input splits 多进程同时处理多个文档,我们叫做 map 。 partition 从上文中我们知道。因为我们要将相同的Query映射的一起 多进程处理划分或的文件,我们叫做 reduce 合并过个文件的结果

海量数据处理方法及应用

[亡魂溺海] 提交于 2019-12-08 18:22:06
一、哈希切割top K问题 1. 给一个超过100G大小的log file, log中存着IP地址, 设计算法找到出现次数最多的IP地址? (1)首先使用散列函数HashFunc(ip)将每一个IP地址转化为整型,再通过HashFunc(ip)%1000使得每一个IP各自进入到所切分的1000个小文件中,余数是多少就映射到多少号文件中,这样做能保证相同IP进入到同一文件中; (2)接着在每一个小文件中建立Key-Value模型的哈希表,各自统计出Value(出现次数)最大的IP; (3)最后依次比较这1000个小文件中出现次数最多的IP,找到最终出现次数最多的IP地址。 2. 与上题条件相同,如何找到top K的IP? 先对第一个小文件的数据建立小堆(大小为K),存入出现次数最多的前K个IP,再依次读入每一个文件,将每一个IP的出现次数与堆中IP次数比较,如果大于堆顶的IP,则替换堆顶,并更新堆,依次执行下去,直到1000个文件全部读完,整个堆的数据即为出现次数最多的前K个IP。 二、位图应用 1. 给定100亿个整数,设计算法找到只出现一次的整数 所有整数的范围是从0到42亿9千万,每个整型占用4字节,这样存放这些整数至少需要16G的内存空间,太耗费空间了,如果用位图的思想来解决这个问题,就可以大幅度节省空间。 在该题中需要注意的是要统计次数

教你如何迅速秒杀99%的海量数据处理面试题

前提是你 提交于 2019-12-08 18:21:42
教你如何迅速秒杀99%的海量数据处理面试题 教你如何迅速秒杀99%的海量数据处理面试题 作者:July 出处:结构之法算法之道blog 前言 一般而言,标题含有“秒杀”,“99%”,“史上最全/最强”等词汇的往往都脱不了哗众取宠之嫌,但进一步来讲,如果读者读罢此文,却无任何收获,那么,我也甘愿背负这样的罪名,:-),同时,此文可以看做是对这篇文章: 十道海量数据处理面试题与十个方法大总结 的一般抽象性总结。 毕竟受文章和理论之限,本文摒弃绝大部分的细节,只谈方法/模式论,且注重用最通俗最直白的语言阐述相关问题。最后,有一点必须强调的是,全文行文是基于面试题的分析基础之上的,具体实践过程中,还是得具体情况具体分析,且场景也远比本文所述的任何一种场景复杂得多。 OK,若有任何问题,欢迎随时不吝赐教。谢谢。 何谓海量数据处理? 所谓海量数据处理,其实很简单,海量,海量,何谓海量,就是数据量太大,所以导致要么是无法在较短时间内迅速解决,要么是数据太大,导致无法一次性装入内存。 那解决办法呢?针对时间,我们可以采用巧妙的算法搭配合适的数据结构,如 Bloom filter/Hash/bit-map/堆/数据库或倒排索引/trie/ ,针对空间,无非就一个办法:大而化小: 分而治之/hash映射 ,你不是说规模太大嘛,那简单啊,就把规模大化为规模小的,各个击破不就完了嘛。

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

邮差的信 提交于 2019-12-08 18:20:07
废话不说直接来一张图如下: 从JVM的角度看Map和Reduce Map阶段包括: 第一读数据:从HDFS读取数据 1、问题:读取数据产生多少个Mapper?? Mapper数据过大的话,会产生大量的小文件,由于Mapper是基于虚拟机的,过多的Mapper创建和初始化及关闭虚拟机都会消耗大量的硬件资源; Mapper数太小,并发度过小,Job执行时间过长,无法充分利用分布式硬件资源; 2 、 Mapper 数量由什么决定?? ( 1 ) 输入文件数目 ( 2 ) 输入文件的大小 ( 3 ) 配置参数 这三个因素决定的。 涉及参数: mapreduce.input.fileinputformat.split.minsize //启动map最小的split size大小,默认0 mapreduce.input.fileinputformat.split.maxsize //启动map最大的split size大小,默认256M dfs.block.size//block块大小,默认64M 计算公式:splitSize = Math.max(minSize, Math.min(maxSize, blockSize)); 例如 默认情况下:例如一个文件800M,Block大小是128M,那么Mapper数目就是7个。6个Mapper处理的数据是128M,1个Mapper处理的数据是32M

MySQL海量数据处理及优化

与世无争的帅哥 提交于 2019-12-08 18:08:48
什么是mysql MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。 为什么是mysql MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。 MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。 mysql的用法 1 默认约束 create table emp (id int default 12) 2 设置自增 create table emp(id int identity(1,1) 3 查看表定义 desc emp 4 修改表明 alter table emp rename emp2 4 修改字段的数据类型 alter table emp rename emp2 4 修改表明 alter table emp2 modify id biginf

实战hadoop海量数据处理系列05 : 实现点击流日志的数据清洗模块

余生颓废 提交于 2019-12-08 18:07:07
实战hadoop海量数据处理系列05 : 实现点击流日志的数据清洗模块 之前已经实现结构化数据的清洗,下一步我们将实现半结构化(非结构化)数据的清洗。 本文假设读者已搭建好了eclipse环境,并且已经导入ClickStreamETL文件夹下面的子工程。 如果遇到环境相关的问题,可以在专门的帖子下面留言。 在阅读本文前,强烈建议阅读原书“实现点击流日志的数据清洗模块”章节。 本文的代码同步于github,相关地址如下: github地址 本系列博客专栏地址 overview 经典重现,引入原书流程图和map-reduce排序图说明原理。 为了还原案例,本项目增强了日志中的cookie,独有动态图演示执行过程,并在最后尾部给出开发中的若干思考。 全文脉络如下: - 流程图 - 日志格式解析 - 排序流程图 - 重要代码解释 - 运行结果 - 工程实践思考 1 流程图 从原书摘取了经典的流程图,在于说明流程框架的重要性,因为流程贯穿全章节。 2日志格式解析 先列出一条日志,样式如下: 120.196 .145 .58 - - [ 11 / Dec / 2013 : 10 : 00 : 32 + 0800 ] "GET /__utm.gif" 200 35 "http://easternmiles.ceair.com/flight/index.html" "Mozilla/5.0

海量数据处理——学习资料(一)

冷暖自知 提交于 2019-12-08 18:06:11
所谓海量数据处理,无非就是基于海量数据上的存储、处理、操作。何谓海量,就是数据量太大,所以导致要么是无法在较短时间内迅速解决,要么是数据太大,导致无法一次性装入内存。 那解决办法呢?针对时间,我们可以采用巧妙的算法搭配合适的数据结构,如Bloom filter/Hash/bit-map/堆/数据库或倒排索引/trie树,针对空间,无非就一个办法:大而化小:分而治之/hash映射,你不是说规模太大嘛,那简单啊,就把规模大化为规模小的,各个击破不就完了嘛。 至于所谓的单机及集群问题,通俗点来讲,单机就是处理装载数据的机器有限(只要考虑cpu,内存,硬盘的数据交互),而集群,机器有多辆,适合分布式处理,并行计算(更多考虑节点和节点间的数据交互)。 再者,通过本blog内的有关海量数据处理的文章:Big Data Processing,我们已经大致知道,处理海量数据问题,无非就是: 分而治之/hash映射 + hash统计 + 堆/快速/归并排序: 分而治之/hash映射:针对数据太大,内存受限,只能是:把大文件化成(取模映射)小文件,即16字方针:大而化小,各个击破,缩小规模,逐个解决 hash统计:当大文件转化了小文件,那么我们便可以采用常规的hash_map(ip,value)来进行频率统计。 堆/快速排序:统计完了之后,便进行排序(可采取堆排序),得到次数最多的IP。 双层桶划分:

海量数据处理学习资料收集

自古美人都是妖i 提交于 2019-12-08 18:04:10
十道海量数据处理面试题与十个方法大总结 http://blog.csdn.net/v_july_v/article/details/6279498 海量数据处理面试题集锦与Bit-map详解 http://blog.csdn.net/v_july_v/article/details/6685962 海量数据处理之Bloom Filter详解 http://blog.csdn.net/v_july_v/article/details/6685894 从几幅架构图中偷得半点海量数据处理经验 http://blog.csdn.net/v_july_v/article/details/6689489 转载于:https://www.cnblogs.com/webols/archive/2011/10/06/2200136.html 来源: CSDN 作者: weixin_30808575 链接: https://blog.csdn.net/weixin_30808575/article/details/96771468