10道海量数据处理面试题与11个章程大总计澳门美高梅手机网站

作者:July、youwang、yanxionglu。
时光:二零壹一年八月1十13日
正文之总括:教您怎么着急忙秒杀掉:9九%的海量数据处理面试题。有任何难点,欢迎随时交换、指正。

背景:集团必要搭建openstack私有云。配置两台物理服务器。

出处:http://blog.csdn.net/v\_JULY\_v

 

率先有的、10道海量数据处理面试题

1、海量日志数据,提取出某日访问百度次数最多的充足IP。

     
首先是那1天,并且是造访百度的日记中的IP取出来,各个写入到1个大文件中。注意到IP是叁拾肆个人的,最多有个二^3四个IP。同样能够利用映射的格局,比如模一千,把整体大文件映射为一千个小文件,再找出各种小文中出现频率最大的IP(可以行使hash_map举行频率总括,然后再找出效用最大的多少个)及相应的频率。然后再在这1000个最大的IP中,找出非常频率最大的IP,即为所求。

抑或正如阐释(雪域之鹰):
算法思想:分而治之+Hash

一.IP地方最多有二^3二=四G种取值景况,所以不能完全加载到内部存储器中处理; 
二.方可挂念采用“分而治之”的沉思,依据IP地址的Hash(IP)%10二4值,把海量IP日志分别存款和储蓄到十二五个小文件中。那样,每一个小文件最多包蕴4MB个IP地址; 
三.对此每2个小文件,能够构建三个IP为key,出现次数为value的Hash
map,同时记录当前边世次数最多的那2个IP地址;
4.得以获得拾二十个小文件中的出现次数最多的IP,再依照常规的排序算法得到完全上冒出次数最多的IP;

2、搜索引擎会通过日记文件把用户每一遍搜寻使用的拥有检索串都记录下来,各类查询串的长度为壹-25五字节。    
若是近年来有一千万个记录(这几个查询串的重复度相比高,纵然总数是一千万,但只要除去重复后,不超过三百万个。三个查询串的重复度越高,说明查询它的用户更多,也等于越热门。),请你总计最紧俏的十个查询串,须求采取的内部存储器不能够超越一G。

    典型的Top
K算法,照旧在那篇文章里头有所阐述,详情请参见:10一、从头到尾彻底解析Hash表算法。
    
    文中,给出的最后算法是:
   
第3步、先对那批海量数据预处理,在O(N)的日子内用Hash表实现统计(此前写成了排序,特此校勘。July、2011.0四.2柒);
    第1步、借助堆那个数据结构,找出Top K,时间复杂度为N‘logK。
       
即,借助堆结构,我们能够在log量级的时光内寻找和调整/移动。因而,维护3个K(该难题中是10)大小的小根堆,然后遍历300万的Query,分别和根成分举办自己检查自纠所以,我们最终的岁月复杂度是:O(N)

  • N’*O(logK),(N为一千万,N’为300万)。ok,越多,详情,请参考原来的书文。

   
或许:采纳trie树,关键字域存该查询串出现的次数,未有出现为0。最终用11个要素的相当小推来对出现频率实行排序。

3、有3个1G分寸的三个文件,里面每一行是二个词,词的深浅不超过1陆字节,内部存款和储蓄器限制大小是1M。重临频数最高的九20个词。

   
方案:顺序读文件中,对于每种词x,取hash(x)%4000,然后根据该值存到五千个小文件(记为x0,x1,…x499玖)中。那样各样文件大致是200k左右。

   
借使中间的部分文件超过了1M轻重,还足以遵照类似的措施继续往下分,直到分解获得的小文件的深浅都不当先1M。
   
对种种小文件,总结各类文件中冒出的词以及对应的功用(能够接纳trie树/hash_map等),并取出出现频率最大的九十七个词(能够用含九十九个结点的最小堆),并把玖七个词及相应的功能存入文件,那样又赢得了陆仟个文本。下一步便是把那四千个公文进行联合(类似与归并排序)的进程了。

4、有11个文本,各样文件1G,各种文件的每1行存放的都以用户的query,各种文件的query都或许再次。供给您依据query的频度排序。

    照旧百里挑1的TOP K算法,消除方案如下:
    方案1:
   
