ITPub博客

首页 > 大数据 > Hadoop > 大数据面试题

大数据面试题

原创 Hadoop 作者:noob_in_itpub 时间:2018-09-25 18:24:17 0 删除 编辑

Hadoop HA是什么:

高可用架构。

  • Hadoop 1.x中,集群只有1个节点,当出现 1、主节点宕机;2、软、硬件升级时,导致集群短时间不可用。

为了解决上述问题,Hadoop 2.x给出了HDFS的高可用HA方案:

  • HA有两个主节点组成,在任何时间,一个处于active状态,另一个处于standby状态。

在HDFS和YARN上, 分别有两个NameNode和ReosurceManager ,由Zookeeper统一管理、Active节点选举,进行故障转移。使用NFS(Network File System)和QJM(Quorum Journal Manager)实现HA,在常用的QJM中,配置奇数个JournalNode,元数据只要写入多数JournalNode就认为写入成功。

HBase、MapReduce继承了哪些类、导入哪些jar包:

map类继承了类库中的Mapper;Reducer类继承了类库中的Reducer;MiniMapReduceDriver类(即主函数中setJarByClass, FileInputFormat,FileOutputFormat类);InputFormat、OutputFormat类,默认格式为TextInputFormat、TextOutputForamt。InputSplit类,RecordReader和RecordWriter类。


编写MapReduce程序需要导入的jar包:Hadoop-common、guava、Hadoop-mapreduce-client-core、Hadoop-mapreduce-client-common、Hadoop-mapreduce-client-jobClient、common-cli、common-logging。


HBase继承了HBaseAdmin类、HTableDescriptor类、HTable类、RowFilter类。MapReduce-HBase还继承了

TableInputFormat类、TableOutputFormat类、TableMapper类、TableReducer类、TableMapReduceUtil类。


编写HBase程序需要导入的jar包:Hadoop-core、HBase、Zookeeper、common-logging、log4j。

MapReduce框架工作原理

优点:易于编程;良好的扩展性;高容错性。

MR 1.x:由JobTracker和TaskTracker组成,JobTracker负责资源管理和作业控制,TaskTracker负责作业的运行。

工作流程:

作业提交--JobClient向JobTracker申请可用job并从JobTracker获取jobID;将(程序jar包、配置文件、输入分片等)资源存入HDFS中;告知JobTracker准备执行作业。

作业的初始化--JobTracker利用作业调度器从HDFS中获取以及分片好的splits,为每一个split创建一个map和reduce任务。

任务的分配--TaskTracker向JobTracker发送心跳信号,表明自己正常运行。JobTracker为TaskTracker分配任务,对于map任务,选取一个距离输入分片最近的TaskTracker执行任务;对于reduce任务,JobTracker从reduce列表中选取下一个执行任务。

任务的执行--从HDFS中把jar文件复制到TaskTracker所在的文件系统,同时TaskTracker将程序执行的文件从HDFS复制到本地硬盘,并开启JVM进程运行此任务。


MR 2.x:将JobClient的资源管理和作业调度分为两个独立的组件,分别为ResourceManager和ApplicationMaster,简写为RM和AM。

ResourceManager主要包含两个组件:定时调度器(Scheduler)和应用管理器(ApplicationsManager,ASM),调度器将内存、CPU、网络磁盘等资源抽象为Container,ASM负责接收作业和获取第一个容器用于执行AM。

NodeManager(NM)是每个节点的框架代理,负责启动应用所需的容器,监控容器的使用情况报告给Scheduler。

AM:负责从Scheduler申请资源,以及跟踪资源的使用情况和任务进度的监控。

工作流程:

作业提交--客户端向RM申请任务并收到一个ApplicationID;计算作业的输入分片,将(程序jar包,配置文件、分片信息)等资源复制到HDFS;告知RM准备执行任务。

作业的初始化--RM为任务分片Container,并于对应的NM进行通信,要求它在container启动AM,AM从HDFS获取资源并为每个分片创建map和reduce任务。

任务分配--AM向RM注册,为每个map和reduce任务获取资源。

任务执行--AM获取到资源后,与NM进行交互,要求它在container中执行任务。

任务完成--AM向RM注销并关闭自己。

MapReduce的shuffle过程:

shuffle过程贯穿于map、reduce端,要求:

1、完整地从map端拉取数据到reduce端;

2、在拉取的过程中,尽量减少网络资源的消耗;

3、尽量减少磁盘IO对task任务的影响。

工作流程:

map端:map执行后,通过partitioner接口将得到的key/value对分区(目的:平衡reduce的处理能力,防止数据倾斜,保证负载均衡),键值对持续写入到内存缓冲区中,达到阈值后进行溢写过程(将键值对存储在本地磁盘上);当溢写线程启动后,需要对阈值内的数据进行排序;(若设置combiner,则会对相同分区的键值对进行合并,减少拉取数据的次数),如果数据量很大,会产生多个溢写文件,则需要将这些相同分区的溢写文件合并为一个文件(必须)。

reduce端:将map端的数据拉取到reduce端;将不同map端拉取的数据进行合并产生reduce阶段的输入文件。

HBase为什么会产生访问热点问题:

由于HBase按字典顺序存储Row Key,而实验使用的数据集中包含大量的文件名类似度极高、文件重名的现象。导致大量Row Key存储在一个或几个Region上,客户端访问这些文件时,会造成个别的region server读/写请求过多、负载过大,而其他的region server负载较小,这就是热点问题。

       常见解决方法:

加盐--在Row Key前加随机数,前缀的数目应和我们想要分散数据到不同的region的数量一致;

哈希--在Row Key前加一个哈希值(加盐的一种);

反转--常见于手机号存储中。

        Row Key遵循原则:

唯一性原则;尽量短原则;散列原则。

HBase region拆分策略:

拆分步骤为:先将该region下线,然后拆分,然后将其子region加入META元信息中,再将它们加入到原本的region server中,最后汇报给master。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31556059/viewspace-2214831/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: JAVA面试
请登录后发表评论 登录
全部评论
一把辛酸泪,谁解其中味。

注册时间:2018-09-25

  • 博文量
    2
  • 访问量
    900

最新文章