大数据的那些面试题及答案(一) ---阿善有用
1. Flume系列:
1.Channel Selectors有几种类型,它们的区别是什么?
答:有两种。Replicating Channel Selector(默认的)和Multiplexing Channel Selector。
(1)Replicating Channel Selector会将source过来的events发往所有的channel。
(2)Multiplexing Channel Selector,可以选择将source过来的events发往哪些channel。
2.Flume 的 Channel有几种,它们的区别是什么?
答:有两种。Memory Channel和File Channel
(1)Memory Channel是内存中的队列。Memory Channel在不需要关心数据丢失的情景下适用。(如果需要关心数据丢失,那么Memory Channel就不应该使用,因为程序死亡、机器宕机或者重启都会导致数据丢失。)
(2)File Channel将所有事件==写到磁盘。==因此在程序关闭或机器宕机的情况下不会丢失数据
2. zookeeper系列
1.请简述zookeeper的选举机制
(1)半数机制:集群中半数以上机器存活,集群可用。所以Zookeeper 适合安装奇数台服务器。
(2)Zookeeper 虽然在配置文件中并没有指定 Master 和 Slave。但是,Zookeeper 工作时,是有一个节点为 Leader,其他则为 Follower,Leader 是通过内部的选举机制临时产生的。
(3)以一个简单的例子来说明整个选举的过程。
假设有五台服务器组成的 Zookeeper 集群,它们的 id 从 1-5,同时它们都是最新启动的,也就是没有历史数据,在存放数据量这一点上,都是一样的。假设这些服务器依序启动,会发生什么,如图
- 服务器 1 启动,此时只有它一台服务器启动了,它发出去的报文没有任何响应,
所以它的选举状态一直是 LOOKING 状态。 - 服务器 2 启动,它与最开始启动的服务器 1 进行通信,互相交换自己的选举结果,
由于两者都没有历史数据,所以 id 值较大的服务器 2 胜出,但是由于没有达到超过半数以上的服务器都同意选举它(这个例子中的半数以上是 3),所以服务器 1、2 还是继续保持LOOKING 状态。 - 服务器 3 启动,根据前面的理论分析,服务器 3 成为服务器 1、2、3 中的老大,
而与上面不同的是,此时有三台服务器选举了它,所以它成为了这次选举的 Leader。 - 服务器 4 启动,根据前面的分析,理论上服务器 4 应该是服务器 1、2、3、4 中最
大的,但是由于前面已经有半数以上的服务器选举了服务器 3,所以它只能接收当小弟的命了。 - 服务器 5 启动,同 4 一样当小弟。
个人总结选举机制类似于投票,每台服务器先给自己投一票,如果投票结果小于总服务器数量的半数以上,则竞选leader失败,然后再将票投给myid比自己大的服务器,直到某台服务器的投票结果大于总数的半数以上,则该服务器被荣幸选为leader,一旦leader选出,接下来的服务器只能是follower了。除非这个leader坏掉,再重新进行下一轮选举。
2.zookeeper的监听器原理
(1)首先要有一个main()线程
(2)在main线程中创建Zookeeper客户端,这时就会创建两个线 程,一个负责网络连接通信(connet),一个负责监听(listener)。
(3)通过connect线程将注册的监听事件发送给Zookeeper。
(4)在Zookeeper的注册监听器列表中将注册的监听事件添加到列表中。
(5)Zookeeper监听到有数据或路径变化,就会将这个消息发送 给listener线程。 (6)listener线程内部调用了process()方法。 - 3.常见的监听有哪些?
(1)监听节点数据的变化
get path [watch]
(2)监听子节点增减的变化
ls path [watch]
4.机器中为什么会有leader?
在分布式环境中,有些业务逻辑只需要集群中的某一台机器进行执行,其他的机器可以共享这个结果,这样可以大大减少重复计算,提高性能,于是就需要进行leader选举。
5.ZooKeeper 的部署方式有哪几种?
部署方式:单机模式、集群模式
6.zookeeper集群中的角色有哪些?
Leader 和 Follower
7.集群最少需要几台机器?
3台
8.ZooKeeper 的常用命令
ls create get delete set…
9.zookeeper的应用场景及具体介绍
1 概述
Zookeeper 是一个开源的分布式的,为分布式应用提供协调服务的 Apache 项目。2 Zookeeper工作机制
3 特点
1)Zookeeper:一个领导者(Leader),多个跟随者(Follower)组成的集群。
2)集群中只要有半数以上节点存活,Zookeeper集群就能正常服务。(如果有四台机器,挂掉两台,不能正常服务,因为存活机器没有达到半数以上)
3)全局数据一致:每个Server保存一份相同的数据副本,Client无论连接到哪个Server,数据都是一致的。(有几个节点备份几份数据,而hdfs默认备份3份)
4)更新请求顺序进行,来自同一个Client的更新请求按其发送顺序依次执行。
5)数据更新原子性,一次数据更新要么成功,要么失败。(此处和事务的特点之原子性类似)
6)实时性,在一定时间范围内,Client能读到最新数据。(因为zookeeper存放的数据量少)
4 zookeeper数据结构
ZooKeeper数据模型的结构与Unix文件系统很类似,整体上可以看作是一棵树,每个节点称做一 个ZNode。每一个ZNode默认能够存储1MB的数据,每个ZNode都可以通过其路径唯一标识。
5 应用场景
提供的服务包括:统一命名服务、统一配置管理、统一集群管理、服务器节点动态上下线、软负载均衡等。- zookeeper统一命名服务
在分布式环境下,经常需要对应用/服务进行统一命名,便于识别。 例如:IP不容易记住,而域名容易记住。 - zookeeper统一配置管理
- 分布式环境下,配置文件同步非常常见。
(1)一般要求一个集群中,所有节点的配置信息是 一致的,比如 Kafka 集群。
(2)对配置文件修改后,希望能够快速同步到各个 节点上。 - 配置管理可交由ZooKeeper实现。
(1)可将配置信息写入ZooKeeper上的一个Znode。
(2)各个客户端服务器监听这个Znode。
(3)一旦Znode中的数据被修改,ZooKeeper将通知 各个客户端服务器。
-
zookeeper统一集群管理
-
分布式环境中,实时掌握每个节点的状态是必要的。
(1)可根据节点实时状态做出一些调整。 -
ZooKeeper可以实现实时监控节点状态变化
(1)可将节点信息写入ZooKeeper上的一个ZNode。
(2)监听这个ZNode可获取它的实时状态变化。 -
zookeeper服务器动态上下线
客户端能实时洞察到服务 器上下线的变化 -
zookeeper软负载均衡
在Zookeeper中记录每台服务器的访问数,让访问数最少的服务器去处理最新的客户端请求 -
6.zookeeper的节点类型
-
持久(Persistent):客户端和服务器端断开连接后,创建的节点不删除
(1)持久化目录节点
客户端与Zookeeper断开连接后,该节点依旧存在
(2)持久化顺序编号目录节点
客户端与Zookeeper断开连接后,该节点依旧存 在,只是Zookeeper给该节点名称进行顺序编号 -
短暂(Ephemeral):客户端和服务器端断开连接后,创建的节点自己删除
(1)临时目录节点
客户端与Zookeeper断开连接后,该节点被删除
(2)临时顺序编号目录节点
客户端与Zookeeper断开连接后, 该节点被删除 , 只是 Zookeeper给该节点名称进行顺序编号。
说明
:创建znode时设置顺序标识,znode名称后会附加一个值,顺序号是一个单调递增的计数器,由父节点维护注意
:在分布式系统中,顺序号可以被用于为所有的事件进行全局排序,这样客户端可以通过顺序号推断事件的顺序
7.客户端命令行操作 - zookeeper统一命名服务
3.spark系列
1.storm和SparkStreaming的区别
(1)处理效率不同,storm可以实现mm级响应,streaming是m级,无法实现mm级的流计算
优点:底层基于内存和DAG,架构在Sparkcore基础上
(2)SparkStreaming构建在Spark上,一方面是因为Spark的低延迟执行引擎可以用于实时计算,另一方面,相比于storm,RDD数据集更容易做高效的容错处理。
(3)SparkStreaming采用的小批量处理的方式使得它可以同时兼容和实时数据处理的逻辑和算法,因此,方便了一些需要历史数据和实时数据联合分析的特定应用场合。
4.Mysql系列
1.五大约束
- 主键约束(Primay Key) 唯一性,非空性(惟一地指定一行记录)
- 唯一约束 (Unique)唯一性,可以空,但只能有一个
- 检查约束 (Check) 对该列数据的范围、格式的限制(如:年龄、性别等)
- 默认约束 (Default ) 该数据的默认值
- 外键约束 (Foreign Key) 需要建立两表间的关系并引用主表的列
2.数据库设置约束条件有什么好处?
数据库约束是为了防止数据库中存在不正确的数据保证数据的完整性