顺序读取10个公文,根据hash(query)%10的结果将query写入到其余13个文本(记为)中。那样新变化的公文每种的轻重差不多也1G(假若hash函数是任意的)。
    
    找一台内设有2G左右的机器,依次对用hash_map(query,
query_count)来总计每一种query现身的次数。利用高效/堆/归并排序遵照出现次数进行排序。将排序好的query和呼应的query_cout输出到文件中。那样获得了12个排好序的文书(记为)。

    对那十一个文本进行归并排序(内排序与向外排水序相结合)。

    方案2:
    
1般query的总量是少数的,只是再一次的次数相比较多而已,恐怕对于有所的query,二遍性就足以投入到内部存储器了。那样,大家就可以运用trie树/hash_map等向来来总括每一种query出现的次数,然后按现身次数做快捷/堆/归并排序就足以了。

    方案3:
   
与方案1近似,但在做完hash,分成三个文件后,能够付出七个文本来拍卖,选取分布式的架构来处理(比如MapReduce),最终再实行合并。

5、
给定a、b五个公文,各存放50亿个url,每种url各占6四字节,内部存款和储蓄器限制是四G,让你找出a、b文件共同的url?

   
方案1:能够估量每个文件安的轻重为伍G×6四=320G,远远不止内部存款和储蓄器限制的四G。所以不恐怕将其完全加载到内部存款和储蓄器中处理。思量动用分而治之的主意。

   
遍历文件a,对各种url求取hash(url)%一千,然后依照所收获的值将url分别存款和储蓄到1000个小文件(记为a0,a1,…,a99九)中。那样各种小文件的大致为300M。

   
遍历文件b,选拔和a相同的艺术将url分别存款和储蓄到一千小文件(记为b0,b1,…,b99玖)。那样处理后,全数希望同样的url都在对应的小文件(a0vsb0,a一vsb一,…,a99玖vsb99玖)中,不对应的小文件非常的小概有雷同的url。然后大家只要求出一千对小文件中1律的url即可。

   
求每对小文件中相同的url时,能够把里面3个小文件的url存款和储蓄到hash_set中。然后遍历另1个小文件的各类url,看其是还是不是在刚刚营造的hash_set中,假诺是,那么正是共同的url,存到文件之中就足以了。

    方案二:要是允许有早晚的错误率,能够采纳Bloom
filter,4G内部存款和储蓄器大概能够象征340亿bit。将当中二个文本中的url使用Bloom
filter映射为那340亿bit,然后依次读取其余二个文件的url,检查是或不是与Bloom
filter,假若是,那么该url应该是同台的url(注意会有早晚的错误率)。

    Bloom filter日后会在本BLOG内详细阐释。

6、在二.伍亿个整数中找出不另行的平头,注,内部存款和储蓄器不足以容纳那贰.5亿个整数。

   
方案一:选取2-Bitmap(各种数分配2bit,00代表不设有,0一代表现身贰遍,十意味着多次,1壹无意义)进行,共需内部存款和储蓄器贰^3贰
* 贰 bit=一GB内部存款和储蓄器,仍是还可以。然后扫描那2.伍亿个整数,查看Bitmap中相对应位,若是是00变0壹,0壹变十,10维持不变。所描完事后,查看bitmap,把对应位是0一的平头输出即可。

   
方案二:也可选择与第1题类似的办法,实行分割小文件的点子。然后在小文件中找出不另行的平头,并排序。然后再拓展统壹,注意去除重复的成分。

七、腾讯面试题:给40亿个不另行的unsigned
int的平头,没排过序的,然后再给二个数,怎样高效判断那一个数是或不是在这40亿个数当中?

   
与上第肆题类似,小编的率先反馈时赶快排序+二分查找。以下是其余更加好的措施:
    方案1:oo,申请51二M的内部存款和储蓄器,一个bit位代表多少个unsigned
int值。读入40亿个数,设置相应的bit位,读入要询问的数,查占卜应bit位是或不是为一,为一象征存在,为0表示不设有。

    dizengrong:
    方案2:那么些难题在《编程珠玑》里有很好的叙说,我们能够参见上边包车型客车思绪,斟酌一下:
又因为二^3二为40亿多,所以给定三个数或然在,也说不定不在其中;
此处大家把40亿个数中的每叁个用叁拾贰个人的2进制来表示
若是那40亿个数初阶放在3个文本中。

    然后将这40亿个数分成两类:
      壹.最高位为0
      二.最高位为一
   
并将那两类分别写入到多少个文本中,其中3个文本中数的个数<=20亿,而另一个>=20亿(这一定于折半了);
与要寻找的数的参天位对比并随后进入相应的文书再找找

    再接下来把这么些文件为又分为两类:
      一.次参天位为0
      二.次高高的位为一

   
并将这两类分别写入到多个文本中,其中3个文书中数的个数<=10亿,而另1个>=拾亿(这一定于折半了);
    与要寻找的数的次最高位比较并随后进入相应的公文再寻觅。
    …….
    以此类推,就能够找到了,而且时间复杂度为O(logn),方案二完。

   附:此处,再不难介绍下,位图方法:
    使用位图法判断整形数组是还是不是留存重复 
   
判断集合中设有重新是广阔编制程序任务之一,当集合中数据量比较大时我们常见希望少进行五遍扫描,那时双重循环法就不可取了。

   
位图法相比吻合于那种场合,它的做法是遵从集合中最大因素max创建七个长短为max+一的新数组,然后重新扫描原数组,碰到几就给新数组的第几职位上壹,如遇上伍就给新数组的第伍个成分置一,那样下次再相见五想置位时发现新数组的第陆个因素已经是1了,那声明这一次的数额肯定和从前的数额存在注重新。那种给新数组初始化时置零其前置一的做法类似于位图的拍卖措施故称位图法。它的演算次数最坏的图景为二N。假设已知数组的最大值即能事先给新数组定长的话效能还是能增高壹倍。

    欢迎,有更加好的思路,或格局,共同交流。

捌、怎么在海量数据中找出重新次数最多的3个?    
   
方案壹:先做hash,然后求模映射为小文件,求出种种小文件中重新次数最多的多少个,并记录重复次数。然后找出上一步求出的多寡中另行次数最多的1个便是所求(具体参考前边的题)。

玖、上千万或上亿数据(有双重),总计其中出现次数最多的钱N个数据。

   
方案1:上千万或上亿的数目,以后的机器的内部存款和储蓄器应该能存下。所以思索接纳hash_map/搜索贰叉树/红黑树等来实行总结次数。然后便是取出前N个冒出次数最多的数目了,能够用第二题提到的堆机制完结。

10、三个文件文件,大概有一万行,每行一个词,要求总结出当中最频繁出现的前10个词,请给出思想,给出时间复杂度分析。

   
方案一:那题是考虑时间功能。用trie树总括每一个词出现的次数,时间复杂度是O(n*le)(le表示单词的平准长度)。然后是找出出现最频仍的前13个词,能够用堆来完结,前面包车型客车题中已经讲到了,时间复杂度是O(n*lg10)。所以总的时间复杂度,是O(n*le)与O(n*lg10)中较大的哪贰个。

附、十0w个数中找出最大的玖拾玖个数。

   
方案壹:在眼下的题中,我们已经涉及了,用三个含九八个成分的极小堆落成。复杂度为O(拾0w*lg100)。

   
方案二:接纳飞快排序的合计,每一回分割之后只思量比轴大的壹某些,知道比轴大的1有些在比100多的时候,选用古板排序算法排序,取前九十几个。复杂度为O(100w*100)。

   
方案三:选用局地淘汰法。选择前九陆个要素,并排序,记为连串L。然后一次扫描剩余的元素x,与排好序的玖拾柒个因素中细小的因素比,若是比那些小小的要大,那么把这几个小小的的成分删除,并把x利用插入排序的沉思,插入到体系L中。依次轮回,知道扫描了具备的要素。复杂度为O(十0w*100)。

致谢:http://www.cnblogs.com/youwang/

 

