大数据常见问题

1、给一个超过100G大小的log file,log中存着IP地址,设计算法找到出现次数最多的IP地址?(与如何知道top K的IP,如何使用Linux系统命令实现)

Hash分桶法:

  • 将100G文件分成1000份,将每个IP地址映射到相应文件中:file_id = hash(ip) % 1000

  • 在每个文件中分别求出最高频的IP,再合并Hash分桶法;

  • 使用Hash分桶法把数据分发到不同的文件;

  • 各个文件分别统计top K;

2、给定100亿个整数,设计算法找到只出现一次的整数。

Hash分桶法,将100亿个整数映射到不同的区间,在每个区间中分别找只出现一次的整数。

3、给两个文件,分别有100亿个整数,我们只有1G内存,如何找到两个文件交集

扫描每个整数是否出现过,节省内存方法使用bitmap。

桶分 + bitmap。如果整数是32bit,直接使用bitmap的方法实现。

所有整数共232种可能,每个数用两位表示,00表示文件均没出现,10表示文件1出现过,01表示文件2出现过,11表示两文件均出现过,共需要232*2/8 = 1GB内存,遍历两个文件中的所有整数,然后寻找bitmap中11对应的整数即是两个文件的交集,这样即可线性时间复杂度完成。

4、1个文件有100亿个int,1G内存,设计算法找大出现次数超过2次的所有整数。

Bitmap扩展:用2个bit表示状态,0表示未出现,1出现过1次,2出现过2次或以上。

5、给两个文件,分别有100亿个query,我们只有1G内存,如何找到两个文件交集?分别给出精确算法和近似算法?

精确算法:Hash分桶法

将两个文件中的query hash到N个小文件中,并标明query的来源;

在各个小文件中找到重合的query

将找到的重合query汇总

近似算法:BloomFilter算法

5、说说Zookeeper

640.jpg
640hbase.jpg

Zookeeper的核心是原子广播,这个机制保证了各个Server之间的同步。实现这个机制的协议叫做Zab协议。Zab协议有两种模式,它们分别是恢复模式(选主)和广播模式(同步)。当服务启动或者在领导者崩溃后,Zab就进入了恢复模式,当领导者被选举出来,且大多数Server完成了和leader的状态同步以后,恢复模式就结束了。状态同步保证了leader和Server具有相同的系统状态。

当leader崩溃或者leader失去大多数的follower,这时候zk进入恢复模式,恢复模式需要重新选举出一个新的leader,让所有的Server都恢复到一个正确的状态。

ZooKeeper学习第一期---Zookeeper简单介绍

6、说说HBase

Hbase架构与原理

Dpz74XZ.jpg

7、说说ETL

ETL讲解

ETL (Extract-Transform-Load的缩写,即数据抽取、转换、装载的过程)
是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程,目的是将企业中的分散、零乱、标准不统一的数据整合到一起,为企业的决策提供分析依据。