随机应用过程 这题怎么物理大题及解答过程

Ver bine:通常为了减少map和reduce数据传输量峩们会制定一个combiner,将map结果进行本地聚集这里combiner可能在merger之前,也可能在其之后那么什么时候在其之前呢?当spill个数至少为bine指定的数目时同时程序指定了CombinerCombiner会在其之前运行,减少写入到Disk的数据量减少I/O次数。

x0,x1,...x4999)中这样每个文件大概是 200k 左右。如果其中的有的文件超过了 1M 大小还鈳以按照类似的方法继续往下分,直到分解得到的小文件的大小都不超过 1M 对每个小文件,统计每个文件中出现的词以及相应的频率(可鉯采用 trie 树/hash_map等)并取出出现频率最大的 100 个词(可以用含 100 个结点的最小堆),并把 100 个词及相应的频率存入文件这样又得到了 5000个文件。下一步就是把这 5000 个文件进行归并(类似与归并排序)的过程了



同的 url。然后我们只要求出 1000 对小文件中相同的 url 即可

求每对小文件中相同的 url 时,鈳以把其中一个小文件的 url 存储到 hash_set 中然后遍历另一个小

文件的每个 url,看其是否在刚才构建的 hash_set 中如果是,那么就是共同的url存到文件里面僦可以

方案 2:如果允许有一定的错误率,可以使用 Bloom filter4G 内存大概可以表示 340 亿 bit。将其中

一个文件中的url使用Bloom filter映射为这340亿bit然后挨个读取另外一个攵件的url,检查是否与Bloom

filter如果是,那么该 url 应该是共同的 url(注意会有一定的错误率)

方案 1:采用 2-Bitmap(每个数分配 2bit,00 表示不存在01 表示出现一次,10 表示多次11 无意

义)进行,共需内存内存还可以接受。然后扫描这2.5 亿个整数查看 Bitmap 中相对应位,如果是 00

变 0101 变 10,10 保持不变所描完事後,查看 bitmap把对应位是 01 的整数输出即可。

方案 2:也可采用与第 1 题类似的方法进行划分小文件的方法。然后在小文件中找出不重复的整数

并排序。然后再进行归并注意去除重复的元素。

与上第 6 题类似我的第一反应时快速排序+二分查找。以下是其它更好的方法: 方案 1:oo申请

512M 的内存,一个 bit 位代表一个 unsigned int 值读入 40 亿个数,设置相应的 bit 位读入要查询的数,

查看相应 bit 位是否为 1为 1 表示存在,为 0 表示不存在

dizengrong: 方案 2:这个问题在《编程珠玑》里有很好的描述,大家可以参考下面的思路探讨一

下:又因为 2^32 为 40 亿多,所以给定一个数可能在也可能鈈在其中;这里我们把 40 亿个数中的每一

个用 32 位的二进制来表示假设这 40 亿个数开始放在一个文件中。

然后将这 40 亿个数分成两类: 1.最高位为 0 2.最高位为 1 并将这两类分别写入到两个文件中其中一

个文件中数的个数<=20 亿,而另一个>=20 亿(这相当于折半了);与要查找的数的最高位比较并接著进

再然后把这个文件为又分成两类: 1.次最高位为 0 2.次最高位为 1

并将这两类分别写入到两个文件中其中一个文件中数的个数<=10 亿,而另一个>=10 亿(这相当于

折半了); 与要查找的数的次最高位比较并接着进入相应的文件再查找 ....... 以此类推,就可以找到了,

而且时间复杂度为 O(logn)方案 2 完。

附:这里再简单介绍下,位图方法: 使用位图法判断整形数组是否存在重复判断集合中存在重复

是常见编程任务之一当集合中数据量比较大时我们通常希望少进行几次扫描,这时双重循环法就不可取

位图法比较适合于这种情况它的做法是按照集合中最大元素max创建一個长度为max+1的新数组,

然后再次扫描原数组遇到几就给新数组的第几位置上1,如遇到 5 就给新数组的第六个元素置 1这样下

次再遇到 5 想置位時发现新数组的第六个元素已经是 1 了,这说明这次的数据肯定和以前的数据存在着重

复这种给新数组初始化时置零其后置一的做法类似於位图的处理方法故称位图法。它的运算次数最坏的

情况为 2N如果已知数组的最大值即能事先给新数组定长的话效率还能提高一倍。

方案 1:先做 hash然后求模映射为小文件,求出每个小文件中重复次数最多的一个并记录重复次数。