第壹有个别、十三个海量数据处理办法大计算

   
ok,看了地点这么多的面试题,是不是有点头晕。是的,要求3个总计。接下来,本文将容易总结下一些拍卖海量数据难题的科普方法,而随后,本BLOG内会切实阐释这几个点子。

    下边包车型大巴办法漫天源于http://hi.baidu.com/yanxionglu/blog/博客,对海量数据的处理方式开始展览了多少个平常的总括,当然那个措施只怕并无法一心覆盖全部的题材,然而这样的一对方法也基本得以处理绝超越4五%遇见的标题。上面包车型地铁部分难题着力直接来源公司的面试笔试标题,方法不必然最优,假若你有越来越好的拍卖措施,欢迎研商。

一、Bloom filter

  适用范围:可以用来兑现数量字典,举行数量的判重,或许集合求交集

  基本原理及大旨:
  对于原理来说很不难,位数组+k个独立hash函数。将hash函数对应的值的位数组置一,查找时假诺发现具有hash函数对应位都是1表明存在,很醒目这几个进程并不保险查找的结果是百分之百正确的。同时也不补助删除3个壹度插入的关键字,因为该关键字对应的位会带动到别的的重要性字。所以贰个简易的一字不苟正是counting Bloom filter,用二个counter数组代替位数组,就可以帮助删除了。

  还有3个相比较关键的难点,怎样依据输入成分个数n,分明位数组m的大大小小及hash函数个数。当hash函数个数k=(ln二)*(m/n)时错误率最小。在错误率十分小于E的意况下,m至少要等于n*lg(1/E)才能表示任意n个因素的成团。但m还应该更加大些,因为还要保险bit数组里起码八分之四为0,则m应该>=nlg(1/E)*lge
大约便是nlg(1/E)1.44倍(lg表示以二为底的对数)。

  举个例子我们就算错误率为0.0壹,则此时m应大约是n的壹叁倍。那样k差不离是7个。

  注意那里m与n的单位差别,m是bit为单位,而n则是以成分个数为单位(准确的身为不一致因素的个数)。平常单个成分的长度都以有很多bit的。所以采纳bloom
filter内部存款和储蓄器上日常都以省去的。

  扩展:
  Bloom
filter将汇集中的成分映射到位数组中,用k(k为哈希函数个数)个映射位是不是全壹表示成分在不在这些集合中。Counting
bloom
filter(CBF)将位数组中的每1人扩展为贰个counter,从而援救了成分的删减操作。Spectral
Bloom
Filter(SBF)将其与集合成分的出现次数关联。SBF选取counter中的最小值来就像表示成分的产出频率。

  难点实例:给你A,B多少个公文,各存放50亿条UENCOREL,每条UEvoqueL占用6四字节,内部存款和储蓄器限制是4G,让您找出A,B文件共同的U奥迪Q5L。要是是多个甚至n个文件呢?

  遵照这几个问题咱们来测算下内存的占据,4G=二^32大致是40亿*八差不离是340亿,n=50亿,倘若按出错率0.0一算须求的大概是650亿个bit。以后可用的是340亿,相差并不多,那样恐怕会使出错率上升些。此外假诺那几个urlip是种种对应的,就能够转换到ip,则大大简单了。

二、Hashing

  适用范围:快速搜索,删除的中坚数据结构,平常须要总数据量能够放入内部存款和储蓄器

  基本原理及大旨:
  hash函数选择,针对字符串,整数,排列,具体对应的hash方法。
  碰撞处理,一种是open hashing,也叫做拉链法;另一种正是closed
hashing,也称开地址法,opened addressing。

      扩展:
  d-left hashing中的d是多个的趣味,大家先简化那几个题材,看一看二-left
hashing。二-left
hashing指的是将叁个哈希表分成长度相等的两半,分别叫做T一和T二,给T一和T贰分别布置一个哈希函数,h一和h二。在存款和储蓄多少个新的key时,同时用五个哈希函数实行总结,得出八个地方h一[key]和h2[key]。那时须求检查T1中的h一[key]位置和T2中的h2[key]地方,哪三个地点已经储存的(有相撞的)key比较多,然后将新key存款和储蓄在负载少的职位。假诺两边1样多,比如多少个地点都为空也许都存款和储蓄了三个key,就把新key存款和储蓄在左手的T一子表中,二-left也因此而来。在追寻二个key时,必须进行一回hash,同时摸索七个地点。

  难题实例:
  1).海量日志数据,提取出某日访问百度次数最多的不行IP。
  IP的数目依旧不难的,最多2^3十个,所以能够设想使用hash将ip直接存入内部存款和储蓄器,然后开始展览计算。

三、bit-map

  适用范围:可开始展览数据的敏捷搜索,判重,删除,一般的话多少范围是int的10倍以下

  基本原理及中央:使用bit数组来表示有个别因素是不是留存,比如6位电话号码

  扩张:bloom filter能够作为是对bit-map的扩大

  难题实例:
  1)已知某些文件内涵盖部分电话号码,每一个号码为五个人数字,总结分裂号码的个数。
  7位最多9玖 999 99玖,差不多须求9九m个bit,大致10几m字节的内部存款和储蓄器即可。
  二)二.伍亿个整数中找出不重复的整数的个数,内部存款和储蓄器空间不足以容纳那二.5亿个整数。

  将bit-map扩展一下,用2bit代表一个数即可,0象征未出现,1代表出现2遍,贰代表出现1遍及以上。只怕大家不用贰bit来拓展表示,大家用八个bit-map即可模拟达成这几个二bit-map。

四、堆

  适用范围:海量数据前n大,并且n比较小,堆能够放入内部存款和储蓄器

  基本原理及中央:最大堆求前n小,最小堆求前n大。方法,比如求前n小,大家相比当前因素与最大堆里的最大要素,若是它小于最大因素,则应当替换这几个最大要素。那样结尾取得的n个成分正是微乎其微的n个。适合大数据量,求前n小,n的大大小小相比较小的情状,那样能够扫描一遍即可获得全部的前n成分,功效很高。

  扩大:双堆,1个最大堆与四个极小堆结合,能够用来维护中位数。

  难点实例:
  一)十0w个数中找最大的前玖十七个数。
  用一个玖十六个因素大小的最小堆即可。

 

五、双层桶划分—-其实本质上正是【分而治之】的沉思,重在“分”的技艺上!

  适用范围:第k大,中位数,不另行或另行的数字
  基本原理及大旨:因为成分范围极大,不能采纳直接寻址表,所以经过反复划分,稳步明显限制,然后最终在二个足以承受的范围内展开。能够因此反复裁减,双层只是一个事例。

  扩展:
  难题实例:
  一).二.五亿个整数中找出不重复的平头的个数,内部存储器空间不足以容纳那二.伍亿个整数。
  有点像鸽巢原理,整数个数为贰^3二,也正是,大家能够将那贰^三1七个数,划分为二^九个区域(比如用单个文件表示三个区域),然后将数据分离到分化的区域,然后不一样的区域在动用bitmap就能够直接解决了。也等于说只要有丰富的磁盘空间,就足以很有益的缓解。

  二).五亿个int找它们的中位数。
  那么些事例比地点拾叁分更鲜明。首先大家将int划分为二^15个区域,然后读取数据总括落到各个地方里的数的个数,之后大家依照计算结果就足以判定中位数落到那么些区域,同时理解这么些区域中的第几大数刚好是中位数。然后第一遍扫描我们只总计落在这一个区域中的那多少个数就能够了。

  实际上,假如不是int是int64,我们能够通过三回那样的细分即可下落到还可以的水平。即能够先将int陆十六分成2^2八个区域,然后分明区域的第几大数,在将该区域分为贰^17个子区域,然后鲜明是子区域的第几大数,然后子区域里的数的个数只有二^20,就能够直接选拔direct
addr table进行计算了。

陆、数据库索引

  适用范围:大数据量的增加和删除改查

  基本原理及中央:利用数据的统一筹划达成格局,对海量数据的增加和删除改查实行拍卖。

7、倒排索引(Inverted index)

  适用范围:搜索引擎,关键字查询

  基本原理及宗旨:为什么叫倒排索引?壹种索引方法,被用来储存在全文字笔迹检查实验索下某些单词在三个文书档案大概一组文书档案中的存款和储蓄地方的炫耀。

 以英文为例,上边是要被索引的公文:
    T0 = “it is what it is”
    T1 = “what is it”
    T2 = “it is a banana”

我们就能获得下边的反向文件目录:

    “a”:      {2}
    “banana”: {2}
    “is”:     {0, 1, 2}
    “it”:     {0, 1, 2}
    “what”:   {0, 1}

 检索的尺度”what”,”is”和”it”将相应集合的插花。

  正向索引开发出来用来囤积每种文书档案的单词的列表。正向索引的询问往往知足各样文书档案有序频仍的全文查询和各种单词在校验文档中的验证那样的询问。在正向索引中,文书档案占据了宗旨的职位,每种文书档案指向了叁个它所包蕴的索引项的行列。相当于说文书档案指向了它富含的这几个单词,而反向索引则是单词指向了蕴藏它的文书档案,很不难见到这么些反向的涉及。

  扩展:
  难点实例:文书档案检索系统,查询那个文件包罗了某单词,比如大规模的学术散文的最首要字搜索。

八、外排序

  适用范围:大数量的排序,去重

  基本原理及中央:向外排水序的合并措施,置换选择败者树原理,最优归并树

  扩展:

  难点实例:
  1).有1个壹G轻重的二个文书,里面每一行是2个词,词的尺寸不超过15个字节,内部存款和储蓄器限制大小是1M。再次来到频数最高的一百个词。

  那么些数量有所很明朗的表征,词的尺寸为1陆个字节,可是内部存款和储蓄器唯有壹m做hash有个别不够,所以可以用来排序。内部存款和储蓄器能够当输入缓冲区使用。

九、trie树

  适用范围:数据量大,重复多,可是数量体系小能够放入内部存款和储蓄器

  基本原理及中央:落成格局,节点孩子的象征方法

  扩张:压缩实现。

  难题实例:
  1).有十三个文本,各个文件一G,每种文件的每1行都存放的是用户的query,各样文件的query都大概再次。要你依照query的频度排序。
  2).1000万字符串,当中多少是壹致的(重复),须要把重复的凡事去掉,保留未有再一次的字符串。请问怎么统筹和达成?
  三).寻找热门查询:查询串的重复度相比高,纵然总数是一千万,但假使除去重复后,不超越三百万个,每一个不当先255字节。

十、分布式处理 mapreduce

  适用范围:数据量大,可是数量种类小能够放入内部存款和储蓄器

  基本原理及中央:将数据交到差别的机器去处理,数据划分,结果归约。

  扩展:
  难题实例:
  1).The canonical example application of MapReduce is a process to
count the appearances of
each different word in a set of documents:
  二).海量数据分布在100台电脑中,想个办法高效总计出那批数量的TOP10。
  三).一共有N个机器,各类机器上有N个数。每种机器最多存O(N)个数并对它们操作。如何找到N^贰个数的中数(median)?

经文难点分析
  上千万or亿数据(有双重),总结个中出现次数最多的前N个数据,分三种意况:可1次读入内部存款和储蓄器,不可三回读入。

  可用思路:trie树+堆,数据库索引,划分子集分别计算,hash,分布式总括,近似总括,向外排水序

  所谓的是否能三遍读入内部存款和储蓄器,实际上应该指去除重复后的数据量。假若去重后数据能够放入内部存款和储蓄器,大家得以为数量建立字典,比如通过
map,hashmap,trie,然后直接举办总结即可。当然在立异每条数据的面世次数的时候,大家可以使用三个堆来爱戴出现次数最多的前N个数据,当然如此造成维护次数增多,不比完全计算后在求前N大功用高。

  假设数量无法放入内存。一方面大家能够设想地点的字典方法是或不是被校对以适应那种状态,能够做的改动正是将字典存放到硬盘上,而不是内部存款和储蓄器,那足以参照数据库的储存方法。

  当然还有更加好的不二等秘书籍,正是能够动用分布式总计,基本上正是map-reduce进度,首先能够根据数据值可能把数量hash(md五)后的值,将数据依照范围划分到不一样的电话,最棒能够让多少划分后方可3遍读入内部存款和储蓄器,那样区别的电话机负责处理各类的数值范围,实际上正是map。得到结果后,各种机子只需拿出个别的面世次数最多的前N个数据,然后集中,选出全部的多少中冒出次数最多的前N个数据,这实质上就是reduce进度。

  实际上也许想一贯将数据均分到分歧的电电话机上进展拍卖,那样是无能为力获得不错的解的。因为一个数码只怕被均分到差别的电话机上,而另多少个则可能完全聚集到3个电话上,同时还或许存在具有同等数量的数据。比如大家要找出现次数最多的前一百个,大家将一千万的数据分布到拾台机械上,找到每台出现次数最多的前
