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
4,简述mapreduce的工作原理?
mapreduce分为四个过程: split map Shuffle reduce
split: 将大文件切割成几个小文件, 即分片
Map: split的输出作为map的输入, 一个分片对应一个map任务. 在map阶段将value值拆分为
shuffer : map的输出作为reduce的输入过程, 将map中key相同的都归纳在一起, 作为一个reduce的输入
reduce: 将key相同的数据进行累计.
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内部表和外部表的区别?
external修饰的为外部表 没有被external修饰的是内部表
1, 内部表数据由hive自身管理, 外部表数据由HDFS管理
2, 删除内部表会直接删除元数据和存储数据, 删除外部表仅仅是删除元数据 HDFS上的文件并不会被删除.
为什么需要对数据仓库进行分层?
用空间换时间, 通过大量的预处理来提升应用系统的响应效率, 因此数据仓库会存在大量的冗余数据.
如果不分层, 如果业务采集系统规则发生变化, 将会影响整个数据清洗过程. 工作量巨大.
通过数据分层可以简化数据清洗的过程,每一层的处理逻辑相对简单和容易理解. 比较容易保证每一步的正确性, 如果数据发生错误,也仅仅需要调整局部的某个步骤即可.
为什么要使用kafka?
1, 缓冲和削峰: 上游数据有时突发流量,下游可能扛不住. 或者下游没有足够多的机器保证冗余, kafka可以在中间起到一个缓冲的作用. 把消息暂存在kafka中, 下游服务有足够的时间慢慢处理.
2, 解耦和扩展性: 项目开始的时候, 需求并不确定, 消息队列可以作为一个阶层, 解耦重要的业务流程.
3, 冗余: 可以采用一对多的方式, 一个生产者发布消息, 可以被多个订阅topic的服务消费到, 提供服务给多个无关联的业务使用.
4,健壮性: 消息队列可以堆积请求, 所以即使消费端业务暂时宕机,也不会影响主要业务正常运行.
5. 异步通信: 用户有时并需要立即处理消息, 此时将消息存入队列, 等用户需要的时候再去处理它们