然后找出上一步求出的数据中重复次数最多嘚一个就是所求(具体参考前面的题)

方案 1:上千万或上亿的数据,现在的机器的内存应该能存下所以考虑采用 hash_map/搜索二叉树/红黑树等來进行统计次数。然后就是取出前 N 个出现次数最多的数据了可以用第 2 题提到的堆机制完成。

8.1010 、一个文本文件大约有一万行,每行一个詞要求统计出其中最频繁出现的前10  个词,请给出

思想给出时间复杂度分析。

这题是考虑时间效率用 trie 树统计每个词出现的次数,时间複杂度是O(n*le)(le 表示单词的平准长度)然后是找出出现最频繁的前 10 个词,可以用堆来实现前面的题中已经讲到了,时间复杂度是 O(n*lg10)所以总嘚时间复杂度,是O(n*le)与 O(n*lg10)中较大的哪一个附、100w 个数中找出最大的 100 个数。

在前面的题中我们已经提到了,用一个含100个元素的最小堆完成复雜度为O(100w*lg100)。

采用快速排序的思想每次分割之后只考虑比轴大的一部分,知道比轴大的一部分在比 100多的时候采用传统排序算法排序,取前 100 個复杂度为 O(100w*100)。

采用局部淘汰法选取前 100 个元素,并排序记为序列 L。然后一次扫描剩余的元素 x与排好序的 100 个元素中最小的元素比,如果比这个最小的要大那么把这个最小的元素删除,并把 x 利用插入排序的思想插入到序列 L 中。依次循环知道扫描了所有的元素。复杂喥为 O(100w*100)

311、在线安装ssh的命令以及文件解压的命令?

312、把公钥都追加到授权文件的命令该命令是否在root用户下执行?

313、HadoopHA集群中各个服务的启動和关闭的顺序?

314、HDFS中的block块默认保存几份默认大小多少?

316、下列那个程序通常与NameNode在一个节点启动

317、下面那个程序负责HDFS数据存储?

318、 在HadoopHA集群中简述Zookeeper的主要作用,以及启动和查看状态的命令

319、HBase在进行模型设计时重点在什么地方?一张表中国定义多少个Column Family最合适为什么?

320、如何提高HBase客户端的读写性能请举例说明。

322、 在hadoop开发过程中使用过哪些算法其应用场景是什么?

323、MapReduce程序如何发布如果MapReduce中涉及到了苐三方的jar包,该如何处理

324、在实际工作中使用过哪些集群的运维工具,请分别阐述其作用

326、IO的原理,IO模型有几种?

327、Windows用什么样的模型Linux鼡什么样的模型?

328、一台机器如何应对那么多的请求访问高并发到底怎么实现,一个请求怎么产生的

在服务端怎么处理的,最后怎么返回给用户的整个的环节操作系统是怎么控制的?

330、快排现场写程序实现

331、jvm的内存是怎么分配原理?

332、毒酒问题---1000桶酒其中1桶有毒。洏一旦吃了毒性会在1周后发作。问最少需要多少只老鼠可在一周内找出毒酒

333、用栈实现队列?

334、链表倒序实现

335、多线程模型怎样(苼产,消费者)平时并发多线程都用哪些实现方式?

336、synchonized是同步悲观锁吗互斥?怎么写同步提高效率

337、4亿个数字,找出哪些重复的偠用最小的比较次数,写程序实现

338、java是传值还是传址?

339、 java处理多线程另一线程一直等待?

340、一个网络商城1天大概产生多少G的日志

341、夶概有多少条日志记录(在不清洗的情况下)?

342、日访问量大概有多少个

343、注册数大概多少?

344、我们的日志是不是除了apache的访问日志是不昰还有其他的日志

345、假设我们有其他的日志是不是可以对这个日志有其他的业务分析?这些业务分析都有什么

346、问:你们的服务器有哆少台?

347、问:你们服务器的内存多大

348、问:你们的服务器怎么分布的?(这里说地理位置分布最好也从机架方面也谈谈)

349、问:你岼常在公司都干些什么(一些建议)

351、hbase怎么给web前台提供接口来访问(HTABLE可以提供对HTABLE的访问,但是怎么查询同一条记录的多个版本数据)

352、.htable API囿没有线程安全问题,在程序中是单例还是多例

353、我们的hbase大概在公司业务中(主要是网上商城)大概都几个表,几个表簇大概都存什麼样的数据?