九十三个,归并之后那样无法保障找到真正的第柒0个,因为比如出现次数最多的第八0个恐怕有一万个,可是它被分到了10台机子,那样在每台上唯有1千个,如果这个电话排行在1000个此前的那么些都以独立分布在1台机子上的,比如有拾0一个,这样自然具有一万个的那个就会被淘汰,尽管我们让每台机子选出出现次数最多的一千个再归并,依然会出错,因为只怕存在大气个数为100二个的发出聚集。由此不能将数据随便均分到差别机子上,而是要根据hash
后的值将它们映射到不一样的对讲机上处理,让分化的机器处理三个数值范围。

 
而外排序的方法会消耗多量的IO,功效不会很高。而地方的分布式方法,也足以用来单机版本,相当于将总的数据依照值的限定,划分成多个差别的子文件,然后逐一处理。处理完成之后再对这一个单词的及其出现频率实行三个归并。实际上就足以接纳八个向外排水序的会晤进度。

 
别的还足以怀恋近似总计,也正是大家可以透过结合自然语言属性,只将那三个真正实际中冒出最多的那么些词作者为一个字典,使得那一个层面得以放入内部存款和储蓄器。 

ok,越多请参见本文化总同盟结:教你哪些快速秒杀掉:9九%的雅量数据处理面试题。以上有其余难点,欢迎指正。多谢我们。

各大搜索引擎了然了下OpenStack。决定先在虚拟机上配备贯彻openstack。

前提准备

装备:一台宿主机Windows拾 1607,一台ubuntu server 1六.0四

软件:virtualBox 5.2.0

镜像:ubuntu server 16.04

虚拟机配置

内存
4G

硬盘空间
80G

编造光盘
ubuntu-16.0四.三-server-amd6四.iso

网卡一 桥接网卡  #链接互连网

网卡贰 内部互连网

网卡3 host-only网络

别的默认

 

虚拟机安装进程

Primary network interface: 选enp0s3

Choose software :空格选中 standard system utilit,Virtual Machine
hose(虚拟机开启虚拟化效能) OpenSSH server(SSH服务)

别的暗许。。。

 

虚拟机运转配置

自身的宿主机ip是1九二.16八.0.10二

签到用户

#ip r

查看ip地址

澳门美高梅手机网站 1

虚拟机ip:192.168.0.100

确认是或不是足以ssh登录虚拟机

澳门美高梅手机网站 2

设置root密码

#sudo passwd

切换root登录

#su root

 

修改interfaces文件允许root ssh

#vim /etc/ssh/sshd_config

找到PermitRootLogin prohibit-password

修改成PermiRootLogin yes

 

修改interfaces文件,固定ip

#vim /etc/network/interfaces

在#The primary network interface上边编辑

auto enp0s3
iface enp0s3 inet static
address 192.168.0.100
netmask 255.255.255.0
gateway 192.168.0.1
dns-nameservers 114.114.114.114

auto enp0s8
iface enp0s8 inet manual

autp enp0s9
iface enp0s9 inet manual

 

#ip设置需看其实布置,不是固定

重启虚拟机尝试root SSH固定的ip登录

 

改换apt源为Ali源

vim /etc/apt/sources.list

轮换文本中剧情

deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe
multiverse 

deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted
universe multiverse 

deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted
universe multiverse 

deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted
universe multiverse 

deb http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted
universe multiverse 

deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted
universe multiverse 

deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main
restricted universe multiverse 

deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted
universe multiverse 

deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main
restricted universe multiverse 

deb-src http://mirrors.aliyun.com/ubuntu/ xenial-proposed main
restricted universe multiverse

 

保存退出执行

#apt-get update

#apt-get upgrade

 

设定时间同步

设定时区:dpkg-reconfigure tzdata

           选择Asia -> 再选择Shanghai -> OK

一道时间命令:

           壹、sudo apt-get install ntpdate // 安装时间同步工具

           二、sudo ntpdate cn.pool.ntp.org // 与互联网服务器同步时间

 

          三、date // 查看时间是或不是已联合署名

 

安装pip

