大数据工程师面试经验(一)

1、列式数据库相比行式数据库,它的优缺点?

优点:
极高的装载速度 (最高可以等于所有硬盘IO 的总和,基本是极限了)
适合存储大量数据
实时加载数据仅限于增加(删除和更新需要解压缩Block 然后计算然后重新压缩储存)
高效的压缩率,不仅节省储存空间也节省计算内存和CPU。
非常适合做聚合操作。
缺点:
不适合扫描小量数据
不适合随机的更新
批量更新情况各异,有的优化的比较好的列式数据库(比如Vertica)表现比较好,有些没有针对更新的数据库表现比较差。
不适合做含有删除和更新的实时操作。

2、Zookeeper的特性?

Zookeeper是大数据生态圈中的重要组件,用一句话对其进行定义就是:它是一套高吞吐的分布式协调系统。从中我们可以知道Zookeeper至少具有以下特点

1、Zookeeper的主要作用是为分布式系统提供协调服务,包括但不限于:分布式锁,统一命名服务,配置管理,负载均衡,主控服务器选举以及主从切换等。

2、Zookeeper自身通常也以分布式形式存在。一个Zookeeper服务通常由多台服务器节点构成,只要其中超过一半的节点存活,Zookeeper即可正常对外提供服务,所以Zookeeper也暗含高可用的特性。客户端可以通过TCP协议连接至任意一个服务端节点请求Zookeeper集群提供服务,而集群内部如何通信以及如何保持分布式数据一致性等细节对客户端透明。

3、Zookeeper是以高吞吐量为目标进行设计的,故而在读多写少的场合有非常好的性能表现。Zookeeper具有高吞吐特性的主要原因有以下几点:
(1)Zookeeper集群的任意一个服务端节点都可以直接响应客户端的读请求(写请求不一样),并且可以通过增加节点进行横向扩展。这是其吞吐量高的主要原因。
(2)Zookeeper将全量数据存储于内存中,从内存中读取数据不需要进行磁盘IO,速度要快得多。
(3)Zookeeper放松了对分布式数据的强一致性要求,即不保证数据实时一致,允许分布式数据经过一个时间窗口达到最终一致,这也在一定程度上提高了其吞吐量。

而写请求,或者说事务请求,因为要进行不同服务器结点间状态的同步,一定程度上会影响其吞吐量。故而简单的增加Zookeeper的服务器节点数量,对其吞吐量的提升并不一定能起到正面效果。服务器节点增加,有利于提升读请求的吞吐量,但会延长服务器节点数据的同步时间,必须视具体情况在这两者之间取得一个平衡。

3、为什么Zookeeper建议配置为奇数台?

首先,集群中的zookeeper需要超过半数,整个集群对外才可用。这里所谓的整个集群对外可用,是指整个集群还能选出一个Leader来,zookeeper默认采用quorums来支持Leader的选举。

quorums机制有两个作用:
1、保证集群中选出leader,且是唯一的一个,不会出现脑裂(split-brain);
2、当客户端更新数据时,当大多数节点更新成功,客户端就会被通知更新成功了,其他节点可以稍后再更新,以达到数据的最终一致性。

举个例子:设集群的最少节点数为n,

集群总节点数 最少可用节点数 可容忍失效的节点数
1 1 0
2 2 0
3 2 1
4 3 1
5 3 2
6 4 2
…… …… ……
2n-1 n n-1
2n n+1 n-1

由此可见,集群节点总数不能是1或2,因为可容忍失效的节点数都为0,所以要想保证zookeeper的高可用,至少需要3台以上。同时,我们可以发现一个规律,3个节点与4个节点的效果是一样的,可容忍失效的节点数都是1,即2n-1与2n,可容忍失效的节点数都是n-1。2n-1个节点能达到的效果,就没有必要用2n个节点实现,可以节省一台的成本。配置成偶数台也不会有问题,只不过浪费了而已。

你可能感兴趣的:(大数据工程师面试经验(一))