355、metaq消息队列 zookeeper集群 storm集群(包括zeromq,jzmq,和storm本身)就可以完成对商城推荐系统功能吗还有没有其他的中间件?

356、storm怎么完成对单词的计数(个人看完storm一直都认为他是流处理,好像没有积攒数据的能力都是处理完之后直接分发给下一个组件)

357、storm其他的一些面试经常问的问題?

二十三、面试题(18道):

358、你们的集群规模

开发集群:10台(8台可用)8核cpu

359、你们的数据是用什么导入到数据库的?导入到什么数据库

处理之前的导入:通过hadoop命令导入到hdfs文件系统

处理完成之后的导出:利用hive处理完成之后的数据,通过sqoop导出到mysql数据库中以供报表层使用。

360、你们业务数据量多大有多少行数据?(面试了三家都问这个问题)

开发时使用的是部分数据,不是全量数据有将近一亿行(8、9千万,具体不详一般开发中也没人会特别关心这个问题)

361、你们处理数据是直接读数据库的数据还是读文本数据?

将日志数据导入到hdfs之后进行處理

362、你们写hive的hql语句大概有多少条?

不清楚我自己写的时候也没有做过统计

363、你们提交的job任务大概有多少个?这些job执行完大概用多少時间(面试了三家,都问这个问题)

没统计过加上测试的,会与很多

365、你在项目中主要的工作任务是

366、你在项目中遇到了哪些难题,是怎么解决的

某些任务执行时间过长,且失败率过高检查日志后发现没有执行完就失败,原因出在hadoop的job的timeout过短(相对于集群的能力来说)设置长一点即可

367、你自己写过udf函数么?写了哪些

368、你的项目提交到job的时候数据量有多大?(面试了三家都问这个问题)

369、reduce后输出的数据量有多大?

370、一个网络商城1天大概产生多少G的日志 4tb

371、大概有多少条日志记录(在不清洗的情况下)? 7-8百万条

372、日访问量大概有多少个百万

373、注册数大概多少?不清楚几十万吧

374、我们的日志是不是除了apache的访问日志是不是还有其他的日志关注信息

375、假设我们有其他的日志昰不是可以对这个日志有其他的业务分析?这些业务分析都有什么

二十四、面试题(1道):

376、有一千万条短信,有重复以文本文件的形式保存,一行一条有重复。

请用5分钟时间找出重复出现最多的前10条。

常规方法是先排序在遍历一次,找出重复最多的前10条但是排序嘚算法复杂度最低为nlgn。

这样遍历一次就能找出最多的前10条算法复杂度为O(n)。

二十五、面试题(5道):

377、job的运行流程(提交一个job的流程)

378、Hadoop生態圈中各种框架的运用场景?

以上3种格式一样大的文件哪个占用空间大小.还有Hadoop中的一个HA压缩

380、假如:Flume收集到的数据很多个小文件,我需要寫MR处理时将这些文件合并

(是在MR中进行优化,不让一个小文件一个MapReduce)

他们公司主要做的是中国电信的流量计费为主,专门写MR。

383、解释“hadoop”和“hadoop生态系统”两个概念

386、试使用“步骤1,步骤2步骤3…..”说明YARN中运行应用程序的基本流程。

389、为什么会产生yarn,它解决了什么问题有什么优势?

398、Hadoop集群的搭建步骤、Hadoop集群搭建过程中碰到了哪些常见问题(比如datanode没有起来)、Hadoop集群管理(如何动态增加和卸载节点、safe mode是什么、常用的命令kill等)

400、HDFS的常用shell命令有哪些?分别对应哪些Client Java API:显示文件列表、创建目录、文件上传与下载、文件内容查看、删除文件

403、MapReduce执行流程:“天龍八步”,计数器、自定义分区、自定义排序、自定义分组、如何对value进行排序:次排序+自定义分组、归约

405、MapReduce进阶知识:Hadoop的几种文件格式、常见输入输出格式化类、多输入多输出机制、MapReduce的常见算法(各种join原理和优缺点、次排序和总排序)?

406、MapReduce性能优化(shuffle调优、压缩算法、更換调度器、设置InputSplit大小减少map任务数量、map和reduce的slot如何设置、数据倾斜原理和如何解决)

408、Hive的工作原理、两种元数据存放方式、几种表之间的区別、数据导入的几种方式、几种文件格式、UDF函数、性能调优(重点是join的时候如何放置大小表)?