apt-get install python-pip

 

pip更换为豆瓣源

#mkdir .pip

#vim .pip/pip.conf

编排内容:

[global]

index-url = http://pypi.douban.com/simple/

trusted-host = pypi.douban.com

 

下载devstack

#git clone https://github.com/openstack-dev/devstack -b stable/pike

 

 

创建 stack 用户

#devstack/tools/create-stack-user.sh

 

将devstack目录放到/opt/stack下,并安装权限

#mv devstack /opt/stack

#chown -R stack:stack /opt/stack/devstack

 

 

切换到stack用户

#su – stack

 

给stack用户配置1样的pip的豆瓣源

#mkdir .pip

#vim .pip/pip.conf

编辑内容:

[global]

index-url = http://pypi.douban.com/simple/

trusted-host = pypi.douban.com

 

cd到devstack目录下

#cd devstack

 

创建local.conf

#vim local.conf

编纂内容:

[[local|localrc]]
# Define images to be automatically downloaded during the DevStack
built process.
DOWNLOAD_DEFAULT_IMAGES=False
IMAGE_URLS=”http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86\_64-disk.img

# use TryStack git mirror
GIT_BASE=http://git.trystack.cn
NOVNC_REPO=http://git.trystack.cn/kanaka/noVNC.git
SPICE_REPO=http://git.trystack.cn/git/spice/sice-html5.git

# Credentials
DATABASE_PASSWORD=admin
ADMIN_PASSWORD=admin
SERVICE_PASSWORD=admin
SERVICE_TOKEN=admin
RABBIT_PASSWORD=admin
#FLAT_INTERFACE=enp0s3

HOST_IP=192.168.2.100

# only support IP v4
SERVICE_IP_VERSION=4

#not create default network
ENABLE_IDENTITY_V2=True

# Enabling Neutron (network) Service
disable_service n-net
enable_service q-svc
enable_service q-agt
enable_service q-dhcp
enable_service q-l3
enable_service q-meta
enable_service q-metering
enable_service neutron

## Neutron options
Q_USE_SECGROUP=True
FLOATING_RANGE=”192.168.2.0/24″
FIXED_RANGE=”192.168.100.0/24″
Q_FLOATING_ALLOCATION_POOL=start=192.168.2.102,end=192.168.2.110
PUBLIC_NETWORK_GATEWAY=”192.168.2.1″
Q_L3_ENABLED=True
PUBLIC_INTERFACE=enp0s3
Q_USE_PROVIDERNET_FOR_PUBLIC=True
OVS_PHYSICAL_BRIDGE=br-ex
PUBLIC_BRIDGE=br-ex
OVS_BRIDGE_MAPPINGS=public:br-ex

# VLAN configuration.
Q_PLUGIN=ml2
ENABLE_TENANT_VLANS=True
TENANT_VLAN_RANGE=1100:2999

# Work offline
#OFFLINE=True
# Reclone each time
RECLONE=True
# Logging
# ——-
# By default “stack.sh“ output only goes to the terminal where it
runs. It can
# be configured to additionally log to a file by setting
“LOGFILE“ to the full
# path of the destination log file. A timestamp will be appended to the
given name.
LOGFILE=/opt/stack/logs/stack.sh.log
VERBOSE=True
LOG_COLOR=True
SCREEN_LOGDIR=/opt/stack/logs

 保存退出

**HOST_IP=后边的值为虚拟机ip

 

cd 到files目录动手动下载四个缩减包幸免超时报错

#cd files/

#wget -c
https://github.com/coreos/etcd/releases/download/v3.1.10/etcd-v3.1.10-linux-amd64.tar.gz
#wget -c
 https://github.com/coreos/etcd/releases/download/v3.1.7/etcd-v3.1.7-linux-amd64.tar.gz

**叁次下载不成事请多执行上面命令两遍直到finish

 

cd回devstack目录下

#cd ..

 

运行./stack.sh

#./stack.sh

 

等候完毕如遇超时(timeout)报错请再度运维./stack.sh

形成后选用虚拟机ip登录图形化界面。

devstack更新迭代,或者过多少个月小编那篇配置失效,单机安顿openstack仅供试玩~

发表评论

电子邮件地址不会被公开。 必填项已用*标注