大数据面试题

Hadoop

1,Hadoop集群中都需要启动那些进程,它们的作用分别是什么?

NameNode:在hadoop的主服务器, 在内存中保存整个文件系统的名称空间和文件数据块的地址映射.    整个HDFS可存储的文件数量受限于NameNode的内存大小.  NameNode 负责文件元数据的操作.

SecondaryNameNode: 不是NameNode的冗余守护进程,  而是提供周期检查和清理任务, 帮助NameNode合并editlog 减少NameNoded的启动时间

DataNode: 提供真实的存储服务, 以数据块的形式存储HDFS文件, DataNode 响应HDFS客户端读写请求

2,Secondary NameNode不能恢复NameNode的全部数据,如何保证NameNode数据存储安全?

一个NameNode存在单点故障, 需要配置双NameNode,必须保证这两个NameNode的元数据信息保持一致.

双NameNode元信息同步采用""共享存储" 的方式, 每次写文件时, 需要将日志同步写入共享存储, 这个步骤成功才认定为写文件成功.   便于进行主备切换.

监控NameNode采用zookeeper 两个NameNode 节点的状态信息存储在zookeeper中, 其中一个down机, 会强制关闭 NameNode active节点. 将备用NameNode设置为active.

共享存储基于paxos算法(分布式系统一致性与共识算法): 在允许宕机故障的异步系统中, 2F+1个节点的系统最多允许F个节点同时出现故障,

paxos算法的大致思想:一个或多个提议进程可以发起提案, 系统中多数派同时认可该提案,即达成一致, 最多只针对一个确定的提案达成一致. 

3, 在NameNode HA中,会出现脑裂问题吗? 怎么解决脑裂?

针对脑裂问题,社区的主要办法是进行NameNode的隔离,即把旧的NameNode Active隔离起来,不对外提供服务.

在进行隔离(fencing)操作的时候 会执行以下操作:

1.常识将旧的 Active NameNode 的RPC接口方法, 转换为Standby状态

2. 如果远程RPC接口方法调用失败,hadoop采取2两种隔离措施是:

(1)sshfence 通过ssh登录到目标机器上, 执行命令fuser将对应的进程杀死,

(2)shellfence 执行一个用户自定义的shell脚本将对应进程杀死.

3, Hadoop中小文件过多会有什么危害?如何避免?

Hadoop上大量HDFS元数据信息都存储在NameNode内存中, 过多的小文件会导致NameNode的内存不足. 每个小文件占用一个block块, 在安装过程中会指定block块的大小, 因此浪费block的存储空间. 

因此小文件问题使用hadoop的CombineFileputFormat<K,V>实现小文件的合并.

4,简述mapreduce的工作原理?

mapreduce分为四个过程: split map Shuffle reduce

split: 将大文件切割成几个小文件,  即分片

Map: split的输出作为map的输入, 一个分片对应一个map任务. 在map阶段将value值拆分为<key, value> 的形式.

shuffer : map的输出作为reduce的输入过程, 将map中key相同的都归纳在一起, 作为一个reduce的输入 

reduce: 将key相同的数据进行累计.

Yarn

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

yarn最主要的功能是用户运行的程序与yarn框架的解耦 

yarn 上可以运行各种类型的分布式运算程序. 如 storm程序, spark程序.

6,yarn集群的架构和工作原理是什么?

yarn将mapreduce中的JobTracker拆分为两个独立的服务: ResourceManager和ApplicationMaster 

yarn主要由 ResourceManager Nodemanager ApplicationMaster 和 Container等几个部分组成

ResourceManager: 全局资源管理器. 负责整个系统资源的分配与管理, 由两部分组成: 调度器和应用程序管理器.   调度器:将系统中的资源分配给应用程序,保证系统资源被应用程序充分利用.

应用管理器: 负责管理系统中所有的应用程序,包括应用程序的提交,与调度器协商资源 以及监控应用程序状态.

ApplicatoinMaster: 用户提交一个应用程序对应一个ApplicationMaster,  ApplicationMaster的主要功能是:与ResourceManager的调度器协商获得资源, 资源以container的形式表现. 

NodeManager: 节点上的资源和任务管理器, 定期向ResourceManager汇报节点上的资源使用情况以及汇报container的运行状态.

Container: Container是yarn的资源抽象, 封装了各种资源, 一个应用程序分配一个Container, 一个应用程序只能使用对应container中描述的资源, Container是一个动态资源划分单位,能更充分的使用资源.

Hive

Hive内部表和外部表的区别?

external修饰的为外部表 没有被external修饰的是内部表

1, 内部表数据由hive自身管理,   外部表数据由HDFS管理

2, 删除内部表会直接删除元数据和存储数据,    删除外部表仅仅是删除元数据 HDFS上的文件并不会被删除.

为什么需要对数据仓库进行分层?

用空间换时间, 通过大量的预处理来提升应用系统的响应效率, 因此数据仓库会存在大量的冗余数据.

如果不分层, 如果业务采集系统规则发生变化, 将会影响整个数据清洗过程. 工作量巨大.

通过数据分层可以简化数据清洗的过程,每一层的处理逻辑相对简单和容易理解. 比较容易保证每一步的正确性, 如果数据发生错误,也仅仅需要调整局部的某个步骤即可.

Kafka

为什么要使用kafka?

1, 缓冲和削峰: 上游数据有时突发流量,下游可能扛不住. 或者下游没有足够多的机器保证冗余, kafka可以在中间起到一个缓冲的作用. 把消息暂存在kafka中, 下游服务有足够的时间慢慢处理.

2, 解耦和扩展性: 项目开始的时候, 需求并不确定, 消息队列可以作为一个阶层, 解耦重要的业务流程.

3, 冗余: 可以采用一对多的方式, 一个生产者发布消息, 可以被多个订阅topic的服务消费到, 提供服务给多个无关联的业务使用.

4,健壮性: 消息队列可以堆积请求, 所以即使消费端业务暂时宕机,也不会影响主要业务正常运行.

5. 异步通信: 用户有时并需要立即处理消息, 此时将消息存入队列, 等用户需要的时候再去处理它们

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

村长在路上

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值