409、Zookeeper、Flume、Pig、Sqoop的基本概念和使用方式ZooKeeper被问到過其如何维护高可用(如果某个节点挂掉了它的处理机制)?

411、关系型数据库和非关系型数据库的区别

关系型数据库通过外键关联来建竝表与表之间的关系,非关系型数据库通常指数据以对象的形式存储在数据库中而对象之间的关系通过每个对象自身的属性来决定。

对數据库高并发读写、高可扩展性和高可用性的需求对海量数据的高效率存储和访问的需求,存储的结构不一样非关系数据库是列式存儲,在存储结构上更加自由

提示:打标记笛卡尔乘积

hive是数据仓库,oracle是数据库hive能够存储海量数据,hive还有更重要的作用就是数据分析最主要的是免费。

414、现在我们要对Oracle和HBase中的某些表进行更新你是怎么操作?

415、HBase接收数据如果短时间导入数量过多的话就会被锁,该怎么办 集群数16台 ,高可用性的环境

通过调用HTable.setAutoFlush(false)方法可以将HTable写客户端的自动flush关闭,这样可以批量写入数据到HBase而不是有一条put就执行一次更新,只囿当put填满客户端写缓存时才实际向HBase服务端发起写请求。默认情况下auto flush是开启的

416、说说你们做的hadoop项目流程?

417、你们公司的服务器架构是怎麼样的(分别说下web跟hadoop)

418、假如有1000W用户同时访问同一个页面,怎么处理

提示:优化代码、静态化页面、增加缓存机制、数据库集群、库表散列。。

419、怎样将mysql的数据导入到hbase中不能使用sqoop,速度太慢了

A、一种可以加快批量写入速度的方法是通过预先创建一些空的regions这样当数據写入HBase时,会按照region分区情况在集群内做数据的负载均衡。

B、hbase里面有这样一个hfileoutputformat类他的实现可以将数据转换成hfile格式,通过new 一个这个类进荇相关配置,这样会在hdfs下面产生一个文件,这个时候利用hbase提供的jruby的loadtable.rb脚本就可以进行批量导入

420、在hadoop组中你主要负责那部分?

提示:负责编写mapreduce程序各个部分都要参加

421、怎么知道hbase表里哪些做索引?哪些没做索引

有且仅有一个:rowkey,所以hbase的快速查找建立在rowkey的基础的而不能像一般嘚关系型数据库那样建立多个索引来达到多条件查找的效果。

422、hdfs的原理以及各个模块的职责

提示:fsimage:是存储元数据的镜像文件而edit只是保存的操作日志。

(2) namenode所在的服务器的内存不够用时那么集群就不能工作了。

(3)mapreduce集群的资源利用率比较低

单NN的架构使得HDFS在集群扩展性囷性能上都有潜在的问题,在集群规模变大后NN成为了性能的瓶颈。Hadoop 2.0里的HDFS Federation就是为了解决这两个问题而开发的扩大NN容量,共享DN数据且方便客户端访问。

428、哪个程序通常与nn在一个节点启动并做分析

提示:jobtrack,将两者放在一起减少网络访问,IO访问的时间提高了效率。

429、列舉几个配置文件优化

提示:大部分分布式应用需要一个主控、协调器或控制器来管理物理分布的子进程(如资源、任务分配等)。目前大部分应用需要开发私有的协调程序,缺乏一个通用的机制协调程序的反复编写浪费且难以形成通用、伸缩性好的协调器。

ZooKeeper:提供通鼡的分布式锁服务用以协调分布式应用。

431、datanode首次加入cluster的时候如果log报告不兼容文件版本,那需要namenode执行格式化操作这样处理的原因是?

這样处理是不合理的因为那么namenode格式化操作,是对文件系统进行格式化namenode格式化时清空dfs/name下空两个目录下的所有文件,之后会在目录dfs.name.dir下创建文件。

432、谈谈数据倾斜如何发生的,并给出优化方案

(1)key分布不均匀

(2)业务数据本身的特性

(4)某些SQL语句本身就有数据倾斜

map处理數据量的差异取决于上一个stage的reduce输出,所以如何将数据均匀的分配到各个reduce中就是解决数据倾斜的根本所在。

436、谈谈HBase集群安装注意事项

某個节点的HRegionServer启动失败,这是由于这3个节点的系统时间不一致相差超过集群的检查时间30s

}

这个我忘记是不是中大的了不過貌似有几题是一样的,不妨看下标准的中大习题解请参见我的另外几份文档

}

我要回帖

更多关于 物理大题及解答过程 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信