BAT大数据的面试题 快收藏!
a、修改最大槽位数:槽位数是在各个 tasktracker 上的 mapred-site.xml 上设置的,默认都是 2
b、调整心跳间隔:集群规模小于 300 时,心跳间隔为 300 毫秒
c、启动带外心跳
d、配置多块磁盘
e、配置 RPC hander 数目
f、配置 HTTP 线程数目
g、选择合适的压缩方式,以 snappy 为例:
17、设计题 1)采集nginx产生的日志,日志的格式为user ip time url htmlId 每天产生的文件的数据量上亿条,请设计方案把数据保存到HDFS上,并提供一下实时查询的功能(响应时间小于3s) A、某个用户某天访问某个URL的次数 B、某个URL某天被访问的总次数
A、B、数据在进入到Spark-streaming 中进行过滤,把符合要求的数据保存到Redis中 18、有 10 个文件,每个文件 1G,每个文件的每一行存放的都是用户的 query,每个文件的query 都可能重复。要求你按照 query 的频度排序。 还是典型的 TOP K 算法 ##, 解决方案如下: 1)方案 1: 顺序读取 10 个文件,按照 hash(query)%10 的结果将 query 写入到另外 10 个文件(记为)中。这样新生成的文件每个的大小大约也 1G(假设 hash 函数是随机的)。 找一台内存在 2G 左右的机器,依次对用 hash_map(query, query_count)来统计每个query 出现的次数。利用快速/堆/归并排序按照出现次数进行排序。将排序好的 query 和对应的 query_cout 输出到文件中。这样得到了 10 个排好序的文件(记为)。 对这 10 个文件进行归并排序(内排序与外排序相结合)。 2)方案 2: 一般 query 的总量是有限的,只是重复的次数比较多而已,可能对于所有的 query,一次性就可以加入到内存了。这样,我们就可以采用 trie 树/hash_map等直接来统计每个 query出现的次数,然后按出现次数做快速/堆/归并排序就可以了。 3)方案 3: 与方案 1 类似,但在做完 hash,分成多个文件后,可以交给多个文件来处理,采用分布式的架构来处理(比如 MapReduce),最后再进行合并。 19、在 2.5 亿个整数中找出不重复的整数,注,内存不足以容纳这 2.5 亿个整数 。
20、腾讯面试题:给 40 亿个不重复的 unsigned int 的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那 40 亿个数当中? ## 方案 1:oo,申请 512M 的内存,一个 bit 位代表一个 unsigned int 值。读入 40 亿个数,设置相应的 bit 位,读入要查询的数,查看相应 bit 位是否为 1,为 1 表示存在,为 0 表示不存在。 方案 2:这个问题在《编程珠玑》里有很好的描述,大家可以参考下面的思路,探讨一下: 又因为 2^32 为 40 亿多,所以给定一个数可能在,也可能不在其中; 这里我们把 40 亿个数中的每一个用 32 位的二进制来表示 ,假设这 40 亿个数开始放在一个文件中。 然后将这 40 亿个数分成两类:
并将这两类分别写入到两个文件中,其中一个文件中数的个数=20 亿,而另一个=20 亿(这相当于折半了); 与要查找的数的最高位比较并接着进入相应的文件再查找 再然后把这个文件为又分成两类:
并将这两类分别写入到两个文件中,其中一个文件中数的个数=10 亿,而另一个=10 亿(这相当于折半了); 与要查找的数的次最高位比较并接着进入相应的文件再查找。 ..... 以此类推,就可以找到了,而且时间复杂度为 O(logn),方案 2 完。 (编辑:天津站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |